第 01 章——算法简介
二分查找(有序序列)
大O表示法:表示最坏条件下,操作数的增速
常见大O运行时间(快到慢)
- O(logn):对数时间,二分查找
- O(n):线性时间,简单查找
- O(n*logn):快速排序
- O(n^2):选择排序
- O(n!):旅行商问题
实例
旅行商问题:前往n个地点,总旅程的最短路线。
第 02 章——选择排序
数组:内存连续,查询快,增删元素慢
链表:内存不连续,查询慢,增删元素快
链表数组:查询,增删元素介于数组和链表
选择排序:(1/2)n^2 #大O表示法忽略常数
实例
Facebook创建用户时,用链表数组:26个数组元素里面存放链表
第 03 章——递归
递归:调用自己
- 基准条件(base)
- 递归条件(recursive)
调用栈(call stack):先进后出,只有压入和弹出操作,内存占用可能很大
调用另外一个函数时,当前函数暂停,处于未完成状态
递归也调用了栈,当不为基准条件时,压入,为基准条件时,弹出
第 04 章——快速排序
分而治之(divide and conquer,D&C)
- 找出基准条件,尽量简单
- 不断分解问题(或缩小规模),直到符合基准条件
欧几里得算法
函数式编程
快速排序
- 选择一个元素,作为基准值(pivot)
- 按<、>基准值,进行分区(partitioning)
- 对<、>基准值