算法考试复习

2020-02-17  本文已影响0人  FakeCSer爱去网吧

引论

算法复杂性分析

f(n)=32n^2+17n+32,和O(n),Ω (n), Θ(n), O(n^2), Ω(n^2), Θ(n2),O(n3), Ω(n^3), Θ(n^3).相匹配

则f(n)属于O(n2)、O(n3)、Ω(n^2)、Ω (n)、Θ(n^2)

f(n)= O(g(n)) 理解为 f(n) ≤ kg(n);
f(n)= Ω(g(n)) 理解为 f(n) ≥ kg(n);
f(n)= Θ(g(n)) 理解为 f(n) = kg(n);
f(n)= o(g(n)) 理解为 f(n) < kg(n);
f(n)= ω(g(n)) 理解为 f(n) > kg(n).

基本的效率类型

c < logn < (logn)^2 < n < nlogn < n^2 < n^3 < 2^n < n!

贪心算法

N1(1元的数量)≤4   //大于4可用一个5来代替,结果更优
N5≤2
N10+N25≤2
N25≤3

对于求总额x的零钱策略:有ck ≤ x ≤ ck+1。则依照贪心策略,必须取ck。若存在非贪心最优解,则不取ck,此时就必须在c1,...ck-1中选择硬币来代替ck,则会与上述性质矛盾

分治

T(n)={
Θ(1) if n=1
2T(n/2)+Θ(n) if n>1
}

主定理(master theorem )

根据递推式来确定时间复杂度

p1.png
整数乘法( integer multiplication )

问题描述

x=10001101,y=11100001,计算x*y

以x和y的位数做输入规模n,常规计算方法并不是最优Θ(n^2)

策略:

分治思想,x=10001101,y=11100001

将x和y分成前4位和后四位。

m= ⎡n/2⎤ (x,y有n位)

a = ⎣x/2^m⎦ , b = x mod 2^m

c = ⎣y/2^m⎦ ,d = y mod 2m

即a=1000,b=1101,c=1110,d=0001

利用交换律:有以下公式

xy=(2m*a+b)(2m*c+d)=2/2mac+2m(bc+ad)+bd

所以将x*y转换成了四次规模为原来一半的乘法

T(n)={
Θ(1) if n=1
4T(n/2)+Θ(n) if n>1
}

根据主定理

T(n) = Θ(n^2)所以并没有提升效率

所以但是可以观察出若求得小规模的乘法数量小于4,就会提升效率,所以将公式变形

xy=(2^m*a+b)(2^m*c+d)=2/^2mac+2^m(bc+ad)+bd
                    = 2^2m*ac+2^m(ac+bd–(a–b)(c–d))+bd

此时只有个规模更小的运算

所以

T(n)={
       Θ(1)            if n=1
       3T(n/2)+Θ(n)    if n>1
       }

则T(n) = Θ(n^log3)=O(n1.585)

动态规划

重叠子问题,最优子结构

OPT(j)={
  0                                 if j=0
  max{OPT(j-1),wj+OPT(p(j))}        if j>0
}
OPT(i,j)={
    o                        if i=0||j=0
    OPT(i,j)=1               if i,j>0,xi=yj
    max{OPT(i,j-1),c(i-1,j)}  if i,j>0,xi!=yj
}
OPT(i,w)={
  0                                 if i=0
  OPT(i-1,w)                        if wi>w
  max{OPT(i-1,w),vi+OPT(i-1,w-wi)}  otherwise
}

P,NP,NPC,NPhard

https://blog.csdn.net/sinat_21591675/article/details/86521190 一个很好的讲解博客

y 比 x 难

P<NP<NPC<NP-hard
P=NP=NPC 属于NP hard的一个子集
 Φ = (x1(反) ∨ x2 ∨ x3 )∧ (x1 ∨ x2(反) ∨ x3  ) ∧(x1(反) ∨ x2 ∨ x4 )

是否存在布尔值的xi使公式的结果为ture

  x1 = true, x2 = true, x3 = false, x4 = false

3-SAT意为每个括号有三个元素

- SAT可以规约到独立集问题

  每个括号是一个三角形的图,元素做点,每个三角形之间互反的元素链接

相似算法

分界线

图的算法

上一篇 下一篇

猜你喜欢

热点阅读