python - 在二进制搜索中,为什么 mid = (left + (right - left))//2 比 mid = (left + right)//2 好?

标签 python binary-search

<分区>

在二分搜索 while 循环中:

left, right = 0, len(nums)
while left < right:
    mid = (left + right) // 2
    if nums[mid] == target:
        return mid

为什么在某些语言中 mid = (left + (right - left))//2mid = (left + right)//2 更好除了 python?

编辑:好像我把括号弄错了。感谢您指出这一点,它对我来说更清楚了。我会这样离开,以防其他人偶然发现这一点。我在 youtube 视频中看到了这个评论,但是那个人从来没有解释为什么一个会比另一个更好。谢谢大家的回答!

谢谢大家!

最佳答案

在 Python 中,两者都不是更好。或者更确切地说,(left + right)//2 稍微好一点,因为它少了一次算术运算。但这可以忽略不计。

在其他语言中,left + (right - left)//2 将用于避免 integer overflow ,这可能在执行 left + right 时发生。这在 Python 中不会发生,因为 Python 本身就允许任意大的整数;所以你看到的建议与 Python 无关。

关于python - 在二进制搜索中,为什么 mid = (left + (right - left))//2 比 mid = (left + right)//2 好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69709977/

相关文章:

python - 使用 selenium、bs4 或 requests 从交互式图表中抓取数据

java - 使用连续字符键的通用二分搜索失败

algorithm - 猜测 x+y 值的最佳方法是什么?

binary-search - 使用二分搜索将元素插入到已排序的数组中

python - 在哪里可以找到 _sre.py python 内置模块?

python - paho-mqtt 发布-订阅无法在 Python 中的单独文件中工作

c# - 如何在 List<T>.BinarySearch 中有效地复制 ArrayList.BinarySearch?

algorithm - 编程 Pearls : Column 9. 3 二分查找 - 范围初始化

python - 多个大型数组的内存问题

python - 在函数中调用函数 - Python