复习大纲
1.基本概念
2.分治法
3.动态规划
4.贪心法
5.回溯法及分支限界
概念总结
三要素????操作 控制结构 数据结构
五属性????有穷性/确定性/可行性/输入/输出
两方法????事前分析法/事后分析法
时间复杂度定义????执行算法所需的计算工作量
算法定义???? 有限条指令的序列 确定了解决某个问题的运算或操作顺序
复杂度????最坏情况Wn 平均情况An
函数的阶
????Θ等于的意思。(同阶)
????Ο表示上界,小于等于的意思。
????ο表示上界,小于的意思。
????Ω表示下界,大于等于的意思。
????ω表示下界,大于的意思。
阶运算定理⚠️
定理一????相除求极限
存在且为正常数c同阶
等于零低 正无穷高
????用于估计函数的阶
定理二????函数阶之间存在传递性????函数排序
定理三????略
求递推方程⚠️
1⃣️公式法????特征方程/通解
换元法????n=2^k
差消法????两边乘n/与n-1相减
2⃣️迭代法????一层层代进去(n-1)
3⃣️递归树????以树形式迭代(n/2)
4⃣️主定理????求阶
主定理????套公式即可
分治法
与动态规划本质区别????分治子问题相互独立
动态规划子问题重叠
递归????自顶向下
三步曲????分解/解决/合并
动态规划
⚠️基本要素????最优子结构/重叠子问题
最优化????自底向上
三步曲????找最优解/定义最优值/计算最优值
贪心法
与动态规划本质区别????不从全局考虑最优
⚠️基本要素????贪心选择性质/最优子结构性质
贪心选择????自顶向上
证明正确性????第一归纳法/第二归纳法
⚠️需要满足多米诺性质????子能推出父
回溯法
????适合内存有限
深度优先
目标找出所有解
方法????堆栈
分支限界
????解空间大
广度优先/最小耗费优先
⚠️两种方法????队列式/优先队列式
目标找出最优解
各方法异同点
重点算法
????必考????快速排序&矩阵链乘
???? 哈夫曼树????按频率表构造 小在左 大在右
????红黑树????插入问题
左旋/右旋/变色共同解决
????Prim&Kruskal
Prim????选起始点出发/每次选权重最小的边
????针对稠密图 n^2
Kruskal????所有权重排序 每次选最小 合并连通分量
????针对稀疏图 mlogm
????最短路径三兄弟
1⃣️Dijkstra????单源中转站????复杂度n^2
2⃣️Bellman????单源带负权值????复杂度v*e
3⃣️Floyd????多源中转站????复杂度n^3
????动态规划经典
1⃣️最长公共子序列????O(mn)O(m+n)
2⃣️最优二叉检索树????O(n^3)
3⃣️矩阵链乘法????O(n^3)
4⃣️背包问题????O(nb)
????分治法经典
1⃣️选最大最小问题????3/2n-2
2⃣️第k小元素????3/2n-1
????回溯法经典
连续邮资问题????深度优先搜索
????贪心法经典
1⃣️活动选择????O(n)
2⃣️哈夫曼树????O(n)等等
3⃣️最小生成树????Prim????O(n^2)
Kruskal????O(nlogn)
????NP问题
排序时间复杂度
插入排序O(n^2)
堆排序nlogn
归并排序nlogn
快速排序 最坏n^2 最理想nlogn
桶排序 最理想sitaN