算法图解第一章笔记与习题(算法简介)

文章目录

  • 算法图解第一章笔记与习题(算法简介)
    • 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(log⁡n)O(\log n)O(logn):对数时间,这样的算法包括二分查找。
  • O(n)O(n)O(n):线性时间,这样的算法包括简单查找。
  • O(n∗log⁡n)O(n * \log n)O(n∗logn):这样的算法包括快速排序。
  • O(n2)O(n^2)O(n2):这样的算法包括选择排序。
  • O(n!)O(n!)O(n!):这样的算法包括旅行商问题的解决方案。

算法的速度指的并非时间,而是操作数的增速!

1.4 小结

  • 二分查找的速度比简单查找要快许多,数据越大,差距就越明显。
  • O(log⁡n)O(\log n)O(logn)比O(n)O(n)O(n)快。需要搜索的元素越多,前者比后者就快得越多。
  • 算法运行时间并不以秒为单位。
  • 算法运行时间是从其增速的角度来度量的。
  • 算法运行时间用大OOO表示法表示。

练习

习题1.1

  • 假设有一个包含128个名字的有序列表,你要使用二分查找在其中查找一个名字,请问最多需要几步才能找到?

log⁡2128=7步\log_2128=7步log2​128=7步

习题1.2

  • 上面列表的长度翻倍后,最多需要几步?

log⁡2256=8步\log_2256=8步log2​256=8步

  • 使用大OOO表示法给出下述各种情形的运行时间。(电话簿以姓氏排序)

习题1.3

  • 在电话簿中根据名字查找电话号码。

二分查找,为O(log⁡2n)O(\log_2 n)O(log2​n)。

习题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)。

算法图解第一章笔记与习题(算法简介)相关推荐

  1. 算法图解第二章笔记与习题(选择排序)

    算法图解第二章笔记与习题(选择排序) 文章目录 算法图解第二章笔记与习题(选择排序) 2.2 数组和链表 2.2.1 链表 2.2.2 数组 2.2.3 数组和链表的读取.插入和删除操作的时间复杂度 ...

  2. 算法图解第十章笔记与习题(KNN算法)

    算法图解第十章笔记与习题(KNN算法) 文章目录 算法图解第十章笔记与习题(KNN算法) 10.1 KNN算法 10.2特征提取 10.3 回归 10.4 小结 练习 习题10.1: 习题10.2: ...

  3. 算法图解第一章——算法简介

    目录 前言 一.算法简介 1.引言 1.什么是算法 2.需要具备的知识 2.二分查找 1.什么是二分查找 2.举个例子,猜数字 3.对数函数 3.大 O 表示法 1.定义 2.一些常见的大 O 运行时 ...

  4. 算法图解第一章算法简介之二分查找C++代码实现

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列 这一块没什么好说的,书上讲的很清楚,这里默认 ...

  5. 《装箱算法》第一章 图形识别技术与算法

    章节目录 前言 一.计算机异形图形如何识别? 1.机器扫描法 2.轮廓识别技术 二.图形数据如何储存及读取? 总结 前言 本章主要介绍计算机图形学中,二维的图案是如何仿人类视觉用大脑识别出物体范围,对 ...

  6. 算法图解第六章笔记与习题(广度优先搜索)

    算法图解第六章笔记与习题(广度优先搜索) 文章目录 算法图解第六章笔记与习题(广度优先搜索) 6.1 图(graph) 6.2 广度优先搜索 6.3.1 查找最短路径 6.3.2 队列 6.4 实现图 ...

  7. 自动驾驶决策规划算法第一章笔记 忠厚老实的老王

    第一章 自动驾驶决策规划算法数学基础 第一节:决策规划算法的地位和作用 该笔记来自b站up主(偶像):憨厚老实的老王视频链接主页 第二节:为什么规划中经常见到五次多项式

  8. 《算法图解》学习笔记(七):狄克斯特拉算法(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  9. 《算法图解》读书笔记—像小说一样有趣的算法入门书

    前言 学习算法课程的时候,老师推荐了两本算法和数据结构入门书,一本是<算法图解>.一本是<大话数据结构>,<算法图解>这本书最近读完了,读完的最大感受就是对算法不再 ...

  10. 《算法图解》学习笔记(六):图和广度优先搜索(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

最新文章

  1. 是什么岗位_文案策划的岗位职责是什么?
  2. Python获取当前脚本绝对路径
  3. 2017.10.25
  4. Java中十六进制转换 Integer.toHexString()
  5. kerberos 下运行spark 报错 Requested user hdfs is banned
  6. SQL Server2008数据库管理 (第二部分)
  7. 当 Egg 遇到 TypeScript,收获茶叶蛋一枚 #27
  8. Punycode与中文互转
  9. 黑客可利用超声波秘密控制语音助手设备
  10. Shell 中 exit 和 return 的区别
  11. 使用GDB跟踪redis源代码执行get命令的过程
  12. latex参考文献顺序不对_Latex-引用文献按引用顺序排号
  13. 聚合物/硅胶色谱填粒径1.7μm到50μm
  14. 常用服务器查询日志命令(持续添加)
  15. 微信小程序设置页面背景颜色
  16. 新网站建设的完整步骤
  17. 我国首次评选30名国医大师 享省部级劳模待遇
  18. TCHAR * 转为char *   和 char  * 转为 TCHAR *
  19. HTML期末作业课程设计期末大作业——电影网页制作
  20. Meth | Linux 修改所有者/用户组

热门文章

  1. 数据结构-顺序栈的基本操作(C语言实现)
  2. C# .NET 如何修改代码字体
  3. Java实现:学生管理系统
  4. Ubuntu20.10 安装RedNotebook,一款不错的日记本
  5. 静态GPS控制测量使用技术方法
  6. 计算机学科融合信息技术,信息技术与学科教学融合课例解析
  7. 移动通信原理,GSM/GPRS模块无线传输实验教学
  8. 无盘服务器缓存,深入研究无盘服务器缓存
  9. velocity 语法
  10. coreseek java_基于Sphinx的中文全文检索引擎Coreseek的安装