Простой и практичный детерминированный алгоритм, сложное время выполнения


18

Очень часто, если время выполнения алгоритма является сложным выражением, сам алгоритм также является сложным и непрактичным. Каждый из корней куба и факторов в асимптотическом времени выполнения имеет тенденцию увеличивать сложность алгоритма, а также скрытые постоянные факторы для времени выполнения.log⁡log⁡n

У нас есть яркие примеры, в которых это правило не выполняется?

Конечно, легко найти примеры алгоритмов, которые очень сложно реализовать, даже если у них очень простое время выполнения в худшем случае. Но как насчет обратного?

Есть ли у нас примеры очень простых и практичных детерминированных алгоритмов, которые легко реализовать, но которые имеют очень сложное выражение в качестве асимптотического времени выполнения в худшем случае?

Обратите внимание на ключевые слова «детерминированный» и «наихудший случай»; Анализ простых рандомизированных алгоритмов довольно легко приводит к сложным выражениям.

Конечно, то, что «сложно», - дело вкуса. В любом случае, я бы предпочел увидеть выражение, которое слишком уродливо, чтобы вставить название вашей статьи. И я бы предпочел сложную функцию одного естественного параметра (размер ввода, количество узлов и т. Д.).


PS. Я думал, что я не сделаю это «вопросом большого списка», а не CW. Я хотел бы найти один отличный пример (если он вообще существует). Поэтому, пожалуйста, публикуйте другой ответ, только если вы думаете, что он «лучше», чем любой из ответов на данный момент.


2
Соответствует ли алгоритм тестирования простоты AKS ответом? Я сомневаюсь, потому что «сложность» его времени выполнения, в некотором смысле, является результатом псевдослучайности распределения простых чисел ...
— Арнаб

Я чувствую, что в худшем случае в большинстве случаев то, что вызывает «пробегает все», и все - это то, в чем мы измеряем время выполнения. Поэтому, естественно, простые алгоритмы имеют легкое время выполнения WC. Сложные времена выполнения появляются, если мы пытаемся сбить один маленький кусочек какой-то хитростью. Но ваш вопрос интересен; Мне, конечно, любопытно видеть, правильно ли я себя чувствую.
— Рафаэль

@arnab: Спасибо, AKS - хорошая идея. Но я не уверен, что мы можем назвать это «практичным»?
— Юкка Суомела

Схемы передачи сообщений, такие как распространение опроса, распространение ограничений или последовательное TRW, считаются «алгоритмами»? Легко реализовать, время выполнения сложно предсказать
— Ярослав Булатов

Ой, мне всегда нравится метод Ро Полларда, он прост и практичен, и анализ действительно сложен, но случайность алгоритма делает его безоговорочным в качестве ответа на пост ...
— Сянь-Чжи Чанг 之 之

Ответы:


20

Лучший пример, который я могу придумать, - это алгоритм (описанный ниже) для вычисления в расположении n линий на плоскости, то есть многоугольной линии, образованной точками, которые имеют точно k линий вертикально над ней. Это не самый эффективный алгоритм, известный для этой проблемы. Существуют более эффективные алгоритмы с более простыми сложностями, но я считаю, что этот более практичен, чем большинство (если не все) из них. Анализ, вероятно, не является строгим, потому что он использует сложность k-уровня , которая является известной открытой проблемой (я думаю, что все другие термины в анализе являются жесткими). Даже несмотря на это, я сомневаюсь, что улучшенные оценки для k-уровня значительно упростят время выполнения. Я буду считать, что к =knkkk чтобы написать сложность как функцию от n .k=n/2n

