对于二进制搜索,是否存在比中点更有效的搜索因子?

时间:2017-08-25 16:46:44

标签: optimization binary-search

天真二进制搜索是一种非常有效的算法:您在排序数组中取高点和低点的中点并相应地调整高点或低点。然后你重新计算你的终点并迭代,直到你找到你的目标值(当然,你没有。)

现在,很明显,如果你不使用中点,你会给系统带来一些风险。让我们说你将你的搜索目标从中点移开,你创造了两个方面 - 我称之为大方和小方。 (这种转变是高还是低都无关紧要,因为它会是对称的。)风险在于,如果你错过了,你的搜索空间会比它更大:你必须搜索更大的一面。但是奖励是,如果你的搜索空间越来越小。

在我看来,风险与奖励的空间数量是相同的,并且(没有模式,我假设没有模式)元素高于和低于中点的可能性相等。所以风险在于它落在新目标和中点之间。

现在因为空格的数量会影响搜索空间,并且搜索空间是以对数方式测量的,在我看来,如果我使用的话,让我们说搜索空间为1/4和3/4,我&# 39;把小空间的原木切成两半,大空间只增加了大约.6或.7。

所有这些都考虑到了:有没有比使用中点更有效的方式来执行二进制搜索?

1 个答案:

答案 0 :(得分:0)

让我们同意搜索键同样可能位于数组中的位置 - 否则,我们想要根据我们对位置的特殊知识设计算法。所以我们可以选择的是每次分割数组的位置。如果我们选择数字0< x< 1并且在那里分割数组,它在左边的机会是x,它在右边的机会是1-x。在第一种情况下,我们将数组缩短x倍,在第二种情况下缩短1-x倍。如果我们多次这样做,我们会得到许多这些因素的乘积,因此这里使用的“正确”平均值是几何平均值。从这个意义上讲,每步的平均减少量为x,权重为x,1-x为权重1-x,总共为x ^ x *(1-x)^(1-x)。

那么什么时候最小化?如果这是数学堆栈交换,我们将采用衍生产品(使用产品规则,链规则和指数规则),将它们设置为零,然后求解。但这是stackoverflow,所以相反我们绘制它: graph has a clear minimum at x = 1/2 and is symmetric about 1/2.

你可以看到你从1/2获得的越远,你得到的越多。为了更好地理解,我推荐信息理论或微积分,对此有一些有趣和互补的观点。