算法测试一复习

【算法正确性】所有的输入,都能停止,并有正确的输出

【算法选择】易懂:),优雅:),高效:)(时间+空间)

【θ】θ(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

例子:

证明 k-vertex cover problem 是NPC

1. 证明k-vertex cover problem在NP里

2. 证明k-clique可以约化为k-vertex cover problem

例二:

证明哈密顿回路是NPC

1. 证明哈密顿回路问题在NP中

2. 证明哈密顿回路可以化简成k-clique????

阅读资料出处及链接:

http://www.matrix67.com/blog/archives/105

猜你喜欢

转载自www.cnblogs.com/programmingdrifter/p/12232242.html
今日推荐