【问题标题】:binary search optimization in terms of number of comparisons根据比较次数进行二分搜索优化
【发布时间】:2012-08-04 00:36:19
【问题描述】:

最近我在一次采访中被问到这个问题。 在二分查找中,我们有两个比较,一个是大于,另一个是小于中间值。能否以某种方式对其进行优化,以便我们只需要检查一次?

【问题讨论】:

    标签: optimization binary-search


    【解决方案1】:

    是的,在几个方面。

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

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

    通过使用Deferred Detection of Equality 技巧。

    【讨论】:

      【解决方案2】:

      不,你不能。虽然您可以切换运算符(例如,而不是更大和更少使用更大和相等),但您最终会得到两个比较。在二分查找中,你实际上有三个结果,如果你比较其中两个结果都不是真的,那只能是第三个。

      例如:

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

      如果你切换运算符,牵涉的运算符会改变,但你总是需要两个比较。

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 2011-03-30
        • 2022-11-25
        • 1970-01-01
        相关资源
        最近更新 更多