算法总结+例题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
重要结果
f (n) = af ( n ) + d(n) b
当d(n)为常数时
f
(n)
=
⎧ ⎨
O(nlogb
a
)
a≠1
⎩O(log n) a = 1
当d(n) = cn时
⎧O(n)
a<b
f (n) = ⎪⎨O(n log n) a = b
⎪⎩ O(nlogb a ) a > b
7
求和的技术
• 有限项等比级数的求和
f(n)=Θ(g(n)) ⇔ f(n)=O(g(n)) ∧ g(n)=O(f(n))
• 阶的高低
指数级:2n, 3n, n!, … 多项式级:n, n2, nlogn, n1/2,… logn的多项式级:logn, log2n,…
• 注意:
阶反映的是大的n(n>n0)的情况,可以忽略有限项. 连续趋势,不允许在不同的值之间抖动.
解: (1) TA (n) = Θ (in) = O(n3/ 2 )
TB (n) = Θ (n log n)
22
关于算法C的说明: 设 k 表示第 i 大元素在排好序数组的下标,元素记为x; 用选择算法确定这个元素 x, 用 x 划分数组 S, 将比 x 大的放到后边; 排序 S 中从 k 到 n 的元素,倒序输出。
16
算 法 分 析(续)
设 x 在第一位的概率为 p, 则在第 i 位的概率为 p/2i −1
p+
p 2
+
p 22
+ ... +
p 2n−1
=1

1 p 2n−1
(1 +
2+
... +
2n−1 )
=1

2n − 1 p 2n−1
=1⇒
p

