算法图解学习笔记01:二分查找大O表示法
二分查找
二分查找又称折半查找,其输入的必须是有序的元素列表。二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x
1 #python实现二分查找 2 def binary_search(list,item): 3 low=0 4 high=len(list)-1 5 while(low<=high): 6 mid=int((low+high)/2) 7 if list[mid]==item: 8 return mid 9 if list[mid]>item: 10 high=mid-1 11 if list[mid]<item: 12 low=mid+1 13 return None 14 15 my_list=[1,2,4,8,9,15,22,30] 16 print(binary_search(my_list,2))
1 | 2 | 3 | 4 | 5 | ... | 17 | 18 | 19 | 20 |
假设如上表1-20按顺序排序,采用二分查找方式查找。最好情况下查找1-20的mid即10,一次即可查找到。
如果是查找17呢?(这是最坏情况下)
第一趟,mid=10,17>mid,即low的下标变为mid+1=11,查找右半部分
11 | 12 | ... | 19 | 20 |
第二趟,mid变为(11+20)/2=15,17>mid,low的下标变为16,再次取上表的右半部,取上表左半部分
16 | 17 | 18 | 19 | 20 |
第三趟,mid变为(16+20)/2=18,17<18,这次需要high的下标变为17
16 | 17 |
第四趟,mid变为(16+17)/2=16,17>16,这次需要low的下标变为17,此时low和high的下标均变为17
17 |
第五趟,mid=item=17,程序结束。程序共执行次
大O表示法
大O表示法是一种特殊的表示法,指出了算法的运行速度有多快。大O表示法指出了最糟情况下的运行时间。
- O(log n),也叫对数时间,这样的算法包括二分查找。
- O(n),也叫线性时间,这样的算法包括简单查找。
- O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
- O(n 2 ),这样的算法包括选择排序——一种速度较慢的排序算法。
- O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法
转载于:https://www.cnblogs.com/vincentme/p/9395998.html
算法图解学习笔记01:二分查找大O表示法相关推荐
- 算法图解学习笔记01之二分查找
不知道可以学到第几章,就不立flag了,容易倒 你要学会的不是写算法而是何时何地用何算法 package 第一章; //数组有序,要求快速查找出数据 public class BinarySearch ...
- 【算法学习笔记】二分查找法
二分查找法 二分查找的本质就是分治法,小时候有过这么一种猜数字的游戏,你在心中想一个大于0小于100的数字,然后我来提问,你只用回答是或者不是,比如"你想的数字比50大吗" 你说不 ...
- 算法图解学习笔记02:递归和栈
计算机内存原理 要说递归和栈的问题,首先就要说下计算机内存的基本原理.简单理解计算机内存原理可以将一台电脑看作超市的存包柜,每个柜子都有柜号(即计算机中的地址,如0x000000f).当需要将数据存储 ...
- 算法图解——学习笔记
文章目录 算法简介 **第二章 选择排序** 数组与链表 排序算法 算法简介 算法:一组完成任务的指令,任何片段都可以视为算法. 第一章 算法集合: 算法种类 定义 二分法 一种查询方法,通过将查找特 ...
- 算法图解学习笔记02之选择排序
package 第二章;import java.util.Arrays;//找出列表中最小(大)的,放入新列表(O(n)),再次找 public class SelectionSort {public ...
- 大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】
视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程,总时长:14:22:04 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g,提取码: ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...
- 算法训练营学习笔记1
算法训练营学习笔记 贪心算法 心算法总是做出当前最好的选择,期望通过局部最优选择得到全局最优的解决方案.从问题的初始解开始,一步歩地做出当前最好的选择,逐步逼近问题的目标,尽可能得到最优解: 贪心本质 ...
- 2021第一学期学习笔记01
2021第一学期学习笔记01 摘要 一.知识点 1.1 追溯 1.2 区块链 二.项目报告 三.本地服务器 四.环境配置 4.1 JDK 展望 摘要 本周的学习情况主要是进行基础理论的学习,查找有关于 ...
最新文章
- Algorithm:C++语言实现之概率算法相关问题(计算机中的概率事件、C语言中的随机事件、产生二维随机数、圆内均匀取点)
- Python3.7.5安装(Windows10附pip更换下载源)
- echart中拆线点的偏移_Real BIM | Rhino+Grasshopper在双曲异形玻璃幕墙中的应用
- Nginx快速搭建和基本使用
- 【Qt Tips】QLineEdit内容过滤之setValidator和setInputMask浅析
- 选择排序、冒泡排序、异或运算
- 福建师范计算机应用基础作业,福建师范大学《计算机应用基础》在线作业一答案.docx...
- Yate for Mac音乐标签管理工具
- 复杂网络作业四:第三题——随机图、小世界网络和真实网络的度分布
- 只需要10秒,使用PPT给证件照换底色
- android自动打开软键盘,Android打开关闭软键盘
- ac6005直连ap 如何配置_【无线】 AC直连AP配置
- Kubeadm部署-Kubernetes-1.18.6集群
- Tensorflow与keras学习 (3)——循环神经网络RNN
- 使用java将多种类型的文件如Word、PDF、JPG汇总到一个文档中(Word或者PDF)
- 机器学习吴恩达课程总结(一)
- python 今日头条 微头条_今日头条微头条范文-头条号的微头条你们都发些什么,该如何写?...
- e的精确值是多少?[z]
- 普元eos使用svn_普元DevOps介绍
- 光固化3D打印机切片参数分析