Что значит сказать, что алгоритм является звуковым и полным?

33

Я слышал разные интерпретации звука и полной . Я понимаю, что полнота означает поиск решения, если оно есть. Что значит сказать, что алгоритм - это звук ?

Что значит сказать, что алгоритм является звуковым и полным?

mutelogan
источник
Я предлагаю вам переоценить ответ, который вы приняли, учитывая, что вы ошиблись.
Блэкджек,
Просто сделал это :)
mutelogan

Ответы:

50

Это очень конкретные термины, связанные с логикой.

Вот некоторые отправные точки:

http://en.wikipedia.org/wiki/Soundness

http://en.wikipedia.org/wiki/Completeness_(logic)

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

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

Он полный и надежный, если он работает на всех входах (семантически действителен в мире программы) и всегда дает правильный ответ.

Эрик Дитрих
источник
Спасибо. Я был действительно смущен тем, что означает разумность . Я получал несколько ответов.
mutelogan
Рад, если бы это помогло ... :)
Эрик Дитрих
13
Примером может служить бинарный поиск, он звучит, но он не завершен. Он не может работать в несортированных списках.
Malfist
3
@Malfist, но разве не отсортированы списки «мира программы»?
Андрес
1
«Алгоритм плохо себя ведет на недопустимых входах» не влияет на надежность или полноту, поэтому ни бинарный поиск, ни виды сравнения не имеют значения - оба алгоритма являются правильными и полными для допустимых входных данных.
Blaisorblade
15

Я нахожу ответ Эрика Дитриха немного запутанным. Следующее лучше:

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

Два важных момента:

  1. Надежность является слабой гарантией. Это не обещает, что A прекратит работу.
  2. Обоснованность и полнота - связанные понятия; на самом деле они являются логической противоположностью друг другу. т. е. здравый смысл говорит, что если ответ будет возвращен, то ответ будет верным. Полнота говорит о том, что ответ верен, если он возвращается.

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

Даниил
источник
Почему ты запутался? «Алгоритм является правильным, если в любое время он возвращает ответ, этот ответ является истинным». означает то же самое, что «В основном, надежность (алгоритма) означает, что алгоритм не дает никаких результатов, которые не соответствуют действительности». Это означает то же самое. Что касается вашего (очень краткого) определения полноты, оно не соответствует ничему в ссылке на википедию, и вы не цитируете свою собственную ссылку. Должен сказать, что определения Эрика более полезны на практике. Если вы правы, вы должны предоставить больше доказательств и больше мяса.
Брюс
1
Просто чтобы уточнить: когда вы говорите: «Полнота говорит о том, что ответ верен, если он получен», вы имеете в виду, что ответ «правильный», верно?
Дойс
1
«Ответ верен, если он возвращен» означает буквально то же самое, что «если ответ получен, он верен». Кроме того, ответы не могут быть «верными», только правильными. softwareengineering.stackexchange.com/a/311649/21277 более правильно.
Blaisorblade
2

Эти термины пришли из теории вычислений, поэтому они более значимы в контексте теории вычислений, чем в контексте разработки программного обеспечения.

В большинстве стандартных моделей вычислений проблемы вычислений представлены в виде языков . Язык - это набор строк. Таким образом, алгоритм - это просто система или процедура, которая решает, является ли данная строка членом какого-либо языка (возвращая true или false). С точки зрения разработки программного обеспечения, теория вычислений особенно касается функций, которые выглядят следующим образом, предполагая, что строки неизменны:

boolean some_function(string argument){...}

Мы называем эту функцию завершенной, если она возвращает true для каждого аргумента, который является членом языка. Мы называем это звуком, если он возвращает false для каждого аргумента, который не является членом языка.

Другими словами, он завершен, если он всегда возвращает true, когда мы хотим, чтобы он возвращал true, и звучит, если он всегда возвращает false, когда мы хотим, чтобы он возвращал false.

Как это переводится на другие виды функций? Оказывается, почти всегда можно вставить произвольное количество данных в строку и восстановить его внутри функции. Таким образом, ограничение типа аргумента и арности - не более чем теоретическое упрощение. Однако, ограничение на тип возвращаемого значения более важно. Проблемы, которые требуют логического результата, называются проблемами решения . Большая часть теории вычислений связана с проблемами решения; множества P и NP ограничены решением проблем (и NP, по крайней мере, не может быть разумно определен без этого ограничения). Проблема остановки - еще один пример хорошо изученной проблемы решения.

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

Kevin
источник
-2

Есть гораздо лучшие ответы на SO . По сути, вы предоставляете сбор данных и критерии для поиска. Звуковой алгоритм ловит только ту рыбу, которая соответствует критериям, но он может пропустить некоторые элементы данных. Алгоритм Complete создает расширенный набор запрашиваемых результатов, что означает, что вы получаете некоторый мусор поверх запрашиваемых результатов. Звуковой алгоритм более консервативный.

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

введите описание изображения здесь

Валентин Тихомиров
источник