为什么k-ary搜索的平均比较是k * ln(N)/ ln(k)?

时间:2012-02-13 11:16:19

标签: algorithm data-structures binary-tree binary-search ternary-search

我知道函数执行ln(N)/ ln(K)次;但平均来说它会进行K操作吗?

问题:

  1. 有没有证据表明k * ln(N)/ ln(K)是平均执行次数?
  2. 如果这个公式是正确的,那么三元搜索将是最快的搜索,因为k / ln(k)将是最小的(对于整数)因为3是与“e”(真实最小值)最接近的整数,这是非常容易的证明使用差异化。
  3. 此外,我认为三元搜索更快;因为我做了一个比较计算机程序。

1 个答案:

答案 0 :(得分:0)

  1. 不,因为正确的答案是(k - 1)log n / log k + O(1):只需要k - 1次比较(实际上只有lg k + O(1))来减少搜索范围的大小为k倍。这可以通过对复发T(1)= 1,T(2)= 2,T(n)=(k - 1)+ T(n / k)的归纳来证明。

  2. (k-1)/ log k的整数argmin出现在2.有很多计算机架构原因,无论如何三元搜索可能更快。