最近我听说了三分查找,它将一个数组分成三部分并进行比较。这里会有两次比较,但它可以将数组缩小到 n/3 的规模。为什么人们不经常使用它呢?
最近我听说了三分查找,它将一个数组分成三部分并进行比较。这里会有两次比较,但它可以将数组缩小到 n/3 的规模。为什么人们不经常使用它呢?
这里有一些随意的实验证据,我还没有进行任何审查,表明它比二分查找要慢。
尽管在搜索树中,你可以得到相同的大O复杂度(ln n),但区别在于常数。在每个层级上,三叉搜索树需要进行更多的比较。因此,差异归结为k/ln(k)对于k元搜索树。这在e=2.7时具有最小值,而k=2提供了最佳结果。
你可能听说过三分查找算法,它通常被用在那些需要用天平称重的谜题中。这种天平会有3种结果:左边轻,两边一样重,或左边重。所以在三分查找中,只需要进行1次比较。 然而,计算机使用的是布尔逻辑,只有2种结果。为了进行三分查找,实际上需要进行2次比较。 我想有些情况下这依然比其他方法更快,正如之前的评论者所提到的,但是你可以看出,三分查找并不总是更好,在计算机上实现起来也更加混乱和不自然。
理论上,k/ln(k)
的最小值在 e 处达到,由于 3 比 2 更接近 e,因此需要更少的比较。你可以验证 3/ln(3) = 2.73..
和 2/ln(2) = 2.88..
。二分查找之所以可能更快,是因为其代码将具有更少的分支,并且在现代 CPU 上运行速度更快。