算法图解第一章笔记与习题(算法简介)
算法图解第一章笔记与习题(算法简介)
文章目录
- 算法图解第一章笔记与习题(算法简介)
- 1.2 二分查找
- 1.3大$O$表示法
- 1.4 小结
- 练习
- 习题1.1
- 习题1.2
- 使用大$O$表示法给出下述各种情形的运行时间。(电话簿以姓氏排序)
- 习题1.3
- 习题1.4
- 习题1.5
- 习题1.6
1.2 二分查找
def binary_search(list, item):# low 和 high 用于跟踪要在其中查找的部分low = 0high = len(list) - 1# 只要范围没有缩小到只有一个元素,就继续循环while low <= high:# 检查中间的元素mid = (low + high) // 2 # 这里注意下,必须是 // 而不是 /,否则不会自动取整,在list中取非整数则会报错。guess = list[mid]# 如果猜的数是对了,返回结果if guess == item:return mid# 如果猜的数大了,上限减1if guess > item:high = mid - 1# 如果猜的数小了,下限加1else:low = mid + 1# 如果没有这个元素,返回Nonereturn Nonemy_list = [1, 3, 5, 7, 9] ##测试数据
1.3大OOO表示法
大OOO表示法指出的是最糟情况下的运行时间
下面按从快到慢的顺序列出经常遇到的5种大O运行时间:
- O(logn)O(\log n)O(logn):对数时间,这样的算法包括二分查找。
- O(n)O(n)O(n):线性时间,这样的算法包括简单查找。
- O(n∗logn)O(n * \log n)O(n∗logn):这样的算法包括快速排序。
- O(n2)O(n^2)O(n2):这样的算法包括选择排序。
- O(n!)O(n!)O(n!):这样的算法包括旅行商问题的解决方案。
算法的速度指的并非时间,而是操作数的增速!
1.4 小结
- 二分查找的速度比简单查找要快许多,数据越大,差距就越明显。
- O(logn)O(\log n)O(logn)比O(n)O(n)O(n)快。需要搜索的元素越多,前者比后者就快得越多。
- 算法运行时间并不以秒为单位。
- 算法运行时间是从其增速的角度来度量的。
- 算法运行时间用大OOO表示法表示。
练习
习题1.1
- 假设有一个包含128个名字的有序列表,你要使用二分查找在其中查找一个名字,请问最多需要几步才能找到?
log2128=7步\log_2128=7步log2128=7步
习题1.2
- 上面列表的长度翻倍后,最多需要几步?
log2256=8步\log_2256=8步log2256=8步
使用大OOO表示法给出下述各种情形的运行时间。(电话簿以姓氏排序)
习题1.3
- 在电话簿中根据名字查找电话号码。
二分查找,为O(log2n)O(\log_2 n)O(log2n)。
习题1.4
- 在电话簿中根据电话号码查找人。(提示:你必须查找整个电话簿。)
简单查找,为O(n)O(n)O(n)。
习题1.5
- 阅读电话簿中每个人的电话号码。
简单查找,为O(n)O(n)O(n)。
习题1.6
- 阅读电话簿中姓名以A打头的人的电话号码。这个问题比较棘手,它涉及到第4章的概念。答案可能让你感到惊讶!
简单查找,同时,因为大OOO表示法没有常数部分,因此O(n26)O(\frac n{26})O(26n)直接被看作为O(n)O(n)O(n)。
算法图解第一章笔记与习题(算法简介)相关推荐
- 算法图解第二章笔记与习题(选择排序)
算法图解第二章笔记与习题(选择排序) 文章目录 算法图解第二章笔记与习题(选择排序) 2.2 数组和链表 2.2.1 链表 2.2.2 数组 2.2.3 数组和链表的读取.插入和删除操作的时间复杂度 ...
- 算法图解第十章笔记与习题(KNN算法)
算法图解第十章笔记与习题(KNN算法) 文章目录 算法图解第十章笔记与习题(KNN算法) 10.1 KNN算法 10.2特征提取 10.3 回归 10.4 小结 练习 习题10.1: 习题10.2: ...
- 算法图解第一章——算法简介
目录 前言 一.算法简介 1.引言 1.什么是算法 2.需要具备的知识 2.二分查找 1.什么是二分查找 2.举个例子,猜数字 3.对数函数 3.大 O 表示法 1.定义 2.一些常见的大 O 运行时 ...
- 算法图解第一章算法简介之二分查找C++代码实现
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列 这一块没什么好说的,书上讲的很清楚,这里默认 ...
- 《装箱算法》第一章 图形识别技术与算法
章节目录 前言 一.计算机异形图形如何识别? 1.机器扫描法 2.轮廓识别技术 二.图形数据如何储存及读取? 总结 前言 本章主要介绍计算机图形学中,二维的图案是如何仿人类视觉用大脑识别出物体范围,对 ...
- 算法图解第六章笔记与习题(广度优先搜索)
算法图解第六章笔记与习题(广度优先搜索) 文章目录 算法图解第六章笔记与习题(广度优先搜索) 6.1 图(graph) 6.2 广度优先搜索 6.3.1 查找最短路径 6.3.2 队列 6.4 实现图 ...
- 自动驾驶决策规划算法第一章笔记 忠厚老实的老王
第一章 自动驾驶决策规划算法数学基础 第一节:决策规划算法的地位和作用 该笔记来自b站up主(偶像):憨厚老实的老王视频链接主页 第二节:为什么规划中经常见到五次多项式
- 《算法图解》学习笔记(七):狄克斯特拉算法(附代码)
欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...
- 《算法图解》读书笔记—像小说一样有趣的算法入门书
前言 学习算法课程的时候,老师推荐了两本算法和数据结构入门书,一本是<算法图解>.一本是<大话数据结构>,<算法图解>这本书最近读完了,读完的最大感受就是对算法不再 ...
- 《算法图解》学习笔记(六):图和广度优先搜索(附代码)
欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...
最新文章
- 是什么岗位_文案策划的岗位职责是什么?
- Python获取当前脚本绝对路径
- 2017.10.25
- Java中十六进制转换 Integer.toHexString()
- kerberos 下运行spark 报错 Requested user hdfs is banned
- SQL Server2008数据库管理 (第二部分)
- 当 Egg 遇到 TypeScript,收获茶叶蛋一枚 #27
- Punycode与中文互转
- 黑客可利用超声波秘密控制语音助手设备
- Shell 中 exit 和 return 的区别
- 使用GDB跟踪redis源代码执行get命令的过程
- latex参考文献顺序不对_Latex-引用文献按引用顺序排号
- 聚合物/硅胶色谱填粒径1.7μm到50μm
- 常用服务器查询日志命令(持续添加)
- 微信小程序设置页面背景颜色
- 新网站建设的完整步骤
- 我国首次评选30名国医大师 享省部级劳模待遇
- TCHAR * 转为char * 和 char * 转为 TCHAR *
- HTML期末作业课程设计期末大作业——电影网页制作
- Meth | Linux 修改所有者/用户组