算法设计基本方法
-
贪婪算法
-
在每一个阶段做出的决定可以认为是好的,而不考虑将来的结果这意味着选择是某个局部的最优,当算法终止时我们希望局部最优就是全局最优。例子:找零钱
-
简单的调度问题
-
非预占调度:一旦开始某一个作业,就必须把该作业运行到底
-
哈夫曼算法
-
在森林中,每次挑选2个权最小的树结合成棵新树
-
装箱问题:运行效率快,但不一定是最优解
-
假设有n个小于1的数,箱子的容量是1,把这着树装进最小数目的箱子
-
联机算法:执行当前数字后才处理下一个,(不能总是产生最优解),只能不断接近,以下三种算法能保证小于二倍最优箱子数
-
下项适合算法:新的数判断能否装进去刚刚的箱子,不行再开辟新箱子
-
最佳适合算法:把树放进能够容纳他最满的箱子
-
首次适合算法:依序扫描已有的箱子,把新的一项放进能放下他的第一个箱子,放不下再去开辟新箱子
-
脱机算法:遍历所有之后在处理
-
·先排序后,把最大放在最先
-
分治算法:分:递归解决较小问题,治:然后从子问题的解构建原问题的解
-
至少两个递归,且子问题不相交
-
最近点问题
-
选择问题:寻找第k小的元素
-
使用五数中值法可以让快速排序运行时间达到O(n)
-
分治算法可以降低选择算法所期望的比较次数
-
整数相乘:对于大书无法假设以常数时间运行,在我们平常的笔算方法中的时间为O(n)
-
将数中间截取,为两个数相加,然后就能拆分为几个较小的数相乘后相加
-
优化矩阵乘法
-
动态规划:把子问题答案记录在表里,用表代替递归
-
构造最优二叉查找树
-
所于点对最短路径
-
随机化算法
-
随机化算法隐式地用于完美散列和通用散列
-
随机数发生器
-
线性同余数发生器
-
素性测试
-
回溯算法:穷举搜索的巧妙实现
-
博弈问题
-
收费公路重建问题
浪波激泥