У чому різниця між алгоритмом, мовою та проблемою?


40

Здається, на цьому сайті люди часто виправляють інших за те, що плутають «алгоритми» та «проблеми». У чому різниця між ними? Як дізнатися, коли мені слід розглянути алгоритми та розглянути проблеми? І як вони ставляться до поняття мови у формальній теорії мови?


Алгоритм - це спосіб вирішити проблему.
reinierpost

Відповіді:


53

Для простоти я розпочну лише з розгляду проблем «рішення», на які є відповідь «так / ні». Проблеми з функціонуванням працюють приблизно однаково, за винятком того, що замість так / ні, з кожним введеним словом є специфічне вихідне слово.

Мова : мова - це просто набір рядків. Якщо у вас є алфавіт, такий як , то Σ - це набір усіх слів, що містять лише символи у Σ . Наприклад, { 0 , 1 } - це сукупність усіх бінарних послідовностей будь-якої довжини. Але алфавіт не повинен бути двійковим. Це може бути одинарний, потрійний тощо.ΣΣΣ{0,1}

Мова над алфавітом - це будь-який підмножина Σ .ΣΣ

Проблема : Проблема - це запитання щодо запиту, на який ми б хотіли відповісти. Зокрема, проблема рішення - це питання, яке задає питання: "Чи відповідає наш вхід властивістю ?X

X

L={wwyXyX}

Визначення того, чи відповідає відповідь на вхід до проблеми рішення "так", рівнозначно, чи кодування цього вводу над алфавітом відповідає відповідній мові.

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

M

L(M)={wMw}

RRE

Взаємозв’язок між мовами та машинами Тюрінга полягає в наступному

  1. Кожна машина Тьюрінга приймає рівно одну мову

  2. Може бути кілька машин Тьюрінга, які приймають дану мову

  3. Можливо, не існує машини Тьюрінга, яка б приймала дану мову.

Ми можемо сказати приблизно те саме про алгоритми та проблеми: кожен алгоритм вирішує одну проблему, але алгоритмів, що вирішують задану проблему, може бути 0, або багато.

Часова складність : Одне з найпоширеніших джерел плутанини між алгоритмами та проблемами стосується класів складності. Правильний розподіл можна підсумувати так:

  • Алгоритм має складність у часі
  • Проблема належить до класу складності

f(n)f(n)n

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

P,NP,PSPACE,EXPTIMEPXXPXXP


1
Будь ласка, редагуйте цю відповідь так, як вважаєте за потрібне.
jmite

Я думаю, було б добре зазначити, що існують й інші види обчислювальних проблем (наприклад, проблеми пошуку).
Kaveh

1
Хто каже? Таке мислення є частиною того, чому люди мали стільки проблем з формалізацією та алгоритмом перед намірами машини Тьюрінга. Теза Церкви-Тьюрінга говорить, що алгоритм є Тюрінг-машиною і навпаки, і не всі машини Тьюрінга зупиняються.
jmite

4
Чувак, це найбільша відповідь, яку я бачив. Ви просто узагальнили всю інформатику на 1 сторінці.
КапітанКодеман

1
@ gnasher729 існує теорема, яка говорить про те, що її можна визначити з точки зору перевірки, але це фактичне визначення в термінах складності для недетермінованих машин, тому назва NP: недетермінований поліном
jmite
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.