算法导论Let4-Recurrences.ppt

合集下载

算法导论第4章

算法导论第4章
贪心算法和动态规划算法都要求问题具有最优子 结构性质,这是2 结构性质,这是2类算法的一个共同点。但是,对于具 有最优子结构的问题应该选用贪心算法还是动态规划 最优子结构的问题应该选用贪心算法还是动态规划 算法求解? 算法求解?是否能用动态规划算法求解的问题也能用贪 心算法求解?下面研究2个经典的组合优化问题 心算法求解?下面研究2个经典的组合优化问题,并以 组合优化问题,并以 此说明贪心算法与动态规划算法的主要差别。
12
4.2 贪心算法的基本要素
2、最优子结构性质
当一个问题的最优解包含其子问题的最优解时, 称此问题具有最优子结构性质 称此问题具有最优子结构性质。问题的最优子结构性 最优子结构性质。问题的最优子结构性 质是该问题可用动态规划算法或贪心算法求解的关键 特征。
13
4.2 贪心算法的基本要素
3、贪心算法与动态规划算法的差异
2
顾名思义,贪心算法总是作出在当前看来最好的选择。 也就是说贪心算法并不从整体最优考虑,它所作出的选择 局部最优选择。当然,希望贪心算法 只是在某种意义上的局部最优 只是在某种意义上的局部最优选择。当然,希望贪心算法 得到的最终结果也是整体最优的。虽然贪心算法不能对所 有问题都得到整体最优解,但对许多问题它能产生整体最 优解。如单源最短路经问题,最小生成树问题等。在一些 情况下,即使贪心算法不能得到整体最优解,其最终结果 却是最优解的很好近似。
16
4.2 贪心算法的基本要素
用贪心算法解背包问题的基本步骤:
首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心 首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心 选择策略,将尽可能多的单位重量价值最高 选择策略,将尽可能多的单位重量价值最高的物品装入背包。 单位重量价值最高的物品装入背包。 若将这种物品全部装入背包后,背包内的物品总重量未超过 C,则选择单位重量价值次高的物品并尽可能多地装入背包。 依此策略一直地进行下去,直到背包装满为止。 具体算法可描述如下页:

lecture-4 Recursion

lecture-4 Recursion

递归与回溯
27
对一个包含有许多结点,且每个结点有多个分支的 问题,可以先选择一个分支进行搜索。当搜索到某 一结点,发现无法再继续搜索下去时,可以沿搜索 路径回退到前一结点,沿另一分支继续搜索。 如果回退之后没有其他选择,再沿搜索路径回退到 更前结点,…。依次执行,直到搜索到问题的解, 或将全部可搜索的分支都搜索完确认没有解存在为 止。 回溯法与分治法本质相同,可用递归求解。
递归练习1
17
已知A[n]为整数数组,试写出下面算法的递归算 法:
求A中的最大整数
递归公式: MaxKey(1) = Element[0] MaxKey(n) = max( Element[n - 1], MaxKey(n-1) )
int MaxKey( int A[], int n){ if (n==1) return A[0]; int temp = MaxKey(A, n-1); if (A[n-1] > temp) return A[n-1]; else return temp; }
定义是递归的
6
例如,阶乘函数
1, 当n = 0时 ⎧ n! = ⎨ ⎩n ∗ ( n − 1)!, 当 n ≥ 1时
求解阶乘函数的递归算法 long factorial(long n) { if (n == 0) return 1; else return n*factorial(n-1); }
求解阶乘 n! 的过程
1
STACK & RECURSION (栈与递归)
Lecture-4 09/05
清华大学数据结构教研组
上节回顾
2
1.
用S表示进栈操作,用X表示出栈操作,1234 为进栈元素,那么经过下列操作序列之后,得 到的出栈顺序是?

《算法导论》习题答案

《算法导论》习题答案
i 1
n/2
n! nn , n! o(nn )
3.2.4 是否多项式有界 lg n !与 lg lg n !
设lgn=m,则 m! 2 m ( )m e2m ( )m em(ln m1) mln m1 nln ln n
∴lgn!不是多项式有界的。
T (n) O(lg n)
4.1.2 证明 T (n) 2T (n) n 的解为 O(n lg n)
设 T (n) c n lg n
T (n) 2c n lg n n c lg n n n c(n 1) lg(n / 2) n cn lg n c lg n cn n cn(lg n 1) n c(lg n 2n)
虽然用二分查找法可以将查找正确位置的时间复杂度降下来,但 是移位操作的复杂度并没有减少, 所以最坏情况下该算法的时间复杂 度依然是 (n2 )
2.3-7 给出一个算法, 使得其能在 (n lg n) 的时间内找出在一个 n 元
素的整数数组内,是否存在两个元素之和为 x
首先利用快速排序将数组排序,时间 (n lg n) ,然后再进行查找:
sin(n / 2) 2 1,所以 af (n / b) cf (n) 不满足。 2(sin n 2)
4.1.6 计算 T (n) 2T (
令 m lg n, T (2 ) 2T (2
m m/ 2
n ) 1 的解
) 1
令 T(n)=S(m),则 S (m) 2S (m / 2) 1 其解为 S (m) (m),T (n) S (m) (lg n)
4.2 The recursion-tree method 4.2.1 4.2.2 4.2.3 4.2.5 略