Алгоритм основан на парадигме развертки линии и использует два -арематических турнира в качестве очередей с кинетическим приоритетом. Вставки и удаления выполняются, когда линия поднимается выше или ниже уровня k , перемещая линию из одного кинетического турнира в другой. Таким образом, есть O ( п 4 / 3 ) вставки и делеции ( с использованием связанного для Dey по к -level сложности). Каждое событие обрабатывается в O ( журнал N ) раз и есть О ( п 4 / 3 α ( п(log⁡n)kO(n4/3)kO(log⁡n) события ( α ( n ) определяется сложностью верхнего огибающего расположения отрезков, а log n / log log n - высотой ( log n ) -ного дерева) ). Общее время работыO(n4/3α(n)log⁡n/log⁡log⁡n)α(n)log⁡n/log⁡log⁡n(log⁡n)

O(n4/3α(n)log2⁡n/log⁡log⁡n).

Пожалуйста, проверьте рукопись Тимоти Чана http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz для получения более подробной информации и ссылок. Коэффициент можно удалить с помощью двоичного (intead of ( log n ) -ary) кинетического турнира, но он фактически ускоряет очередь с кинетическим приоритетом в тестах, которые я выполнил. Сложность должна стать немного страшнее и хуже (хотя алгоритм все еще будет практичным), если вместо кинетического турнира используется кинетическая куча (должен появиться журнал внутри квадратного корня).1/журнал⁡журнал⁡N(журнал⁡N)журнал


Отличный пример, спасибо! Это не будет легко победить. :)
— Юкка Суомела

1
Этот алгоритм медленнее на практике, чем рандомизированные алгоритмы, которые довольно легко реализовать (как кто-то, кто реализовал один из этих алгоритмов (см. Мою статью «Прогулка в плоском расположении».)
— Сариэль Хар-Пелед

Я принял этот ответ, так как он кажется наиболее близким к тому, что я имел в виду. Но если у кого-то есть свежие идеи, я буду рад их услышать!
— Юкка Суомела

24

Кажется, что операции со структурой данных union-find соответствуют вашим критериям:

http://en.wikipedia.org/wiki/Disjoint-set_data_structure


2
Действительно, я отправил тот же ответ, но удалил его после того, как заметил, что вы меня опередили. :) Простой и элегантный алгоритм, который не теоретик мог бы даже обнаружить, но обратная Аккерманну амортизировала сложность.
— Уоррен Шуди

Ну, время не выглядит , что "сложно" , если сравнить его с O ( п 4 / +3 α ( п ) журнал 2 н / журнал журнал N ) в ответ Гильерме в. :)O(α(n))O(n4/3α(n)log2⁡n/log⁡log⁡n)
— Юкка Суомела

Отношение длины алгоритма к сложности доказательства для объединения-поиска, вероятно, непобедимо - все три операции - что, девять строк кода?
— Нил Кришнасвами

1
Я не думаю, что речь идет о простом и практичном алгоритме со сложным анализом . Я думаю, что вопрос заключается в простом и практичном алгоритме со сложным временем выполнения , то есть фактическом выражении, полученном для верхней границы.
— Гильерме Д. да Фонсека

6

Симплексный алгоритм. Легко реализовать и прекрасно работает на практике, но теоретически это беспорядок.


n

на самом деле симплекс, как известно, занимает экспоненциальное время в худшем случае с помощью конструкции Кли-Минти. Я думаю, это не пример того, о чем спрашивает Юкка
— Суреш Венкат

1
Возможно, я должен был сказать симплекс-метод, а не симплекс-алгоритм. Куб Кли-Минти и его вариации работают для некоторых ванильных правил поворота. Но, например, правило случайного поворота фасета имеет сумасшедшую верхнюю и (недавнюю) нижнюю границу. У Гила Калаи была хорошая запись в блоге о последних результатах. gilkalai.wordpress.com/2010/11/09/…
— Мохит Сингх

хорошая мысль, Мохит. Я был смущен также.
— Суреш Венкат

2

Я не уверен, если вы считаете это "практичным", но это известная открытая проблема. Пол Эрдос сказал о гипотезе Коллатца: «Математика еще не готова к таким проблемам»

x=1


И что за проблема решается этим алгоритмом ...?
— Юкка Суомела

Он предлагает искать новые методы анализа во время выполнения.
— Мухаммед Аль-Туркистани

2
тогда вы могли бы сказать, что грубый поиск доказательства гипотезы Коллатца также мотивирует «новые методы анализа во время выполнения»; в обоих случаях алгоритм просто бездумно исследует орграф. Гипотеза Коллатца забавная, но я не думаю, что это интересный пример «алгоритма».
— Ниль де Бодрап,

2

Этот пример, хотя и не соответствует букве вашего запроса, может быть интересен, поскольку он имеет некоторую духовную близость. В частности, вопрос сортировки стопок блинов и сгоревших блинов путем обращения.

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

Одной из областей применения является вычислительная биология (генетика), где вопросы о перестановках генома можно сформулировать с точки зрения расстояния между перестановками с использованием инверсий частей перестановок, подчиняющихся различным правилам.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.