【问题标题】:Why are binary search index computed this way? [duplicate]为什么以这种方式计算二进制搜索索引? [复制]
【发布时间】:2016-08-14 14:25:27
【问题描述】:

在我在网上或书上阅读的每一段代码中,如果有人想计算 s 和 e 之间的中点,他们会这样做:

int mid = s + ((e - s) / 2);

这在数学上和

不一样
int mid = (s + e) / 2;

那么为什么它经常以第一种方式编写呢?我的猜测是防止整数溢出但不确定。

谢谢

【问题讨论】:

  • 你得到了正确的答案。事实上,有些代码确实使用了(s+e)/2,但是是的,它会导致整数溢出的问题。
  • 由于整数除法的不同,它们并不相同。
  • @EdHeal 问题只是溢出。只要se 为正数,除法中的舍入结果相同。
  • @EdHeal:你能指定一些产生不同结果的数字(不会导致溢出)吗?

标签: algorithm binary mean binary-search


【解决方案1】:

如果 e 接近整数的最大值,则(s+e)/2 可以溢出,但s+(e-s)/2 不能(假设s 为非负数)。

例如(MAX_INT-2 + MAX_INT) == -4,所以(MAX_INT-2 + MAX_INT)/2 == -2

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多