在一个有序数列中查找,二分查找是最优算法吗?怎样证明?
假设对这个数列进行x分查找,即每次取1/x位置上的数,判断要找的数在它的哪一边子区间,然后再在这个子区间进行x分查找,计算平均需要查找的数目。
对二分查找,x=2,平均需要查找log2(n) = ln(n) / ln(2) 次,计算过程略。
如果是三分查找,x=3,则要找的数有1/3的几率落在小子区间内,2/3的几率落在大子区间内,这样每次比较,
1)因为有1/3的几率淘汰2/3的数据,2/3的几率淘汰1/3的数据,所以平均剩下1/3*1/3+2/3*2/3=5/9
共需要比较ln(n)/ln(9/5)次 ~= 1.7 * ln(n)
2)平均每3次比较,有一次淘汰2/3的数据,2次淘汰1/3的数据,所以3次后剩下1/3*2/3*2/3=4/27
共需要比较3 * ln(n)/ln(27/4)次 ~= 1.57 * ln(n)
为什么两种方法计算结果不一样?对通常的x又该用哪种方法计算?