1 2
17
算 法 分 析(续)
A(n) =
p⋅1+
p⋅2+ 2
算法C 输入: 集合S 输出:S 中最大的 i 个数 1. k←n-i+1; 2. x←Select(S, n, k); 3. 用x划分S,将 S 中比 x 大的元素放到数组的 k +1到 n
的位置; 4. 排序 S[k..n] 5. 倒序输出
TC (n) = Θ (n) + Θ (i log i) = Θ (n) + Θ (n1/ 2 log n1/ 2 ) = Θ (n) 23
log log n, n log n, n, 2logn , log n
22n , n!, n2n , (3 / 2)n , (log n)log n = Θ (nloglog n ), n3 , log(n!) = Θ (nlogn), n = 2logn , log2 n, log n,
log n , log log n, n1/ logn = Θ (1)
合格硬币. 有下述递推方程: T(n) ≤ T(2n / 3) + O(1)
T (1) = 0
T(n)=O(logn).
26
7. 给定n个不等的整数构成的集合L和整数s,判断在L 中是否存在两个整数x和y(x<y),满足x+y=s。 (1)找一个求解该问题的算法,用一段简短的文字说 明算法的设计思路。 (2)以加法运算作为基本运算分析你的算法在最坏情况 下的时间复杂度。
6. 在n(n≥3)枚硬币中有一枚重量不合格的硬币(重 量过轻或者过重),如果只有一架天平可以用来称重,设 计一个算法找出这枚不合格的硬币,使得称重的次数最 少?
(1) 用文字说明算法的主要步骤。 (2) 写出伪码,用到的变量要进行说明,对主要步骤要 给出注释。 (3) 每称1次就作为1次基本运算,分析算法的最坏情况 下的时间复杂度。
2
递推方程求解
• 常系数线性递推方程的求解方法 • 迭代归纳法 • 递归树 • Master定理 • 常用递推方程的解
按照题目要求:求精确解,估计解的阶
3
常系数线性递推方程求解
• 齐次方程无重根的通解形式 设q1, q2, … , qk 是递推方程不等的特征根, 则H(n)= c1q1n+c2q2n+…+ckqkn为通解.
4
Master定理
设a ≥ 1,b > 1为常数,f (n)为函数, T (n)为非负整数 T (n) = aT (n / b) + f (n),
则有以下结果:
1. f (n) = O(nlogb a−ε ),ε > 0, 那么T (n) = Θ (nlogb a ) 2. f (n) = Θ (nlogb a ), 那么T (n) = Θ (nlogb a log n) 3. f (n) = Ω (nlogb a+ε ),ε > 0, 且对于某个常数 c < 1和
算法A:调用 i 次找最大算法 findmax , 每调用一次从S中 删除一个最大的数。
算法B:对S 排序,并输出S 中最大的 i 个数。
(1)分析A,B 两个算法在最坏情况下的时间复杂性。 (2)试设计一个最坏情况下时间复杂性的阶更低的算 法。要求用文字说明算法的设计思想;简要给出算法的伪 码描述(可以调用学过的算法,对于使用的变量或过程要 给与说明,不要求写程序);分析算法最坏情况下的时间 复杂性。
24
求解思路: 1. 如果剩下的硬币数<3, 那么将这剩下的硬币与拿走的 硬币(合格硬币)比较,不等的那枚就是不合格的硬 币。 2. 将n枚硬币分成3份,如果n(mod3)≠0, 那么令2份少的 硬币相等。取两份相等的硬币放到天平上,如果天平不 平衡,那么这两份里包含着不合格的硬币;否则不合格 的硬币在剩下的一份中。 3. 将含不合格硬币的部分硬币作为输入,重复执行2, 直到硬币数小于3。
25
算法Coin(A,n) // A是n个硬币的集合
1. k←⎣n/3⎦; 2. 将A中硬币分成X,Y,Z三个集合,使得|X|=|Y|=k, |Z|=n−2k 3. if W(X)≠W(Y) //W(X),W(Y)分别为X或Y的重量 4. then A←X∪Y 5. else A←Z;n←|A| 6. if n>2 then goto 1. 7. else 将A中的硬币与拿走的硬币比较. 如果不等,则是不
15
算法分析
2. 已知 L 是含有n 个元素并且排好序的数组,x在L中。如 果 x 出现在 L中第 i个 ( i=2, 3, …, n) 位置的概率是在前一个 位置概率的一半,当 n 充分大时,估计下述查找算法平均 情况下的时间复杂性 A(n)。只需给出近似值,要求简单求 解过程。
算法:顺序查找 1. j←1 2. while j ≤ n and x > L[j] do j←j +1 3. if x < L[j] or j > n then j←0
= ... = T (1) + 1 + 1 + ... + 1
23
n
= Θ(log n)
20
4. 设递推方程 T (n) = 7T (n / 2) + n2 给出了算法A在最坏情况下的时间复杂度函数,算法B在 最坏情况下的时间复杂度函数W(n)满足递推方程
W (n) = aW (n / 4) + n2
p 22
⋅ 3 + ... +
p 2n−1
⋅n
=
p(1 +
2 2
+
3 22
+
... +
n 2n−1
)
=
2 p( 1 2
+
2 22
+
... +
n 2n
)

