关于二元搜索的一个问题

sky*_*oor 11 algorithm

为什么人们通常进行二分搜索而不是三重搜索(每次将数组分成三部分)或者每次甚至分成十部分?

Ant*_*sma 18

因为二进制搜索导致最小量的比较和查找.对于简单的直觉,考虑每次分成4个部分.

[         |         |    .    |         ]
          v1        v2        v3
Run Code Online (Sandbox Code Playgroud)

您现在已经完成了3次查找,并且必须将您要搜索的最大值与所有三个值进行比较.将其与二次搜索的两次迭代进行比较:

[                   |    .              ]
                    v1
[                   |    .    |         ]
                    v1        v2
Run Code Online (Sandbox Code Playgroud)

您现在已经缩小了相同数量的搜索范围,但只进行了2次查找和2次比较.

  • 这是正确的答案 - 不仅仅是二元搜索是*最简单*,正如其他答案所示,但是(当它适用时)理论上它是*最佳*可能的搜索算法. (2认同)

Bis*_*hnu 5

这是因为每个级别的1个比较(如在二分搜索中)在任何n元搜索的最坏情况下具有最少的比较数.这是因为每个级别的比较次数线性增加,其中树的深度以对数方式减小.对于n-nary搜索,最坏情况下的比较次数是((n-1)/ log(n))*log(m)其中m是树中项目的数量,其在n = 2时被最小化.