Я хочу знать, разрешима ли следующая проблема и как узнать. В каждой проблеме, которую я вижу, я могу сказать «да» или «нет», так что большинство проблем и алгоритмов разрешимы, кроме нескольких (которые представлены здесь )?
Входные данные: направленный и конечный граф с вершинами и Вопрос: Существует ли путь в с качестве начальной вершины и качестве конечной вершины?v u G u v
Ответы:
Любая проблема, которая требует только проверки конечного количества данных, разрешима, потому что существует алгоритм, который состоит из перечисления всех потенциальных решений. Это может быть смехотворно медленным, но это не имеет значения: если есть алгоритм, он решаем.
Поставленная вами задача предполагает конечный граф, который намекает на то, что он разрешим. Строго говоря, нужно смотреть немного дальше. Проблема заключается в свойстве путей в графе, и иногда существует бесконечное число путей, когда граф содержит цикл (вы можете циклически обходить этот цикл столько раз, сколько захотите). Тем не менее, легко превратить проблему в конечную проблему: если есть какой-либо путь, начинающийся с и заканчивающийся v, который включает цикл, то вы можете вырезать все циклы на этом пути, и у вас есть новое решение, которое делает не включать цикл. Поскольку существует конечное число путей, не включающих цикл (если граф имеет k ребер, их не больше k !u v k k! пути, которые не используют одно и то же ребро более одного раза), проблема нахождения пути от до v является конечной, поэтому разрешимой.u v
Кстати, это свойство называется связностью .
Этот подход является распространенным, называется сокращением . Учитывая проблему, которая не является простой, мы сократили ее до проблемы, которую мы знали, как решить.
Часто трудно доказать, что проблема неразрешима. Чтобы доказать, что проблема разрешима, все, что нам нужно сделать, это показать алгоритм, который ее решает. Чтобы доказать, что проблема неразрешима, нам нужно доказать, что алгоритм не может существовать. Есть несколько хорошо известных неразрешимых проблем. На практике большую часть времени, когда мы доказываем, что проблема неразрешима, мы показываем, что существует хорошо известная неразрешимая проблема, которая сводится к нашей проблеме. Поскольку алгоритм для нашей задачи решит известную неразрешимую проблему, наша проблема также должна быть неразрешимой.
Вы не можете сказать, что «большинство» проблем разрешимы или «большинство» проблем неразрешимы. В некотором теоретическом смысле почти все проблемы неразрешимы, но у нас есть сильная тенденция решать «интересные» проблемы, и у них, скорее всего, есть решение.
источник
Проблема тривиально разрешима, как отметил Жиль в комментарии. Что касается вашего другого вопроса ...
Нет. На самом деле, большинство проблем неразрешимы. На самом деле существует бесчисленное множество проблем (языков), но существует только исчисляемое множество машин Тьюринга, а это означает, что существует не более чем счетное множество разрешимых проблем.
источник
Да, это решаемо, потому что вы можете выполнить исчерпывающий поиск всех возможных путей. Нет необходимости смотреть на любые пути, которые повторяют вершину, поскольку «обход» может быть пропущен. Но длина любого неповторяющегося пути ограничена размером графа, который конечен, и поэтому существует только конечное число таких путей, которые можно проверить по одному.
источник
Не существует метода, который бы указывал, является ли конкретная проблема разрешимой или нет. Со временем вы можете получить хороший «догадку» о том, решается ли конкретная проблема.
Я обычно делаю следующее:
Почти всегда, когда вы пытаетесь выполнить шаг (1) для неразрешимой проблемы, вам понадобится ваша программа для проверки бесконечного количества вещей. Обычно это признак того, что проблема не разрешима.
источник