Чи реально довести нижчі межі?


24

З огляду на будь-яку обчислювальну проблему, чи реально можливе завдання знайти нижню межу для таких обчислень? Я вважаю, що це зводиться до того, як визначено один обчислювальний крок та яку модель ми використовуємо для доказування, але враховуючи це, чи дійсно ми доводимо нижню межу, ніж загалом? Що я маю на увазі, що ми можемо довести щось на кшталт "проблему X не можна вирішити швидше, ніж час", а не "проблему можна вирішити за час або швидше"?t(X)Xt(X)

Я намагався знайти інформацію конкретно про нижню межу та докази їх, але насправді не можу знайти жодної цікавої інформації, будь-яких рекомендацій щодо книг / паперів / веб-сайтів з цього питання?

Відповіді:


19

Ми можемо абсолютно довести такі речі.

Багато проблем мають тривіальні нижні межі, такі як пошук мінімуму з набору чисел (які не відсортовані / структуровані жодним чином) займає щонайменше Ω ( n ) час. Доказ цього простий: гіпотетичний алгоритм, який працює в o ( n ) час, не може вивчити всі числа вхідних даних. Отже, якщо ми запустили алгоритм на якомусь вході, ми могли б помітити, що він ніколи не досліджував конкретний елемент вводу. Змінивши цей елемент до мінімуму, ми можемо домогтися відмови алгоритму.nΩ(n)o(n)

Менш тривіальною нижньою межею є нижня межа для сортування в моделі порівняння. Доказом цього є наступні рядки: якщо ввести n чисел, є n ! можливі виходи (вхід може бути будь-якою перестановкою відсортованого списку, тому вихід може бути також будь-якою перестановкою введення). Якщо ми обмежуємось лише порівняннями, то для нашого алгоритму (в середньому) потрібно виконати принаймні порівняння log 2 ( n ! ) = Ω ( n log n ) , щоб можна було дати nΩ(nlogn)nn!log2(n!)=Ω(nlogn)різні виходи.n!

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

Враховуючи функцію , існує обчислювальна задача, яка може бути вирішена за час O ( f ( n ) ), але не може бути вирішена за час o ( f ( n )fO(f(n)).o(f(n)logn)

Отже, якщо ви можете придумати функцію , існує проблема, для вирішення якої потрібно стільки часу.f

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


Розмір вводу або виводу є найбільш поширеними нижчими межами.
Рафаель

14

Ω(nlogn)n

O(nlogn)

LNLPNPPSPACE,
LPSPACE

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


Я думаю, що це те, що я хочу ".. вам якось потрібно показати, що жоден алгоритм у конкретному класі не може вирішити вашу проблему". Це ця частина, яку я вважаю трохи заплутаною, оскільки я не можу реально зрозуміти, як можна було б зробити така річ, взагалі принаймні. Як @Tom van der Zanden описав знаходження мінімальної кількості я знаю, але чи є такий підхід загальним? Я маю на увазі загальне, як мати такий аргумент при побудові доказів? Дякуємо також за посилання.
hsalin

1
@ user1288420 Ви не самотні. Якби хто-небудь міг зрозуміти інтуїтивно, як довести, що жоден алгоритм у конкретному класі не може вирішити якусь проблему, у нас було б набагато більше нижніх результатів! Як правило, вам потрібно створити якесь властивість, яке має кожен алгоритм у класі, і показати, що ця властивість запобігає вирішенню певної проблеми. Наприклад, кожна машина Тьюрінга, яка працює в підлінійний час, має властивість, що вона навіть не може прочитати всі свої дані. Це означає, що він не може вирішити більшість проблем. Це банально; на жаль, більш цікаві випадки здаються неможливо важкими.
Девід Річербі

3

n

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

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

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

Однак обидва варіанти мають бути пов'язаними.

nlognO(logn)

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


Виявлення всіх входжень шаблону в рядку тривіально вимагає зчитування всієї рядка: якщо шаблон є "a", ви не можете знайти всі події, не перевіривши, чи не кожен символ рядка.
Девід Річербі,

1
@DavidRicherby Насправді не завжди. Алгоритм Бойєра-Мура починається з кінця шаблону, таким чином стрибаючи вгору в рядку. Якщо спроба збігу не вдалася, не потрібно читати початок рядка. Крім того, він має оптимізацію, подібну до алгоритму Кнут-Морріс-Пратта, щоб пропустити спроби, які перебувають у результаті невдачі через структуру структури. Звичайно, існують шаблони, для яких потрібно прочитати цілий рядок.
бабу

@DavidRicherby Чому ти запитав, ти це знав?
бабу

Я не розумію вашого другого коментаря. Ваша оригінальна відповідь містила неправильну претензію. Звичайно, я знав, що це неправильно: саме так я міг це вказати! Інші люди, можливо, не знали, що це неправильно, тому було б бентежно, щоб вони залишили відповідь такою, якою вона була.
Девід Річербі

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