2
1 2
+
1 22
+
1 23
+
... +
1 2n
=
1 2
1 − (1/ 2)n 1 − 1/ 2
=1−
1 2n
1 22
+
1 23
+ ... +
1 2n
• 齐次方程有重根的通解形式 设 q1, q2, … , qt是递推方程的不相等的特征根, 且 qi的重数为ei,令t H i (n) = (ci1 + ci2n + ... + ciei nei −1 )qi n
那么通解 ∑ H (n) = Hi (n) i =1
• 非齐次方程的通解形式
H(n) = H(n) + H * (n)
+
1 n
⎪⎩T2(1) = 1
给出简要求解过程。
19
(1) T (n) = 3T ( n ) + n log n 2
根据master定理,nlogn=O(nlog3-ε),因此
T(n)=Θ(nlog3)
(2) T (n) = T (n − 1) + 1 n
= T(n − 2) + 1 + 1 n−1 n
元素y使得x+y=s
6 else 按照从小到大顺序排序A中元素
7.
对B中每个元素y利用二分检索检查在A中是否有
元素x得x+y=s
W(n)=O(n)+O(mlogm)+O(nlogm) 其中 m≤n/2
=O(nlogm)
所有的充分大的 n有 af (n / b) ≤ cf (n), 那么
T (n) = Θ ( f (n))
注意:case3. 不存在ε>0,使得 nlogn = Ω(n1+ ε)
5
递归树
• 递归树的生成过程与迭代过程的对应
– 适应于子问题不对称的情况
• 递归树的计算方法
– 选择最长的路径估计结点层数 – 按层计算结点上的值之和 – 计算各层函数之和
考试范围
数学基础:
估计函数的阶、递推方程求解、求和技术
算法设计技术:
分治策略、动态规划、贪心法、回溯与分支估界 理解给定例题的算法,并能简单应用。
算法分析技术:
能估计简单伪码程序的基本运算次数(最坏或平均) 清楚搜索、排序、选择三类问题的最优算法是什么
1பைடு நூலகம்
函数的阶
• 阶的概念
f(n)=O(g(n))
• 检索、排序、选择问题的下界分析结果
14
关于阶的计算
1(12分)对以下函数,按照他们的阶从高到低排列;如果
f(n)与g(n)的阶相等,表示为 f(n) = Θ(g(n))。只需给出答 案,不必给出过程。
log(n!), log2 n, 1, n!, n2n , n1/ logn , (3 / 2)n , log n , (log n)logn , 22n , nloglogn , n3 ,
• 解向量的确定 • 分支条件的确定**
– 约束条件 – 代价函数的确定(了解)
• 效率的估计
– Monte Carlo方法
• 典型问题
13
算法分析技术
• 评价算法的因素
–正确性、工作量、占用空间、简单性、最优性
• 算法的两种复杂度
– 最坏情况下复杂度、平均情况下复杂度
• 问题下界的分析技术
–判定树 –根据算法构造最坏情况下的输入
a1(1 +
q
+
q2
+
...
+
qk
)
=
a1 (1 − qk+1 ) 1−q
• 无限等比序列的收敛值
a1 (1
+
q
+
q2
+
...)
=
a1 1−q
,
q<1
• 调和级数的估计值
1 + 1 + ... + 1 + ... = O(log n)
2
n
• 对数函数和的估计值
log1 + log2 + ... + logn = O(nlog n) 8
• 关于目标函数的递推方程** • 自底向上的计算 • 表格存储 • 解的追踪 • 典型问题
11
贪心法
• 适用条件
– 组合优化、多步判断、贪心选择性质
• 局部优化策略的确定 • 贪心选择性质的证明** • 近似解的估计(了解) • 典型问题
12
回溯和分支估界
• 适用条件
– 搜索问题、多步判断、多米诺条件
试确定最大的正整数 a 使得W(n)的阶低于T(n)的阶?
解:T(n)=Θ(nlog7), 当a>16时
W (n) = Θ (nlog4 a )
要使 log4 a < log 7
即 loga<2log7,即a<49, 因此最大的正整数为48.
21
5. 给定n个不同数的集合S和正整数i, i<n1/2, 求S 中最大的 i个数,并且按照从大到小次序顺序输出。有下述算法:
=
1 (1 − 2
2
1
n−1
)
=
1 2

1 2n
1 23
+ ... +
1 2n
=
1 22
(1 −
1 2n−2
)
=
1 22

1 2n
...
18
3. 估计T1(n), T2(n)的阶, 其中
(1)
⎪⎨⎧T1
(n)
=
3T1
(
n 2
)
+
n
log
n
⎪⎩T1(1) = 1
(2)
⎪⎨⎧T2
(n)
=
T2 (n

1)
27
算法SumEqual
1. 将s/2作为划分的标准,将L中的数划分成两个数组A和 B,使得A中的元素都小于s/2, B中的元素都大于s/2. 这样 使得如果L中存在x和y,则x属于A且y属于B.
2. 令|A|=a, |B|=b,
3. if a>b
4. then 按照从小到大顺序排序B中元素
5.
对A中每个元素x利用二分检索检查在B中是否有
算法设计技术
• 分治策略 • 动态规划 • 贪心法 • 回溯和分支估界
9
分治策略
• 分治策略的适用条件 • 子问题的划分**
– 均衡划分原则 – 子问题类型与原问题相同
• 递归算法分析——递推方程** • 减少子问题的技术(了解) • 典型问题
10
动态规划
• 适用条件
– 优化问题、多步判断、优化原则、子问题重叠
相关文档
最新文档