Подтвердить что ты не робот

Какой самый недооцененный или малоизвестный, но полезный алгоритм?

Я ищу один алгоритм или структуру данных, которая настолько неизвестна, но при этом полезна, что вы считаете это ужасным надзором со стороны сообщества информатики или программирования. Если бы мы могли все это изучить, многое было бы сделано для многих будущих программ.

Самый лучший, который я могу придумать, - это интерполяционный поиск, который знает только очень немногие программисты, тогда как все знают бинарный поиск. Я думаю, что нет никаких сомнений в том, что быстрый поиск упорядоченного списка - довольно полезный и фундаментальный алгоритм.

Оба почти идентичны реализации - так что это не проблема.

Он выполняет O (log (log (n))) на равномерно распределенных данных по сравнению с двоичными поисками O (log (n)). Это означает, что поиск 4 миллиардов номеров требует только 5 пробников против 32, что намного лучше!

По не идеально однородным данным, он по-прежнему очень хорошо работает большую часть времени. Только когда данные действительно искажены, это так же плохо, как бинарный поиск или хуже. Это O (n) наихудший случай, когда данные сильно искажены, но это довольно редко встречается в большинстве реальных ситуаций.

Еще можно построить четный/нечетный алгоритм для чередования между ними и получить наихудший случай двоичного поиска со средним случаем интерполяционного поиска для смягчения экстремальных ситуаций.

На самом деле нет веских оснований, которые так упускают из виду большинство программистов/библиотек.

Может ли кто-нибудь еще победить это?

4b9b3361

Ответ 1

Я назначаю smoothsort. На месте, сложность времени O (n log n) наихудший случай /O (n) лучший случай.

Ответ 2

trie/тройное дерево... Быстрые сочетания префикса! Я определенно использовал их больше, чем кучи или явные структуры связанных списков (неявные связанные списки со "next" s часто полезны, хотя).

Ответ 3

Другая номинация для smoothsort. Это теоретически довольно красиво и асимптотически так хорошо, как только получается.

В случае, если вам интересно, я написал объяснение о том, как работает сортировка и откуда она появилась на моем личном сайте.

Кроме того, я полностью согласен с тем, что поиск интерполяции действительно потрясающий. Я рад, что кто-то еще слышал об этом.: -)