Чи є якийсь інший алгоритм, у якого найгірший час роботи є експоненціальним, тим часом він дуже добре працює на практиці, крім алгоритму Simplex?


9

Ми зазвичай називаємо алгоритм «хорошим алгоритмом», якщо час його запуску є поліноміальним у гіршому випадку. Але в деяких випадках (наприклад, алгоритм Simplex), хоча найгірший варіант алгоритму є експоненціальним, він може дуже добре працювати на практиці.

Чи існують (детерміновані) приклади цієї ситуації, крім алгоритму Simplex?


1
Можливо, вас зацікавить пов'язане питання: cstheory.stackexchange.com/questions/305/…
Radu GRIGо

Відповіді:


13

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


13

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


13

Висновок типу Хіндлі-Мілнер є завершеним EXPTIME, але в програмах люди, як правило, пишуть, вони досить близькі до лінійних.


1
Хіба це не дещо інакше? Моє згадування полягає в тому, що ми могли б охарактеризувати необхідну умову для того, щоб Хіндлі-Мілнер працювала погано (глибоко вкладені дозволяє), і тому причина ХМ хороша на практиці в тому, що це гніздування на практиці обмежене досить низько (зазвичай ми відступаємо більше, коли йдемо заглиблюючись у прив'язки та нервуючи, коли ми прямуємо до крайнього правого краю екрана ...) Звичайно, я раніше це висловлював із пам’яті, і я нещодавно не зміг відновити посилання на нього.
Роб Сіммонс

2
Ні, це не обов'язкова умова. Ви можете надати послідовність прив’язок (без гніздування!) Таким чином, щоб вона квадратувала розмір виведеного типу з кожним додатковим записом у послідовності. Див. Для прикладу cstheory.stackexchange.com/questions/2428/… .
Ніл Крішнасвамі

Приклад є в SML, і я більше знайомий зі способом виконання OCaml, але якби ця послідовність прив'язок була "пущена", то я думаю, вони були б вкладені. Лише тому, що вони визначають глобальні функції, вони не є, але тут відбувається неявне вкладення: Дане визначення має доступ до всіх визначень, що знаходяться над ним, і жодного з наведених нижче.
amnn

1
@amnn: Згадане вкладене гніздування дозволяє мати форму у зв'язаній формі - тобто, let z = (let y = e in e') in e''на відміну від ніж let y = e in let z = e' in e''.
Ніл Крішнасвамі

9

Брендан Маккей nauty (Немає автоморфізм, так?) Програма вирішує канонічні маркування проблем графів (одночасно вирішуючи проблеми ізоморфізму графів і автоморфизм графа) і мають експонентну продуктивність найгіршою (Miyazaki, 1996). Однак він працює дуже швидко для більшості графіків, особливо для тих, хто має декілька автоматизмів.

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


Я думав, що Науті також використовував якусь випадковість, щоб допомогти в вишуканості? У цьому випадку це може бути дуже аналогічним алгоритму симплексу (хоча явно не існує поняття згладженого аналізу для ізоморфізму графа).
Джошуа Грохов

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

1
Цю інваріантну вершину можна порівняти з антициклічними правилами симплексного алгоритму.
Деррік Столі

4

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


1

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


Ви маєте на увазі алгоритм Лемке-Гоусона?
Рахул Савані

1

Упаковка для сміття (багато варіантів) - це проблема, складність якої, як відомо, є важкою для NP:

http://en.wikipedia.org/wiki/Bin_packing_problem

Однак багато евристики при застосуванні до «практичних» версій роблять дуже добре. Для упаковки в один розмірний контейнер деякі з цих евристик, як-от першого розміру; зменшення першої форми; найкраще підходить; зменшення найкращого підходу дуже привабливе як тема, яку потрібно показати студентам. Студенти часто можуть відкрити для себе деякі основні евристики.


Є чимало прикладів, що стосуються проблеми, не пов'язаної з NP, прості алгоритми можуть вирішити цю проблему. Особливо з алгоритмами наближення. Але я насправді шукаю алгоритми експоненціального часу, ваш приклад пов’язаний із важкою проблемою, яку легко вирішити простими алгоритмами. Можливо, існує експоненціальний алгоритм часу, щоб точно вирішити упаковку Bin (або іншу проблему); і на практиці це займає багаточлен.
Арман

0

Алгоритм стійкості (походить від Edelsbrunner-Letscher-Zomorodian, з великою кількістю варіацій з тих пір) є найгіршим випадком кубічним, але, здається, експериментація зазвичай працює в лінійний час.

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