算法分析与设计
算法基础
选择排序
冒泡排序
顺序查找
凸包问题
穷举法
TSP(旅行商问题)<O(n)=n!>
背包<O(n)=2n>
分配<O(n)=n!>
深度优先搜索DFS 栈
邻接矩阵Θ(V2)
邻接表Θ(|V|+|E|)
广度优先搜索BFS 队列
邻接矩阵Θ(V2)
邻接表Θ(|V|+|E|)
蛮力法
减治法
转化为规模较小相同问题
增量法 小——>大
自顶向下:递归
自底向上:递推(迭代)
1、减常量
插入排序
拓扑排序
2、减常因子
二分查找<O(n)=log2n>
俄式乘法
eg:n*m=:n/2*2m(n为偶数)
(n-1)/2*2m+m(n为奇数)
3、减可变规模常量
最大公约数Euclid算法<O(log2n)>
插值查找<O(log2log2n)>
基于分区的选择问题<Θ(nlog2n)>
分治法
划分多个相同问题的较小实例
递归求解小实例
组合小实例解=>原解
归并排序<Θ(nlogn)>
快速排序<Θ(nlog2n)>
大整数乘法
Strassen矩阵乘法<传统O(n3),分治O(n2.81)>
二维最大点O<(n2)>
最近点对算法<O(nlogn)>
凸包算法<O(nlogn)>
棋盘覆盖
变治法
变换问题,便于后题求解
实例化简:实例变换为另一个更简单方便求解实例
预排序<Θ(nlogn)>
高斯消去法<Θ(n2)>
改变表示
变换问题的表达方式
AVL树<Θ(logn)>
2-3树<Θ(logn)>
堆<Θ(n)>
堆排序<Θ(nlog2n>
霍纳法则<Θ(n)>
问题归纳:变换为已有求解算法的另一个问题。(数学建模)
贪心算法
兑换硬币
用的面额越大,换的个数越少,剩余额越少
最小生成树
Prim
Kruskal
最短路径
单源单目标
单源多目标 Dijkstra
连续背包
单位价值di=Vi/Wi
(单会场)活动安排<Θ(nlogn)>
以结束时间越早
与动态规划相比高效,但不一定可以得到最优解,但动态规划(效率差)能得到
动态规划
搜索
回溯法
分支定界搜索

浙公网安备 33010602011771号