算法测试一复习
Posted programmingdrifter
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法测试一复习相关的知识,希望对你有一定的参考价值。
【算法正确性】所有的输入,都能停止,并有正确的输出
【算法选择】易懂:),优雅:),高效:)(时间+空间)
【θ】θ(g(n)) = {f(n) | Exist positive constant: c1, c2, n0 && 0 <= c1g(n) <= f(n) <= c2g(n) for all n >= n0 } 考虑:n -> 无限大;f(n) 的增长速率与 g(n) 一致
【插入排序】左边的永远是已经拍好序的best case: T(n) = an + b; worst case: T(n) = an^2 + bn + c
non-increasing insertion sort(这里伪代码的index从1开始算)
insertion_sort(L)
for j = 2 to L.length // index 2 - n
key = L[j]
i = j - 1 // 5 4 3 2 1 -> j = index2, i = index1
while i > 0 and L[i] > key: // 当i大于0, 且当左边的数字大于key的时候
L[i+1] = L[i] // 将较大的i赋值给i+1, 即它右边相邻的数字 5 5 3 2 1
i = i - 1 // 比较左边的数直到index1 - 1 = 0
L[i + 1] = key // 将key赋给i右边的值
排序例子:{30, 40, 55, 23, 41, 52} // key的位子加粗表示,但存在key里
30 40 55 23 41 52
30 40 55 23 41 52
30 40 55 23 41 52 -> 30 40 55 55 41 52 -> 30 40 40 55 41 52 -> 30 30 40 55 41 52 -> 23 30 40 55 41 52
23 30 40 55 41 52 -> 23 30 40 55 55 52 -> 23 30 40 41 55 52
23 30 40 41 55 52 -> 23 30 40 41 55 55 -> 23 30 40 41 52 55
【定理】对于任何f(n), g(n), f(n) = θ(g(n)) <=> f(O(g(n))) && f(Ω(g(n)))
传递性
f(n) = Θ(g(n)) && g(n) = Θ(h(n)) -> f(n) = Θ(h(n))
f(n) = O(g(n)) && g(n) = O(h(n)) -> f(n) = O(h(n))
f(n) = Ω(g(n)) && g(n) = Ω(h(n)) -> f(n) = Ω(h(n))
自反性
f(n)=Θ(f(n)), f(n)=O(f(n)), and f(n)=Ω(f(n))
对称性
f(n) = Θ(g(n)) <=> g(n) = Θ( f(n))
f(n) = O(g(n)) <=> g(n) = Ω( f(n))
【NPC问题】{NPC} = {q | q in NP && for all np in NP can be reduced to q}
【如何证明NPC】
“证明一个问题是 NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它” ——matrix67
阅读资料出处及链接:
http://www.matrix67.com/blog/archives/105
以上是关于算法测试一复习的主要内容,如果未能解决你的问题,请参考以下文章