@markheng
2017-01-10T16:57:29.000000Z
字数 4097
阅读 2306
算法设计与分析
问题的下界
O 表示上界,最坏情况的时间复杂度
Ω 表示最优情况的时间复杂度,是下界
Θ 表示确界,包含最优和最坏两种情况
算法的性能比(W12)
随机算法
它是在接收输入的同时,为了随机选择的目的,还接收一串随机比特流并且在运行过程中使用该比特流的算法。
蒙特卡洛算法和拉斯维加斯算法
都是随机算法
MonteCarlo算法总产生解,正确或者错误的都有
LasVegas算法产生正确解,或者没有解
随机化快速排序
快速排序的效率为
随机化快排是随机排列序列中的元素或者随机选择主元,这样算法就不依赖于输入数列的顺序。
效率为
分治策略的两种情形
图书馆找书子问题的解即问题的解
评三好学生子问题结果需要整合处理(合并)
分治策略的变种
二分法
分解并在解决之前合并法divide and marriage before conquest:
A variant of divide and conquer in which subproblems created in the "divide" step are merged before the "conquer" step.
管道传输分治法pipelined divide and conquer:
A divide and conquer paradigm in which partial results from recursive calls can be used before the calls complete. The technique is often useful for reducing the depth of an algorithm.
二分搜索
二分搜索在已排序的数组中搜索某个元素所执行的元素比较次数不超过
AVL树
2-3树
AVL树
在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。
2-3树
2–3树是平衡树,意味着右边,左边,中间的子树的元素数量都是相同或接近的。
多项式近似方案
PAS、FPAS
多项式等价
判定问题并不总是多项式相等于对应的优化问题。
每个优化问题均伴随着几个判定问题,我们希望找到其中与优化问题多项式等价的。
多数问题均有其响应的多项式等价的判定问题,所以NP完备性也适用于优化问题的复杂性评估。
问题归约
如果可以使用求解P2的算法为子程序求解P1,则称P1归约为P2。、
有P2至少跟P1一样难
多项式归约
P2的解法用于P1花费了单位时间,则称为 多项式归约
问题转换
是一种特殊的归约
对于P1的每一个实例I1 均可在多项式时间内构造P2 的一个实例I2,使得
- 当且仅当I2为肯定实例时, I1为肯定实例。
- 则称P1多项式转化为P2。
若P1多项式时间转化为P2,P2 至少与P1 一样难;但不表明P1与P2一样难
we say that a recognition problem P1 is in the class NP, if for every yes instance I of P1, there is a short (i.e., polynomial length) verification that the instance is a yes instance.
P中所有问题属于NP
NP完备问题:难,且没有有效算法
P1是NP完备的,当
1. P1属于NP,且
2. 所有其他NP的问题可以多项式转化为P1
NP完备问题举例
- 汉密尔顿回路
- 划分问题
- 3覆盖问题
NP难问题比NPC要广,它包含了所有NP问题以及非NP问题
遗传算法,依靠交叉和变异得到解
禁忌算法,禁忌期
蚁群算法
退火算法
算法过程
动态规划中的决策序列
题目样例
线路题
前进:当前节点未被剪枝并且仍有子节点即可继续前进
分支:第i层左分支表示不选择路径
回溯:当遍历找到问题的解时回溯,遇到被剪枝的节点,回溯。从左分支返回时,访问右分支,从右分支返回时,返回父节点。
剪枝:剪枝条件如下
子问题的下界为费用下界、地井数下界、跨区线路数下界。费用下界是根据剩余站点数量定义的,累计最小的路线花费即可得到。由于限制被极度弱化,所以非常粗糙,但是正确有效。另两个下界类似。
父问题的上界是已知最优方案的费用,显然正确有效
按费用从小到大排序所有路线l1,l2,...,lm
排序计算子问题下界:
1。地井数下界:剩余站点数量->最小地井数
2。跨区线路数下界:剩余站点数量->最小跨区线路数
search(空集, l1)
返回最优结果
def search(线路集合S,当前线路l):
判断线路集合S是否合格,条件如下:
1。无环路
2。当前地井数 + 地井数下界 <= UMAX
3。当前跨区铺设线路数 + 跨区铺设线路数下界 <= DMAX
4。当前费用 + 构成网络还需要的边的数量 * l的费用 < 已知最优方案的费用
如果合格:
当前网络已经覆盖所有站点:
记S为已知最优
否则若剩下的线路数有可能使所有站点构成网络:
search(S ∪ {l}, l的下一条路线)
search(S, l的下一条路线)
税费题
这个答案好像有问题,仅供参考
1)
可以根据除A外的51个国家定义一棵若干层二叉搜索树。每个节点的左分支表示选择其代表的国家为下一个贸易顺序上的国家,右分支则表示不选择。构造搜索树需要两个辅助变量,之前的贸易顺序S(s为S的最后一个国家)和这一轮否决的国家V,初始S=,V=空集。任取可以和s国贸易的国家c(不属于S和V)置于树的当前生成位置,然后用(S' = 和V' = 空集)生成左子树,用(S' = S和V' = V ∪ {c})生成右子树。如果c不存在或者s = B则终止当前子树的生成。如此反复可以建立一棵二叉搜索树。
2)
前进:当前节点未被剪枝并且仍有子节点即可继续前进。
分支:先遍历左分支,后遍历右分支。
回溯:左右分支都被遍历时返回父节点,达到回溯条件(当前时间 + s国与B国贸易的最小税费对应的时间 <= t)时直接回溯。
剪枝:
剪枝条件如下:
1。当前税费 + s国与B国贸易的最小税费 >= 已知最优方案的税费
2。当前时间 + s国与B国贸易的最短时间 > t
3)
子问题的下界为税费下界和时间下界,均由dijkstra算法算法得到,表示某国与B国贸易的最小税费和最短时间。两个结果均由弱化限制的方法得到,所以是正确的,计算复杂度也不高,当然有效。
父问题的上界是已知最优方案的税费,显然正确有效。
4)
使用dijkstra算法得到子问题下界:
1。税费下界:某国与B国贸易的最小税费,顺便记录对应的时间和贸易顺序
2。时间下界:某国与B国贸易的最短时间
search(<A>)
返回最优结果
def search(贸易顺序S):
令s为S的最后一个国家
判断S是否合格,条件如下:
1。当前税费 + s国与B国贸易的最小税费 < 已知最优方案的税费
2。当前时间 + s国与B国贸易的最短时间 <= t
如果合格:
当前时间 + s国与B国贸易的最小税费对应的时间 <= t:
记<S, s国与B国贸易的最小税费对应贸易顺序(不包括s)>为已知最优
否则对所有可以与s国贸易的不属于S的国家c:
search(<S, c>)