什么是最被低估或鲜为人知但有用的算法?

时间:2009-07-01 08:13:04

标签: algorithm data-structures computer-science theory

我正在寻找一种如此未知但有用的算法或数据结构,您认为这是计算机科学或编程社区的可怕疏忽。如果只有 我们都可以学到这一点,那么很多未来的计划都会有很多好处。

我能想到的最好的是插值搜索,只有极少数程序员知道,而每个人都知道二进制搜索。我认为毫无疑问,快速搜索有序列表是一种非常有用且基本的算法。

这两者几乎完全相同 - 所以这不是问题。

它对均匀分布的数据执行O(log(log(n))),而不是二进制搜索O(log(n))。这意味着搜索40亿个数字只需要5个探测器而不是32个,那就更好了!

在非完美统一的数据上,它在大多数情况下仍然表现得非常好。只有当数据真正偏离时才会像二进制搜索一样糟糕或者更糟糕。当数据高度偏斜时,这是O(n)最坏的情况,但在大多数现实情况下这种情况非常罕见。

即便如此,人们可以构造一个偶数/奇数算法在两者之间交替,并得到最差的二分搜索情况,使用插值搜索的平均情况来缓解极端情况。

大多数程序员/图书馆都忽略了这一点。

其他人可以击败它吗?

3 个答案:

答案 0 :(得分:6)

我提名smoothsort。就地,时间复杂度O(n log n)最坏情况/ O(n)最佳情况。

答案 1 :(得分:4)

trie / ternary tree ...快速前缀匹配!我当然使用它们而不是堆或显式链表结构(隐式链表与“下一个”通常很有用。)

答案 2 :(得分:2)

smoothsort的另一个提名。它在理论上非常漂亮,渐渐地渐渐变得很好。

如果你很好奇,我写了explanation这个排序的工作原理以及它在我个人网站上的来源。

另外,我完全同意插值搜索真的很棒。我很高兴别人听说过这个。 : - )