Очень часто, если время выполнения алгоритма является сложным выражением, сам алгоритм также является сложным и непрактичным. Каждый из корней куба и факторов в асимптотическом времени выполнения имеет тенденцию увеличивать сложность алгоритма, а также скрытые постоянные факторы для времени выполнения.
У нас есть яркие примеры, в которых это правило не выполняется?
Конечно, легко найти примеры алгоритмов, которые очень сложно реализовать, даже если у них очень простое время выполнения в худшем случае. Но как насчет обратного?
Есть ли у нас примеры очень простых и практичных детерминированных алгоритмов, которые легко реализовать, но которые имеют очень сложное выражение в качестве асимптотического времени выполнения в худшем случае?
Обратите внимание на ключевые слова «детерминированный» и «наихудший случай»; Анализ простых рандомизированных алгоритмов довольно легко приводит к сложным выражениям.
Конечно, то, что «сложно», - дело вкуса. В любом случае, я бы предпочел увидеть выражение, которое слишком уродливо, чтобы вставить название вашей статьи. И я бы предпочел сложную функцию одного естественного параметра (размер ввода, количество узлов и т. Д.).
PS. Я думал, что я не сделаю это «вопросом большого списка», а не CW. Я хотел бы найти один отличный пример (если он вообще существует). Поэтому, пожалуйста, публикуйте другой ответ, только если вы думаете, что он «лучше», чем любой из ответов на данный момент.
источник
Ответы:
Лучший пример, который я могу придумать, - это алгоритм (описанный ниже) для вычисления в расположении n линий на плоскости, то есть многоугольной линии, образованной точками, которые имеют точно k линий вертикально над ней. Это не самый эффективный алгоритм, известный для этой проблемы. Существуют более эффективные алгоритмы с более простыми сложностями, но я считаю, что этот более практичен, чем большинство (если не все) из них. Анализ, вероятно, не является строгим, потому что он использует сложность k-уровня , которая является известной открытой проблемой (я думаю, что все другие термины в анализе являются жесткими). Даже несмотря на это, я сомневаюсь, что улучшенные оценки для k-уровня значительно упростят время выполнения. Я буду считать, что к =k n k k k чтобы написать сложность как функцию от n .k=n/2 n
Алгоритм основан на парадигме развертки линии и использует два -арематических турнира в качестве очередей с кинетическим приоритетом. Вставки и удаления выполняются, когда линия поднимается выше или ниже уровня k , перемещая линию из одного кинетического турнира в другой. Таким образом, есть O ( п 4 / 3 ) вставки и делеции ( с использованием связанного для Dey по к -level сложности). Каждое событие обрабатывается в O ( журнал N ) раз и есть О ( п 4 / 3 α ( п(logn) k O(n4/3) k O(logn) события ( α ( n ) определяется сложностью верхнего огибающего расположения отрезков, а log n / log log n - высотой ( log n ) -ного дерева) ). Общее время работыO(n4/3α(n)logn/loglogn) α(n) logn/loglogn (logn)
Пожалуйста, проверьте рукопись Тимоти Чана http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz для получения более подробной информации и ссылок. Коэффициент можно удалить с помощью двоичного (intead of ( log n ) -ary) кинетического турнира, но он фактически ускоряет очередь с кинетическим приоритетом в тестах, которые я выполнил. Сложность должна стать немного страшнее и хуже (хотя алгоритм все еще будет практичным), если вместо кинетического турнира используется кинетическая куча (должен появиться журнал внутри квадратного корня).1 / журналжурналN ( журналн ) журнал
источник
Кажется, что операции со структурой данных union-find соответствуют вашим критериям:
http://en.wikipedia.org/wiki/Disjoint-set_data_structure
источник
Симплексный алгоритм. Легко реализовать и прекрасно работает на практике, но теоретически это беспорядок.
источник
Я не уверен, если вы считаете это "практичным", но это известная открытая проблема. Пол Эрдос сказал о гипотезе Коллатца: «Математика еще не готова к таким проблемам»
источник
Этот пример, хотя и не соответствует букве вашего запроса, может быть интересен, поскольку он имеет некоторую духовную близость. В частности, вопрос сортировки стопок блинов и сгоревших блинов путем обращения.
http://en.wikipedia.org/wiki/Pancake_sorting
Одной из областей применения является вычислительная биология (генетика), где вопросы о перестановках генома можно сформулировать с точки зрения расстояния между перестановками с использованием инверсий частей перестановок, подчиняющихся различным правилам.
источник