这是一本很入门的算法书,介绍的东西还算简单明了,大体补充了一些自己没理解的东西.
粗略地看了一下,感觉还是"纸上得来终觉浅,绝知此事要躬行!"
<<算法图解>>读书笔记
1.算法介绍
大O表示法
O(n)线性时间,简单查找,n表示操作数
O(log n)对数时间,二分查找
O(n * log n)快速排序
O(n^2)选择排序
O(n!)旅行商问题
- 算法的速度指的并非时间,而是操作数的增速。
- 谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。
- 算法的运行时间用大O表示法表示。
- O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多
2.选择排序
数组
数组的元素都在一起
- 优点:
- 读取数据很快
- 缺点:
- 事件超出数组长度,需要转移
- 如果预留额外空间,会造成内存的浪费
链表
链表的元素是分开的,其中每个元素都存储了下一个元素的地址
- 优点:
- 插入和删除速度很快
- 缺点:
- 读取链表最后一个元素,无法直接读取
常见数组和链表操作的运行时间
O(n)线性时间 ; O(1)常量时间
链表擅长插入和删除,而数组擅长随机访问
3.递归
每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。
递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。
栈
压入和弹出
调用栈可能很长,这将占用大量的内存。
4. 快速排序
(divide and conquer&#x