Python二分法搜索算法实例分析


Posted in Python onMay 11, 2015

本文实例分析了Python二分法搜索算法。分享给大家供大家参考。具体分析如下:

今天看书时,书上提到二分法虽然道理简单,大家一听就明白但是真正能一次性写出别出错的实现还是比较难的,即使给了你充足的时间,比如1小时。如果你不是特别认真的话,可能还是会出一些这样那样的错误,所以就尝试了自己去实现一下,看能否一次通过,结果自然不言而喻,虽然用的时间不长,但是我失败了,呵呵。

个人觉得失败的最主要原因是自己没有认真的先想好这个思路和可能出现的分支情况,而是直接凭主观臆想就去写代码了,完全正中书上所说的行为,所以也如书上所说,出错了。后经调试应该是得到了基本的正确算法,内容如下:

#!/usr/bin/env python
#encoding: utf-8
def half_search(search_arr, search_str):
  lb = 0
  ub = len(search_arr) - 1
  for i in range(ub/2 + 1):
    if lb > ub:
      return -1
    mid = (ub + lb)/2
    if search_arr[mid] == search_str:
      return mid
    elif search_arr[mid] > search_str:
      ub = mid - 1
    else:
      lb = mid + 1
if __name__=='__main__':
  arr = [10,20,30,40,50,60,70]
  print half_search(arr, 1)
  print half_search(arr, 11)
  print half_search(arr, 22)
  print half_search(arr, 33)
  print half_search(arr, 40)
  print half_search(arr, 55)
  print half_search(arr, 66)
  print half_search(arr, 70)
  print half_search(arr, 8)

结果:

-1 
-1 
-1 
-1 
3 
-1 
-1 
6 
-1

正整数代表在数组中的下标,3那就是第4个位置;-1代表不存在

总结:

实现简单的算法之前,如果已经有了一套最简易的实现【比如直接打印100条相似的内容】,不妨要想想是否还有更精巧的实现【可否用循环+参数化替代】;实现稍微复杂点的算法时,不妨先在纸上画出各种可能的验证情况,避免实现是缺胳膊短腿的;还有一点就是算法什么的还是要多练,不然稍微复杂的过一阵可能就会忘记细节了。我想这就叫术业有专攻吧!

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python中支持向量机SVM的使用方法详解
Dec 26 Python
python实现教务管理系统
Mar 12 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
详解python做UI界面的方法
Feb 27 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
TensorFlow的自动求导原理分析
May 26 Python
浅谈Python协程asyncio
Jun 20 Python
python处理图片之PIL模块简单使用方法
May 11 #Python
python自定义解析简单xml格式文件的方法
May 11 #Python
python引用DLL文件的方法
May 11 #Python
深入解析Python中的WSGI接口
May 11 #Python
详细解析Python中__init__()方法的高级应用
May 11 #Python
从Python的源码来解析Python下的freeblock
May 11 #Python
详解Python的Django框架中的templates设置
May 11 #Python
You might like
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
JS二分查找算法详解
2017/11/01 Javascript
JS简单获得节点元素的方法示例
2018/02/10 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
Python中的各种装饰器详解
2015/04/11 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
MIS软件工程师的面试题
2016/04/22 面试题
机械设计毕业生自荐信
2014/02/02 职场文书
预备党员表决心书
2014/03/11 职场文书
历史学专业求职信
2014/06/19 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
财务工作个人总结
2015/02/27 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
二年级作文之动物作文
2019/11/13 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