Эта проблема конечного графа разрешима? Какие факторы делают проблему разрешимой?

17

Я хочу знать, разрешима ли следующая проблема и как узнать. В каждой проблеме, которую я вижу, я могу сказать «да» или «нет», так что большинство проблем и алгоритмов разрешимы, кроме нескольких (которые представлены здесь )?

Входные данные: направленный и конечный граф с вершинами и Вопрос: Существует ли путь в с качестве начальной вершины и качестве конечной вершины?v u G u vграммvU
Guv

Gigili
источник
1
Дополнительный вопрос (в широком смысле): правда ли, в каком-то весьма теоретическом смысле, что «большинство проблем и алгоритмов (разрешимы)»?
Жиль "ТАК - перестань быть злым"

Ответы:

18

Любая проблема, которая требует только проверки конечного количества данных, разрешима, потому что существует алгоритм, который состоит из перечисления всех потенциальных решений. Это может быть смехотворно медленным, но это не имеет значения: если есть алгоритм, он решаем.

Поставленная вами задача предполагает конечный граф, который намекает на то, что он разрешим. Строго говоря, нужно смотреть немного дальше. Проблема заключается в свойстве путей в графе, и иногда существует бесконечное число путей, когда граф содержит цикл (вы можете циклически обходить этот цикл столько раз, сколько захотите). Тем не менее, легко превратить проблему в конечную проблему: если есть какой-либо путь, начинающийся с и заканчивающийся v, который включает цикл, то вы можете вырезать все циклы на этом пути, и у вас есть новое решение, которое делает не включать цикл. Поскольку существует конечное число путей, не включающих цикл (если граф имеет k ребер, их не больше k !uvkk!пути, которые не используют одно и то же ребро более одного раза), проблема нахождения пути от до v является конечной, поэтому разрешимой.uv

Кстати, это свойство называется связностью .

Этот подход является распространенным, называется сокращением . Учитывая проблему, которая не является простой, мы сократили ее до проблемы, которую мы знали, как решить.

Часто трудно доказать, что проблема неразрешима. Чтобы доказать, что проблема разрешима, все, что нам нужно сделать, это показать алгоритм, который ее решает. Чтобы доказать, что проблема неразрешима, нам нужно доказать, что алгоритм не может существовать. Есть несколько хорошо известных неразрешимых проблем. На практике большую часть времени, когда мы доказываем, что проблема неразрешима, мы показываем, что существует хорошо известная неразрешимая проблема, которая сводится к нашей проблеме. Поскольку алгоритм для нашей задачи решит известную неразрешимую проблему, наша проблема также должна быть неразрешимой.

Вы не можете сказать, что «большинство» проблем разрешимы или «большинство» проблем неразрешимы. В некотором теоретическом смысле почти все проблемы неразрешимы, но у нас есть сильная тенденция решать «интересные» проблемы, и у них, скорее всего, есть решение.

Жиль "ТАК - перестань быть злым"
источник
15

Проблема тривиально разрешима, как отметил Жиль в комментарии. Что касается вашего другого вопроса ...

разрешимы ли большинство проблем и алгоритмов, кроме нескольких (которые приведены здесь )?

Нет. На самом деле, большинство проблем неразрешимы. На самом деле существует бесчисленное множество проблем (языков), но существует только исчисляемое множество машин Тьюринга, а это означает, что существует не более чем счетное множество разрешимых проблем.

Janoma
источник
8

Да, это решаемо, потому что вы можете выполнить исчерпывающий поиск всех возможных путей. Нет необходимости смотреть на любые пути, которые повторяют вершину, поскольку «обход» может быть пропущен. Но длина любого неповторяющегося пути ограничена размером графа, который конечен, и поэтому существует только конечное число таких путей, которые можно проверить по одному.

граммaбaб

Карл Муммерт
источник
Разве это не зависит от ввода? Я имею в виду, когда данной информации недостаточно, чтобы узнать ответ, должен ли я сказать, что она неразрешима?
Гигили
Я не уверен, что вы спрашиваете; для описанной вами проблемы достаточно найти ответ.
Карл Маммерт
@Gigili Если бы проблема была неразрешимой, было бы невозможно придумать алгоритм, который бы выводил да или нет для всех входов. Это не относится к этой проблеме, поскольку с помощью BFS мы всегда можем определить, существует ли путь (также и в линейном времени).
Зак Лэнгли
@ZachLangley: Да, я спрашивал об общем случае. если данной информации в качестве входных данных недостаточно для решения проблемы, является ли проблема неразрешимой?
Гигили
UvUv
7

Не существует метода, который бы указывал, является ли конкретная проблема разрешимой или нет. Со временем вы можете получить хороший «догадку» о том, решается ли конкретная проблема.

Я обычно делаю следующее:

  1. попытаться решить проблему. То есть попробуйте подумать о компьютерной программе, которая решает данную проблему. Для предложенной вами проблемы - очень простая программа просто проверит любой возможный путь и, таким образом, всегда удастся найти его (если он существует), или сообщит вам, что в противном случае пути не существует.
  2. сформулируйте проблему четко. Многие проблемы слишком расплывчаты, но когда они написаны четко, очень легко увидеть, разрешимы они или нет (по сравнению с другими проблемами, о которых известно, что они не могут быть решены, или с помощью известных методов, таких как теорема Райса )
  3. Если (2) не сработало, но вы все еще считаете, что проблема неразрешима, попробуйте доказать ее путем сокращения из неразрешимой проблемы (проблема остановки (или ее дополнения) работает во многих случаях).

Почти всегда, когда вы пытаетесь выполнить шаг (1) для неразрешимой проблемы, вам понадобится ваша программа для проверки бесконечного количества вещей. Обычно это признак того, что проблема не разрешима.

Ран Г.
источник