算法导论答案 (4)

算法导论答案 (4)

算法导论答案第一章:算法概述啊算法的定义算法是一系列解决问题的明确指令。

它是一个有穷步骤集,其中每个步骤或操作由确定性和可行性特征。

算法是通过将预期的输入转换为输出来解决问题的工具。

第二章:插入排序插入排序的思想插入排序是一种简单直观的排序算法,其基本思想是将待排序的序列分为已排序和未排序两部分,每次从未排序的部分中取出一个元素,并将其插入到已排序部分的正确位置,直到所有元素都被排序。

插入排序的算法实现以下是插入排序的伪代码:INSERTION-SORT(A)for j = 2 to A.lengthkey = A[j]// Insert A[j] into the sorted sequence A[1.. j-1].i = j - 1while i > 0 and A[i] > keyA[i + 1] = A[i]i = i - 1A[i + 1] = key插入排序的时间复杂度插入排序的时间复杂度为O(n^2),其中n是排序的元素个数。

虽然插入排序的最坏情况下的复杂度很高,但是对于小规模的数据集,插入排序是一种较快的排序算法。

第三章:分治策略分治策略的基本思想分治策略是一种解决问题的思想,它将问题的规模不断缩小,直到问题足够小而可以直接解决。

然后将子问题的解合并起来,得到原问题的解。

分治策略的应用实例一种经典的应用分治策略的算法是归并排序。

归并排序将待排序的序列划分为两个子序列,分别排序后再将两个有序子序列合并为一个有序序列。

以下是归并排序的伪代码:MERGE-SORT(A, p, r)if p < rq = floor((p + r) / 2)MERGE-SORT(A, p, q)MERGE-SORT(A, q + 1, r)MERGE(A, p, q, r)MERGE(A, p, q, r)n1 = q - p + 1n2 = r - qlet L[1..n1+1] and R[1..n2+1] be new arraysfor i = 1 to n1L[i] = A[p + i - 1]for j = 1 to n2R[j] = A[q + j]L[n1 + 1] = infinityR[n2 + 1] = infinityi = 1j = 1for k = p to rif L[i] <= R[j]A[k] = L[i]i = i + 1elseA[k] = R[j]j = j + 1分治策略的时间复杂度归并排序的时间复杂度为O(nlogn),其中n是待排序序列的长度。

麻省理工学院-算法导论

麻省理工学院-算法导论

麻省理工学院-算法导论关于课本的介绍如下:本书自第一版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考手册。

本书全面论述了算法的内容,从一定深度上涵盖了算法的诸多方面,同时其讲授和分析方法又兼顾了各个层次读者的接受能力。

各章内容自成体系,可作为独立单元学习。

所有算法都用英文和伪码描述,使具备初步编程经验的人也可读懂。

全书讲解通俗易懂,且不失深度和数学上的严谨性。

第二版增加了新的章节,如算法作用、概率分析与随机算法、线性编程等,几乎对第一版的各个部分都作了大量修订。

学过计算机的都知道,这本书是全世界最权威的算法课程的大学课本了,基本上全世界的名牌大学用的教材都是它。

这本书一共四位作者,Thomas H. Cormen,Charles E. Leiserson和Ronald L. Rivest是来自MIT的教授,Clifford Stein是MIT出来的博士,现在哥伦比亚大学做教授,四人姓氏的首字母联在一起即是此书的英文简称(CLRS 2e),其中的第三作者Ronald L. Rivest是RSA算法的老大(算法名字里面的R即是指他),四个超级大牛出的一本书,此书不看人生不能算完整。

再介绍一下课堂录像里面授课的两位MIT的老师,第一位,外表“绝顶聪明”的,是本书的第二作者Charles E. Leiserson,以逻辑严密,风趣幽默享誉MIT。

第二位,留着金黄色的络腮胡子和马尾发的酷哥是Erik Demaine,21岁即取得MIT教授资格的天才,1981出生,今年才25岁,业余爱好是俄罗斯方块、演戏、琉璃、折纸、杂耍、魔术和结绳游戏。

另外,附上该书的中文电子版,pdg转pdf格式,中文版翻译自该书的第一版,中文书名没有使用《算法导论》,而使用的是《现代计算机常用数据结构和算法》,1994年出版时没有得到国外的授权,属于“私自翻译出版”,译者是南京大学计算机系的潘金贵。

课程重点算法导论是麻省理工学院电机工程与计算机科学系“理论计算机科学”集中选修课程的先导科目。

算法导论 第四章 递归

