在比较次数方面的二进制搜索优化

时间:2012-08-03 16:13:58

标签: optimization binary-search

最近我在接受采访时被问到这个问题。 在二进制搜索中,我们有两个比较,一个用于大于,另一个用于小于中值。它是否可以通过某种方式进行优化,以便我们只需要检查一次?

2 个答案:

答案 0 :(得分:2)

不,你不能。虽然您可以切换运算符(例如,而不是更大和更少使用更大和相等),您最终将进行两次比较。在二进制搜索中,你实际上有三个结果,如果你比较两个结果而两个都不是,它只能是第三个结果。

例如:

if (lookup < mid)
  searchLower();
else if (lookup > mid)
  searchUpper();
else
  found(lookup);

如果你改变操作符,那么所涉及的操作符会改变,但你总是需要进行两次比较。

答案 1 :(得分:2)

是的,有几种方式。

进行三方比较,存在于某些版本的Fortran中(参见“算术IF”)。

通过使用措辞 - 在x86(及其他)程序集中,您可以使用一个cmp,但仍使用两个分支。

使用Deferred Detection of Equality技巧。