《 算法图解 》—— 读书笔记(一)

《 算法图解 》—— 读书笔记(一)

这个笔记这么复制粘贴没有什么意义,还是要转化成自己的语言,看着我记过的笔记,一章一章地“复述出来”才有价值,我的输出才重要,无用功一点都不要做。

从打算深入钻研算法以来,**《算法图解》**是拿过来看的第一本算法书。

这本书的两个特点:
1、薄。全书200页左右,集中时间5个小时读完;
2、浅。本书在只介绍最初级的概念,且章节之间的关联及其紧密。

这篇博客作为读书笔记,记录每章节的主要内容,加深记忆,方便温故知新。

1 算法简介

  • 编写第一种查找算法——二分查找;
  • 算法的运行时间——大O表示法(评价算法复杂程度的函数);
  • 常用算法设计——递归;

算法是一组完成任务的指令。任何代码片段都可视为算法。

二分查找是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。

一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步。

最多需要猜测的次数与列表长度相同,这被称为线性 时间(linear time)。

二分查找的运行时间为对数时间(或log时间)。

大O表示法指的并非以秒为单位的速度。大O表示法 让你能够比较操作数,它指出了算法运行时间的增速。

算法1的运行时间为O(n),算法2的运行时间为O(log n)。——大O函数的自变量是操作次数

大O表示法指出了最糟情况下的运行时间。

最糟情况和平 均情况将在第4章讨论。

O(log n),也叫对数时间,这样的算法包括二分查找。
O(n),也叫线性时间,这样的算法包括简单查找。
O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。
在这里插入图片描述 从快到慢的顺序排列算法

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

谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。

算法运行时间是从其增速的角度度量的。

2 选择排序

二分查,只能用于有序元素列表;

选择排序是下一章将介绍的快速排序的基石;

需要存 储多项数据时,有两种基本方式——数组和链表。

使用数组意味着所有待办事项在内存中都是相连的(紧靠在 一起的)。

两个缺点:

1、你额外请求的位置可能根本用不上,这将浪费内存。你没有使用,别人也用不了。

2、待办事项超过10个后,你还得转移。

链表中的元素可存储在内存的任何地方。

链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起

使用链表时,根本就不需要移动元素。

链表相当于说“我们分开来坐”,因此, 只要有足够的内存空间,就能为链表分配内存。

需要读取链表的最后一个元素时,你不能直接读取,因为你不知道 它所处的地址

如果你需要跳跃,链表的效率 真的很低。

元素的位置称为索引。

你执行的插入操作很多,但读取操作很少。该使用数组还是链表呢?

使用链表时,插入元素很简单,只需修改它前面的那个元素指向的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值