我正在学习算法/大o,我只是对此感到好奇。
指某东西的用途
mid = (low+high)/2;
通常不鼓励使用二分查找算法来获取中点,因为可能会出现溢出错误。为什么这会导致发生溢出错误,以及如何处理
mid = low + (high-low)/2;
防止这个错误?
Thanks.
在第一种情况下,如果 low 和 high 都足够大(例如,如果两者都等于 2^30+1/或什至更大/),则计算值(low+high),该值可能太大而无法放入 int 中。在第二种情况下,您不计算 (low+high),而是执行一个小技巧并遍历表达式 (high-low),并且该表达式相对于 int 溢出要安全得多。
不过,如果您没有一个大小大于 2^30 的数组(无论如何,这是一个相当大的数组),即使使用第一个表达式,我也不知道如何遇到 int 溢出。所以在大多数情况下我只会使用第一个而不用担心。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)