python 二分法调试代码,Python实现二分法
Python實現二分查找
為什么需要二分查找如果查找1-100內任意一個數字?順序查找(簡單查找)從1開始或者100倒著來進行查找
最快只需要一次,但是最慢則需要一百次,差距相當大
大O表示法為 O(n)
二分查找每次從中間進行查找,先從50,再判斷大還是小,再從75或者25進行查找,依次類推
由于每次都會排除一般的數字,所以最慢也只需要7次,log2 n次
大O表示法為O(log n)
要求:必須是有序的情況
從上面的例子可以看出來,在有序的情況下,二分查找的效率是很高的
大O表示法
大O表示法是一種比較特殊的表示法,指出了算法的消耗時間速度,主要可以表示兩種算法之間時間消耗的不同增速小明要準備去北京玩,為了更好的準備,小明提前準備了100套線路方案,然后準備用程序驗證那種方案更加方便省時間,如果使用簡單查找的話進行驗證,假設一套方案需要一秒鐘,那么100套就需要100毫秒(O(n),而使用二分查找的話只需要7毫秒(O(log n),這就整整差了十多倍的時間,這僅僅只是100套,如果是一億套方案呢,簡單查找時間就會更久, 由此我們可以根據大O表示法比較兩個算法直接的時間增量速度以此判斷哪個算法更加便捷
python代碼實現二分查找def?BinarySearch(list1,?num):
min?=?0???????????????#?最小的下標
max?=?len(list1)?-?1??#?最大的下標
i?=?0
while?True:
i?+=?1
mid?=?(max?+?min)?//?2?#?中間的下標每次向下取整
if?num?>?list1[mid]?:
min?=?mid?+?1??#?小于需要的猜的數,則將最小下標變為中間的,又因為中間的已經猜過,所以要加1
elif?num?==?list1[mid]?:
print("找到數據")
print("一共查找%d次"%i)????????????break
else?:
max?=?mid?-?1??#?大于需要的猜的數,則將最大下標變為中間的,又因為中間的已經猜過,所以要減1
if?__name__?==?"__main__":
list1?=?[i?for?i?in?range(0,100)]
num?=?5
BinarySearch(list1,?num)
作者:python_LiuYi
鏈接:https://www.jianshu.com/p/af69c01375ce
總結
以上是生活随笔為你收集整理的python 二分法调试代码,Python实现二分法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea搭建maven项目关于数据库连接
- 下一篇: python读取大文件内容_python