Я почув різні інтерпретації звуку і повно . Я розумію, що повнота означає знайти рішення, якщо воно є. Що означає говорити алгоритм - це звук .
Що означає сказати, що алгоритм звучить і закінчено?
Я почув різні інтерпретації звуку і повно . Я розумію, що повнота означає знайти рішення, якщо воно є. Що означає говорити алгоритм - це звук .
Що означає сказати, що алгоритм звучить і закінчено?
Відповіді:
Це дуже конкретні терміни, пов'язані з логікою.
Ось декілька вихідних моментів:
http://en.wikipedia.org/wiki/Звуковість
http://en.wikipedia.org/wiki/Completeness_(logic)
В основному, надійність (алгоритму) означає, що алгоритм не дає жодних результатів, які не відповідають дійсності. Наприклад, якщо у мене є алгоритм сортування, який іноді не повертає відсортований список, алгоритм не звучить.
З іншого боку, повнота означає, що алгоритм вирішує всі можливі входи і не пропускає жодного. Отже, якби мій алгоритм сортування ніколи не повертав несортований список, а просто відмовився працювати над списками, що містили число 7, він не був би повним.
Він є повноцінним і здоровим, якщо працює на всіх входах (семантично дійсних у світі програми) і завжди отримує відповідь правильно.
Я вважаю, що відповідь Еріка Дітріха є заплутаною. Наступне краще:
Алгоритм є здоровим, якщо будь-коли він повертає відповідь, ця відповідь відповідає дійсності. Алгоритм є завершеним, якщо він гарантує повернення правильної відповіді на будь-який довільний ввід (або, якщо відповіді немає, гарантує повернення відмови).
Два важливих моменти:
Розглянемо для прикладу алгоритм сортування A, який отримує в якості списку чисел. Ми говоримо, що A є здоровим, якщо кожен раз, коли він повертає результат, результат є відсортованим списком. Так само ми говоримо, що A є повним, якщо гарантує повернення відсортованого списку будь-коли, коли ми надаємо йому список номерів.
Ці терміни походили з теорії обчислень, тому вони мають більше значення в контексті теорії обчислень, ніж у контексті інженерії програмного забезпечення
У більшості стандартних моделей обчислень обчислювальні задачі представлені як мови . Мова - це набір рядків. Тоді алгоритм - це лише система чи процедура, яка визначає, чи є дана рядок членом якоїсь мови (шляхом повернення true чи false). З точки зору інженерії програмного забезпечення, теорія обчислень спеціально стосується функцій, які виглядають так, якщо вважати, що рядки незмінні:
boolean some_function(string argument){...}
Ми називаємо цю функцію завершеною, якщо вона повертає істину для кожного аргументу, який є членом мови. Ми називаємо це звуком, якщо він повертає помилковим для кожного аргументу, який не є членом мови.
Іншими словами, воно є повним, якщо воно завжди повертає істину, коли ми хочемо, щоб він повернув істину, і звучить, якщо він завжди повертає хибність, коли ми хочемо, щоб він повернув помилкове.
Як це перекладається на інші види функцій? Як виявляється, майже завжди можливо ввести довільну кількість даних у рядок і відновити їх всередині функції. Таким чином, обмеження типу аргументу та суворості - це не що інше, як теоретичне спрощення. Однак обмеження типу повернення важливіше. Проблеми, які вимагають булевого результату, називаються проблемами вирішення . Багато теорій обчислень включає проблеми вирішення; множини P і NP обмежуються проблемами рішення (і NP, принаймні, не може бути розумно визначений без цього обмеження). Проблема зупинки - ще один приклад важко вивченої проблеми рішення.
На мою думку, ці терміни не узагальнюються поза сферою проблем вирішення, тому різниця між ними не дуже важлива при обговоренні загальної функції.
Є набагато кращі відповіді в ТА . В основному ви надаєте певний збір даних та критерії пошуку. Звуковий алгоритм ловить вас лише ту рибу, яка відповідає критеріям, але може пропустити деякі елементи даних. Повний алгоритм створює набір запитуваних результатів, це означає, що ви отримуєте сміття поверх запитуваних результатів. Звуковий алгоритм більш консервативний.
Статистик, напевно, скаже, що звуковий алгоритм є упередженими помилками типу I (він не приймає правильних кандидатів), тоді як повний алгоритм упереджений помилками типу II (щоб прийняти помилкових кандидатів).