python之各种二分查找
来源:互联网 发布:人力资源app软件排名 编辑:程序博客网 时间:2024/06/05 09:28
很多时候,我们需要在一堆数字查找的不仅仅是目标值,还可能是比它大的,比它小的,大于等于它的,小于等于它的临近值。现在,老师正在验收作业,我无聊的等待。。。写写python,总结一下这些二分。
array=[4,2,6,1,45,23,27,12,89,5]# for key:find '==' valuedef midfind(key): length=len(array) ans=length-1 l=0 r=length-1 while(l<=r): mid=(l+r)>>1 if(array[mid]<key): l=mid+1 elif(array[mid]>key): r=mid-1 else: return mid return -1# for key:find '>=key' min valuedef midfind1(key): length=len(array) ans=-1 l=0 r=length-1 while(l<=r): mid=(l+r)>>1 if(array[mid]<key): ans=mid l=mid+1 else: r=mid-1 return ans+1#for key:find '<=key' max valuedef midfind2(key): length=len(array) ans=length l=0 r=length-1 while(l<=r): mid=(l+r)>>1 if(array[mid]>key): ans=mid r=mid-1 else: l=mid+1 return ans-1#for key:find > min valuedef midfind3(key): length=len(array) ans=-1 l=0 r=length-1 while(l<=r): mid=(l+r)>>1 if(array[mid]<=key): ans=mid l=mid+1 else: r=mid-1 return ans+1#for key:find < max valuedef midfind4(key): length=len(array) ans=length l=0 r=length-1 while(l<=r): mid=(l+r)>>1 if(array[mid]>=key): ans=mid r=mid-1 else: l=mid+1 return ans-1array.sort()print('after sort (key=24)')print arraydex=midfind(24)dex1=midfind1(24)dex2=midfind2(24)dex3=midfind3(24)dex4=midfind4(24)if(dex==-1): print('not found')else: print array[dex]print(array[dex1])print(array[dex2])print(array[dex3])print(array[dex4])
对应结果:
>>> after sort (key=24)[1, 2, 4, 5, 6, 12, 23, 27, 45, 89]not found27232723>>>
另一种区间查找的二分,即:已知数组所有的数字都和目标值不等,求解目标值在哪个区间?
下面代码返回查找的区间的左值位置:
a=[3,6,9,12,15,20,23,35,47]def midfind(key): length=len(a) l=0 r=length-1 while(l<r): m=(l+r)>>1 #print ("%d %d %d"%(a[l],a[r],a[m])) if(a[m]<key): l=m+1 else: r=m return l-1print midfind(22)#print "*********"print midfind(7)
那种区间查找的过程绝对不能这样写:
while(l<r): m=(l+r)>>1 #print ("%d %d %d"%(a[l],a[r],a[m])) if(a[m]>key): r=m-1 else: l=m return l-1试想:对于上例的list,当下标l=4,r=5,如果a[m]<key仍然成立,l=m=4,这样会无限循环下去。(这都是整除过程floor向下取整惹的祸啊……)
相关例题:http://blog.csdn.net/thearcticocean/article/details/48632391
0 0
- python之各种二分查找
- python算法之二分查找
- 算法 之二分查找的各种版本
- 各种二分查找
- 各种二分查找
- Python查找-二分查找
- python算法之——二分查找
- 二分查找算法之python实现
- python 排序算法之 二分查找
- 查找之二分查找
- 查找之二分查找
- 查找之二分查找
- 二分查找的各种条件
- 二分查找及各种变化
- 各种二分查找算法总结
- 二分查找各种情况汇总
- Python 二分查找
- Python实现二分查找
- Kafka和Spark Streaming Java版本集成并将数据实时写入HBase及代码
- 忘记sa密码,又删除了administrators帐号的解决方法
- 根据ip获取地址
- PCA的数学原理(原文地址:http://blog.codinglabs.org/articles/pca-tutorial.html)
- 用简单UI控件实现霓虹灯
- python之各种二分查找
- Java集合操作
- python生成u8glib中文字体数据
- Spark将HDFS数据导入到HBase
- StandardServer.await: create[8005]java.net.BindException: Address already in use: JVM_Bind
- 使用栈的链式表示,实现括号匹配检测。
- C语言实现拟合直线方程
- Android 正确修改项目包名而不报错的方法...
- Visual Studio 设置窗体控件,随窗体拖动变化大小