二进制搜索:无限循环

时间:2018-10-08 23:39:10

标签: python algorithm binary-search

我正在尝试解决二进制搜索问题,但是,由于lo himid的值没有像预期的那样变化,所以我一直遇到无限循环。我正在尝试在函数count_lines(mid,k) >= n中搜索最小中间值。我已经花了几个小时来调试该代码,但是我仍然无法弄清lo himid的值出了什么问题。有人可以看看我的代码,然后告诉我为什么会这样吗?非常感谢!

失败的测试用例,其中:n=9 k=2 这是我的代码:

   def count_lines(v,k):
   ...
   ...
   return count_lines #count_lines is an integer` 


   def binarySearch_v(n, k):
   lo = 0
   hi = n
   mid = (lo + hi)//2
   while (lo <= hi):
     if (count_lines(mid, k) < n):
        lo = mid
     elif (count_lines(mid, k) > n):
        hi = mid
     elif (count_lines(mid, k) >= n and count_lines(mid-1, k) < n):
        return mid
     mid = (lo + hi) // 2

    def main():
      print(binarySearch_v(n,k)) # Failed at n=9 & k=2
    main()

enter image description here

1 个答案:

答案 0 :(得分:2)

这是您的终止条件:

while (lo <= hi):

这是lohi可以更改值的地方:

lo = mid
...
hi = mid

合乎逻辑的结论是,如果这段代码循环了足够的时间,您将得到lo == hi。然后,mid将被设置为两者的平均值,即两者均相等,这就是所有三个变量都将保留的位置。因此,循环不会终止。有两种可能的解决方案:要么更改您重新分配lohi的方式,要么将终止条件更改为<而不是<=