Що таке ефективний алгоритм?


10

Що з точки зору асимптотичної поведінки, що вважається "ефективним" алгоритмом? Який стандарт / причина для того, щоб провести лінію в цій точці? Особисто я б подумав, що все, що є тим, що я, можливо, наївно називаю "субполіномом", такимf(n)=o(n2)наприклад було б ефективним, і все, що є було б "неефективним". Однак я чув, що все, що є в будь-якому поліноміальному порядку, можна назвати ефективним. Які міркування?n1+ϵΩ(n2)


Відповіді:


11

Це залежить від контексту. У теоретичній інформатиці зазвичай кожен поліноміальний алгоритм часу вважається "ефективним". У алгоритмах наближення, наприклад, час виконаннян1/ϵ1/ϵ було б визнано ефективним, хоча воно не може бути застосоване на практиці для будь-яких розумних цінностей ϵ. Алгоритм для SAT, який працює вн2100 був би дивним проривом.

У класичній алгоритмі, тобто алгоритмах від 80-х років і раніше, час виконання нижче н3або так (вважають множення матричної думки, відповідність мінімальних витрат, потоки, лінійне програмування) вважаються ефективними. Більшість людей вони все ще вважаються ефективними. Звичайно aн2 алгоритм не вважається ефективним, якщо a нжурналн алгоритм відомий, наприклад, для сортування.

В даний час існує тенденція до підлінійних алгоритмів або потокових алгоритмів, які здатні мати справу з терабайтами даних. Спробуйте використовувати матричне множення для обчислення рейтингу сторінок усіх сторінок в індексі Google. Це не вийде.

Звичайно, незважаючи на користь, асимптотичний алгоритм не розповідає про всю історію. Існують алгоритми, які мають хороший асимптотичний час виконання, але константи настільки величезні, що їх ефективно використовувати не можна. Колись. Ліптон називає їх галактичними алгоритмами . Роберт Седжевік навіть заявляє, що межі найгіршого випадку "часто марні для прогнозування, часто марні для гарантій" і "аналіз найгірших випадків марний для прогнозування ефективності" у своїй розмові Повернення науки назад до інформатики .


9
Коротше кажучи: ефективність - це те, що вирішує вашу проблему у часові рамки, які вам підходять.
Рафаель

Це насправді не потребує власної відповіді, але BPP, який є класом функцій з поліномним виконанням (як описано у відповіді), також з випадковістю, часто вважається ефективним. Іншими словами, вище сказане правильно, але комп'ютери, як правило, мають доступ до випадковості, щоб робити обчислення. Одним з найважливіших практичних застосувань випадковості є хешування.
СамМ

Можливо, "ефективна" - це насправді не потрібна термінологія? Я щойно переглядав одну з моїх книжок обчислень, і автор називає поліномічні періоди виконання "простежуваними", а експоненціальні тривалість виконання - "непереборними".
Роберт С. Барнс

1
@ RobertS.Barnes: Різні слова, одна і та ж проблема.
Рафаель

4

Мої 2 копійки від кута розподілених алгоритмів: При перегляді масштабних мереж (P2P, соціальних мереж тощо) розподілений алгоритм вважається ефективним, якщо його час роботиО(журналcн) для якоїсь постійної c>0 і алгоритм використовує повідомленняО(журналн)біт. Зауважте, що вимога щодо розмірів повідомлень зазвичай надається навіть більшого значення, ніж час виконання, зокрема для "глобальних" проблем, які мають більшу нижню межу часу виконання, наприклад, розподіленого MST.


3

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

Звичайно, ніхто не скаже, що алгоритм з багаточленною складністю, наприклад, О(н2000 рік) є "ефективним", але більшість алгоритмів рідко перевищує складність О(н5).

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


3

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

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


Хоча я можу зрозуміти, що якщо щось є найбільш швидким відомим алгоритмом для певної проблеми, то з цієї точки зору це можна вважати "ефективним", мені важко думати про те, що працює в політемі як ефективне. :-)
Роберт С. Барнс

Для поліноміальних циклів "ефективність" - це просто слово, а введене в оману.
Рафаель

@Raphael Можливо, tractable є кращим словом для використання ...?
Роберт С. Барнс

1
@ RobertS.Barnes: Не набагато краще, imho. "Tractable" - кожен біт такий же відносний, як "ефективний".
Рафаель

0

Деякі проблеми легкі, деякі - важкі. Наскільки алгоритм є "ефективним", залежить від того, наскільки він хороший порівняно із властивою йому складністю проблеми. Якщо ви знайдете алгоритм, який визначає будь-яке n-значне число в O (н3) операцій, і я знаходжу алгоритм, який сортує n чисел в O (н2) операцій, тоді ваш алгоритм є більш ефективним (тому що він б'є все, що відомо людству величезним фактором, тоді як моє так само повільно, як ви могли б очікувати від абсолютного новачка).


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