《漫画算法》读书笔记

在图书馆借阅算法书时,看到了一本非常吸引我的算法书——《漫画算法》。算法还能以漫画的方式展示出来吗?我带着我的疑惑翻开了这本书,里面的语言非常接地气,通俗易懂,让我觉得这本书非读不可。
这本书一共讲解了六章知识点,下面让我们一起来了解吧。

第一章 算法概述

本章主要的知识点是算法和数据结构,时间复杂度和空间复杂度。
通过本章的学习,我学到了:
1)在计算机领域里,算法是一系列程序指令,用于处理特定的运算和逻辑问题。
2)衡量算法优劣的主要标准是时间复杂度和空间复杂度。
3)数据结构是数据组织、管理和存储格式,其使用目的是为了高效地访问和修改数据。
4)数据结构包含数组、链表这样的线性数据结构,也包含树、图这样的复杂数据结构。
5)时间复杂度是对一个算法运行时间长短的量度,用大O表示,记作T(n)=O((n))。常见的时间复杂度按照从低到高的顺序,包括O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)等。
6)空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,用大O表示,记作S(n)=O(f(n))。
7)常见的空间复杂度按照从低到高的顺序,包括O(1)、O(n)、O(n2)等。其中递归算法的空间复杂度和递归深度成正比。

第二章数据结构基础

1)数组是由有限个相同类型的变量所组成的有序集合,它的物理存储方式是顺序存者,访问方式是随机访问。利用下标查找数组元素的时间复杂度是0(1),中间插入、删余数组元素的时间复杂度是O(n)。
2)链表是一种链式数据结构,由若干节点组成,每个节点包含指向下一节点的指针。链表的物理存储方式是随机存储,访问方式是顺序访问。查找链表节点的时间复杂度是O(n),中间插入、删除节点的时间复杂度是0(1)。
3)栈是一种线性逻辑结构,可以用数组实现,也可以用链表实现。栈包含入栈和出栈操作,遵循先入后出的原则(FILO)。队列也是一种线性逻辑结构, 可以用数组实现,也可以用链表实现。队列包含入队和出队操作,遵循先入先出的原则( FIFO)。
4)散列表也叫哈希表,是存储Key-Value映射的集合。对于某一个Key, 散列表可以在接近0(1)的时间内进行读写操作。散列表通过哈希函数实现Key和数组下标的转换,通过开放寻址法和链表法来解决哈希冲突。

第三章树

1)树是n个节点的有限集,有且仅有一个特定的称为根的节点。当n>1时,其余节点可小为m个互不相交的有限集,每一个集合本身又是一一个树,并称为根的子树。
2)二叉树是树的一种特殊形式,每一一个节点最多有两个孩子节点。二叉树包含完全二叉树和满二叉树两种特殊形式。
3)二叉树的遍历方式:
根据遍历节点之间的关系,可以分为前序遍历、中序遍历、后序遍历、层序遍历这4种方式:从更宏观的角度划分,可以划分为深度优先遍历和广度优先遍历两大类。
4)二叉堆是一种特殊的满二叉树,分为最大堆和最小堆。在最大堆中,任何一个父节点的值,都大于或等于它左、右孩子节点的值。在最小堆中,任何一一个父节点的值,都小于或等于它左、右孩子节点的值。
5)优先队列分为最大优先队列和最小优先队列。在最大优先队列中,无论入队顺序如何,当前最大的元素都会优先出队,这是基于最大堆实现的。
在最小优先队列中,无论入队顺序如何,当前最小的元素都会优先出队,这是基于最小堆实现的。

第四章排序算法

1.冒泡排序
冒泡排序的思路是把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置;当一个元素小于或等于右侧相邻元素时,位置不变。详细过程如下:
第一轮排序:

得到新的排序:5 6 3 8 2 1 9 7

第二轮排序:

第二轮排序后得到:

第三轮到第七轮状态如下:

冒泡排序是一种稳定排序,值相等的元素并不会打乱原本的顺序。由于该排序算法的每一轮都要遍历所有元素,总共遍历(元素数量-1)轮,所以平均时间复杂度是0(n^2)。
2.鸡尾酒排序
由8个数字组成的一个无序数列{2,3,4,5,6,7,8,1},按照从小到大排序。
1)按照冒泡排序:

