Приховані константи в складності алгоритмів


9

Для багатьох проблем алгоритм з найкращою асимптотичною складністю має дуже великий постійний коефіцієнт, який прихований великими позначеннями O. Це відбувається при матричному множенні, цілочисленному множенні (конкретно, недавньому алгоритмі множення O (n log n) цілого числа Гарві та ван дер Хоевена), низькоглибоких сортуваннях мереж та пошуку неповнолітніх графів. Такі алгоритми іноді називають галактичними алгоритмами.

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

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

Я знаю, що приховані константи часто опускаються, щоб приховати відмінність між різними моделями обчислення. Однак я впевнений, що в умовах найрізноманітніших різних моделей ці алгоритми Галактики будуть повільнішими, ніж асимптотично гірші алгоритми, наприклад, для входів розміром в один мільярд. Відмінність не тонка, в деяких випадках. Це було зроблено суворо?

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


1
Алгоритми швидкого цілого множення не є галактичними. Вони фактично часто використовуються на практиці.
Еміль Єржабек

2
@ EmilJeřábek Можливо, ОП говорить про недавній прорив Девіда Харві та Йоріса ван дер Хоевена, "Множення цілого в O(nlogn)час ", що є галактичним (див. цей запис у блозі Ліптона, наприклад: rjlipton.wordpress.com/2019/03/29/… )
Lamine

1
Як пишуть автори самі (і це згадується в блозі Ліптона), папір для простоти не намагається оптимізувати константи, але вони, швидше за все, можуть бути практичними.
Еміль Єржабек

@ EmilJeřábek Цей документ справді був тим, про кого я говорив. У статті описано вдосконалення, які можна було б зробити, але вкрай сумнівно, що алгоритм, як і колись, буде практичним вдосконаленням щодо поточних алгоритмів O (n log n log n), які використовуються на практиці, враховуючи, наскільки малий журнал n журналу n призначений для практичних вправ.
isaacg

4
@ EmilJeřábek Зокрема, алгоритм, представлений у статті, відкладає до більш простого алгоритму для базового випадку, коли число менше 2d12 біти, куди вони зараз беруть d=1729. Оптимізації, які вони описують, можуть дозволити їх використовуватиd=9 натомість, але 2912біти все ще перевищують кількість частинок у Всесвіті, тому практичність все ще не йдеться. Дивіться розділ 5.4 їх статті.
isaacg

Відповіді:


2

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

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

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

Простий приклад, який розглядається в книзі, - це кваксорт. Це має найпростіший квадратичний час роботи, але на практиці переважає більшістьO(nlogn)алгоритми. Виконуючи точний аналіз очікуваної вартості кваксорту і порівнюючи його з об'єднанням, ви бачите, що, як я правильно пам'ятаю, очікується, що він перевершить останній за розміром близько 10. Щоб мати можливість обчислити такі речі, ви, звичайно, не можете нехтувати прихованими константами.

Насправді, у кварцовій сортуванні ви сортуєте список шляхом рекурсивного сортування списків, щоб ви отримали поліпшення для всіх розмірів, якщо використовуєте об'єднаний об’єднання у списках, менших за розмір 10. Цікава примітка у книзі зазначає, що в деякій бібліотеці Microsoft з відкритим джерелом, алгоритм загального сортування реалізується як quicksort до тих пір, поки ви не зменшитеся до розміру 10, після чого використовується злиття. У коментарях до коду зазначається, що тести на ефективність показали, що це значення є оптимальним.

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