我正在寻找一种算法或数据结构,它非常不为人知却又非常有用,以至于你认为计算机科学或编程界对其的忽视是一个可怕的疏漏。如果我们所有人都能学会这个算法,那么未来的许多程序都将得到很大的好处。
我想到的最好的算法是插值搜索,只有极少数程序员知道它,而每个人都知道二分查找。我认为,在有序列表中快速查找是一种非常有用和基本的算法,这几乎没什么疑问。
两者的实现方式几乎相同 - 所以这不是问题。
它在均匀分布的数据上执行O(log(log(n))),而二分查找的执行时间是O(log(n))。这意味着搜索40亿个数字仅需要5个探测,而不是32个,效果要好得多!
即使是在非完美均匀数据上,它大部分情况下的表现仍然非常好。只有当数据非常倾斜时,它才像二分查找那样糟糕甚至更糟。在数据高度倾斜的情况下,它的最坏情况是O(n),但这在大多数实际情况下都比较少见。
即便如此,人们仍然可以构造一个奇偶算法来在两种算法之间交替使用,并获得二分查找的最坏情况和插值查找的平均情况以缓解极端情况。
真的没有很好的理由让大多数程序员/库对其视而不见。
还有其他能够超越这个算法吗?