Що означає сказати, що алгоритм звучить і закінчено?


33

Я почув різні інтерпретації звуку і повно . Я розумію, що повнота означає знайти рішення, якщо воно є. Що означає говорити алгоритм - це звук .

Що означає сказати, що алгоритм звучить і закінчено?


Я пропоную вам переоцінити, яку відповідь ви прийняли, враховуючи, що ви неправі.
BlackJack

Щойно це зробили :)
мутелог

Відповіді:


50

Це дуже конкретні терміни, пов'язані з логікою.

Ось декілька вихідних моментів:

http://en.wikipedia.org/wiki/Звуковість

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

В основному, надійність (алгоритму) означає, що алгоритм не дає жодних результатів, які не відповідають дійсності. Наприклад, якщо у мене є алгоритм сортування, який іноді не повертає відсортований список, алгоритм не звучить.

З іншого боку, повнота означає, що алгоритм вирішує всі можливі входи і не пропускає жодного. Отже, якби мій алгоритм сортування ніколи не повертав несортований список, а просто відмовився працювати над списками, що містили число 7, він не був би повним.

Він є повноцінним і здоровим, якщо працює на всіх входах (семантично дійсних у світі програми) і завжди отримує відповідь правильно.


Спасибі. Я був дуже розгублений, що означає звучність . Я отримував багато відповідей.
мутелог

Щасливий, якщо це допомогло ... :)
Ерік Дітріх

13
Прикладом може бути Бінарний пошук. Це звук, але він не є повним. Він не може працювати у несортивних списках.
Мальфіст

3
@Malfist, але хіба не "світ програми" відсортований список?
Андрес

1
"Погане поводження алгоритму щодо недійсних входів" не впливає на звучність або повноту, тому ні бінарний пошук, ні сортування порівняння не мають значення - обидва алгоритми є надійними та повноцінними для дійсних входів.
Blaisorblade

15

Я вважаю, що відповідь Еріка Дітріха є заплутаною. Наступне краще:

Алгоритм є здоровим, якщо будь-коли він повертає відповідь, ця відповідь відповідає дійсності. Алгоритм є завершеним, якщо він гарантує повернення правильної відповіді на будь-який довільний ввід (або, якщо відповіді немає, гарантує повернення відмови).

Два важливих моменти:

  1. Звучність - слабка гарантія. Це не обіцяє, що А припиниться.
  2. Здоровість та повнота - споріднені поняття; по суті вони є логічним зворотом один одного. тобто звучність говорить, що якщо відповідь буде повернута, ця відповідь відповідає дійсності. Повнота говорить про те, що відповідь відповідає дійсності, якщо її повернуть.

Розглянемо для прикладу алгоритм сортування A, який отримує в якості списку чисел. Ми говоримо, що A є здоровим, якщо кожен раз, коли він повертає результат, результат є відсортованим списком. Так само ми говоримо, що A є повним, якщо гарантує повернення відсортованого списку будь-коли, коли ми надаємо йому список номерів.


Чому ви плутаєтесь? "Алгоритм є здоровим, якщо будь-коли він повертає відповідь, ця відповідь відповідає дійсності." означає те саме, що "В основному, надійність (алгоритму) означає, що алгоритм не дає жодних результатів, які не відповідають дійсності". Вони означають те саме. Що стосується вашого (дуже короткого) визначення Повноти, воно не відповідає нічого у посиланні на вікіпедію, і ви не посилаєтесь ні на що. Треба сказати, що визначення Еріка більш корисні. Якщо ваші вірні, ви повинні надати кращі докази та більше м’яса.
йогобурс

1
Просто для уточнення, коли ви говорите "Повнота говорить, що відповідь є правдивою, якщо вона повернута", ви маєте на увазі, що відповідь "правильна" правда?
Дойс

1
"Відповідь є правдивою, якщо вона повернута" означає буквально те саме, що "якщо відповідь повернута, це правда". Також відповіді не можуть бути "правдивими", а лише правильними. softwareengineering.stackexchange.com/a/311649/21277 є більш правильним.
Blaisorblade

2

Ці терміни походили з теорії обчислень, тому вони мають більше значення в контексті теорії обчислень, ніж у контексті інженерії програмного забезпечення

У більшості стандартних моделей обчислень обчислювальні задачі представлені як мови . Мова - це набір рядків. Тоді алгоритм - це лише система чи процедура, яка визначає, чи є дана рядок членом якоїсь мови (шляхом повернення true чи false). З точки зору інженерії програмного забезпечення, теорія обчислень спеціально стосується функцій, які виглядають так, якщо вважати, що рядки незмінні:

boolean some_function(string argument){...}

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

Іншими словами, воно є повним, якщо воно завжди повертає істину, коли ми хочемо, щоб він повернув істину, і звучить, якщо він завжди повертає хибність, коли ми хочемо, щоб він повернув помилкове.

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

На мою думку, ці терміни не узагальнюються поза сферою проблем вирішення, тому різниця між ними не дуже важлива при обговоренні загальної функції.


-2

Є набагато кращі відповіді в ТА . В основному ви надаєте певний збір даних та критерії пошуку. Звуковий алгоритм ловить вас лише ту рибу, яка відповідає критеріям, але може пропустити деякі елементи даних. Повний алгоритм створює набір запитуваних результатів, це означає, що ви отримуєте сміття поверх запитуваних результатів. Звуковий алгоритм більш консервативний.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.