2)按照鸡尾酒排序:
第一轮:

第二轮:

第三轮(虽然实际上已经有序,但是流程并没有结束)
在鸡尾酒排序的第3轮,需要重新从左向右比较并进行交换。
1和2比较,位置不变; 2和3比较,位置不变; 3和4比较,位置不变…7比6较,位置不变。
没有元素位置进行交换,证明已经有序,排序结束。
这就是鸡尾酒排序的思路。排序过程就像钟摆一样, 第1轮从左到右,第2轮从右到左,第3轮再从左到右…
哇,本来要用7轮排序的场景,用3轮就解决了,鸡尾酒排序可真是巧妙的算法!

3.快速排序

学完这一章后,总结一下算法的时间复杂度、空间复杂度、是否稳定吧。

第五章面试中的算法

在本章看到了一个很有趣的题目:无序数组排序后的最大相邻差。

有一个无序整型数组,如何求出该数组排序后的任意相邻元素的最大差值?要求时间和空间复杂度尽可能低。
举个例子:

解题思路:
1.利用桶排序的思想,根据原数组的长度n,创建出n个桶,每一 个桶代表- 个区间范围。其中第1个桶从原数组的最小值min开始,区间跨度是( max-min)/(n-1)。
2.遍历原数组,把原数组每一个元素插入到对应的桶中,记录每一个桶的最大和最小值。
3.遍历所有的桶,统计出每一个桶的最大值, 和这个桶右侧非空桶的最小值的差,数值最大的差即为原数组排序后的相邻最大差值。
例如给出一个无序数组{2,6.3,4.5,10,9},处理过程如下图。
第1步,根据原数组,创建桶,确定每个桶的区间范围。

第二步,遍历原数组,确定每个桶内的最大和最小值。

第三步,遍历所有的桶,找出最大相邻差。

最大相邻差:9-6=3

第六章算法的实际应用

本章主要是将实际应用场景应用,与之前的差不多,就不一一罗列啦。

结尾:

通过这本《漫画算法》的阅读,我更进一步了解到了算法,也进一步巩固了算法知识。

《漫画算法》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. boost::signals2模块实现为类定义后构造函数的示例
  2. fio 测试磁盘性能
  3. sql语句中的in用法示例_PHP中的循环语句和示例
  4. HBase笔记整理(二)
  5. repo start master --all 和repo start --all master区别
  6. 28. Location replace() 方法
  7. 趋肤效应实验报告_GB/T 4857.2
  8. 用excel制作双层饼图_excel双层饼图怎么做
  9. stm32学习----正电原子精英板控制电机正反转
  10. 向工程腐化开炮:Java代码治理
  11. 淘宝商城,亚洲最大网上购物网站
  12. Photoshop Elements 2023(PSE简化版2023) 支持win/mac版
  13. 《MATLAB 神经网络43个案例分析》:第33章 模糊神经网络的预测算法——嘉陵江水质评价
  14. 【光剑藏书轩2021】5分钟读懂《贫穷的本质》:“穷人通常缺少信息来源”
  15. Opencv实战——OCR文档扫描
  16. Three.js光源梳理3——平行光(DirectionalLight)
  17. Hadoop期末总结
  18. Excel 取消单元格合并,并且将空值填充
  19. C++之内存管理:申请与释放
  20. 温湿度传感器原理介绍

热门文章

  1. 无接任何usb设备却提示无法识别usb设备
  2. ChatGPT会砸了谷歌的饭碗吗?(附彩蛋)
  3. 使用api制作我的足迹地图
  4. Apple: Mac OS X美洲狮10.8的硬件兼容列表
  5. 阿里云服务器是如何计费的?包年包月与按量付费有什么区别?
  6. Android 修改系统默认输入法
  7. 微信鼠标点击显示二维码代码
  8. DREA:基于多样性排序的多目标优化进化算法
  9. C++开发斗地主(QT)第三篇之动画发牌与位置计算
  10. Spring boot 事物管理