划分和征服算法实现的中点

时间:2016-11-17 02:12:45

标签: algorithm divide-and-conquer

我已经看到很多实现使用下面的方法找到两个索引的中点:

int mid = lo + (hi - lo) / 2;

而不是

int mid = (lo + hi) / 2;

在数学上,我看到没有区别但是,我从未见过有人使用下面的那个。两者之间是否存在计算差异?

1 个答案:

答案 0 :(得分:1)

计算中存在32位带符号二进制整数的最大正值。

我们假设此值为100。

int lo = 60;
int hi = 80;

然后lo + hi = 60 + 80 = 140 > 100,这样做很危险,因为它会导致integer overflow错误。