算法导论 第四章 递归
2
3 2 cn 16
log4n+1
( n log 4 3 )
3log 4 n n log 4 3
Geometric series
• The fully expanded tree has lg4n+1 levels, i.e., it has height lg4n
Total: O(n2)

猜测解为T(n)=O(n),在归纳推理时发现无法继续下去
T ( n ) c n / 2 c n / 2 1 cn 1

为了证明这一结论,我们修改原有结论,将其加强, T(n)≤cn-b, b>0
Avoiding Pitfalls避免陷阱
• Be careful not to misuse asymptotic notation. For example: -- We can falsely prove T(n) = O(n) by guessing T(n) ≤cn for T(n) = 2T( n / 2 ) + n T(n) ≤ 2c n / 2 + n ≤ cn + n = O(n) Wrong
Idea of master theorem
• Recursion tree
CASE 1: The weight increases geometrically from the root to the leaves. The leaves hold a constant fraction of the total weight.
-- The error is that we haven’t proved the exact form of the inductive hypothesis T(n) ≤ cn

Lecture4

Lecture4

Example –directed graph (continued)
DFS Algorithm (Example – undirected graph)
a
d b e f c g
Example – undirected graph (continued)
a
b e f c g 1/ d
Example – undirected graph (continued)
f[u]=time; //
O (1)
Running time analysis of DFS
Since each vertex is grayed exactly once, for each u, DFS-VISIT(u) is called exactly once. During DFS-VISIT(u) , Adj[u] is scanned exactly once, so T(u)= O(1 + |Adj[u]|). So, T(u) = O(V+E)
Hence, total time T(V, E)= O(V+E)
Problem
Consider: how does the order of vertices in adjacency list influence the result of DFS?
a a c e b d c
b
d
e
Properties of DFS (1)
Proof of Parenthesis Theorem
We begin with the case in which d[u] < d[v]. We consider two subcases, according to whether d[v]< f[u] or not. d[v]< f[u], so v was discovered while u was still gray, which implies that v is a descendant of u. Moreover, since v was discovered more recently than u, all of its outgoing edges are explored, and v is finished, before the search returns to and finishes u. In this case, therefore, the interval [d[v], f[v]] is contained entirely within the interval [d[u], f[u]]. In the other subcase, f[u]< d[v], and by inequality (22.2), thus, d[u] < f[u] < d[v] < f[v], that is, the intervals [d[u], f[u]] and [d[v], f[v]] are disjoint. Because the intervals are disjoint, neither vertex was discovered while the other was gray, and so neither vertex is a descendant of the other. The case in which d[v] < d[u] is similar, with the roles of u and v reversed in the above argument

算法导论第四版范文

算法导论第四版范文

算法导论第四版范文《算法导论第四版》是一本经典的计算机科学教材,全面介绍了算法设计与分析的基本概念、方法和技巧。

本书的内容丰富而深入,涵盖了排序、图算法、动态规划、贪心算法、网络流等多个经典算法领域。

下面将对该书进行详细的介绍和评论。

《算法导论第四版》共分为27章,分别从基本概念、排序和顺序统计量、数据结构、高级设计和分析技术、高级数据结构、图算法、NP-完全性等多个角度对算法进行了深入的讲解。

每章都包含了大量的例子和练习,有助于读者理解和巩固所学的知识。

其中最重要的章节之一是第十章“排序和顺序统计量”。

本章详细介绍了插入排序、归并排序、堆排序、快速排序等经典排序算法,以及顺序统计量中的选择问题和第k小元素问题。

这些排序算法是其他算法设计和分析的基础,通过学习这一章的内容,读者可以深入理解算法的时间复杂度、空间复杂度、稳定性等重要概念。

另一个值得一提的章节是第十一章“散列表”。

散列表是一种非常常见的数据结构,用于实现快速的查找,插入和删除操作。

本章详细介绍了散列函数的设计原则和散列表的冲突解决方法,如链表法和开放寻址法。

这些内容对于理解并设计高效的散列表非常重要。

此外,本书还涵盖了动态规划、贪心算法、网络流等经典算法领域。

这些算法在实际应用中非常重要,在计算机科学和工程领域广泛应用。

通过学习本书,读者可以了解到这些算法的基本原理和应用场景,培养解决实际问题的能力。

总的来说,《算法导论第四版》是一本非常优秀的算法教材。

它系统地介绍了算法设计和分析的基本概念和方法,内容丰富而深入,同时也非常适合初学者。

每章都包含了大量的例子和练习,有助于读者巩固所学的知识。

同时,本书还提供了在线版的课程资源,包括讲义、作业和试题等,可以帮助读者更好地学习和理解算法。

不过,本书的篇幅较长,需要花费较多的时间和精力来学习。

因此,读者需要逐步阅读,理解和消化书中的知识。

另外,由于本书是一本教材,对于一些高级的算法和理论可能没有过多的讲解,需要读者进一步深入学习和研究。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档