北大 算法分析与设计 ss-lecture10-课程总结
算法分析与设计总结

第一章算法概述1.算法:解决问题的一种方法或过程;由若干条指令组成的有穷指令。
2.算法的性质:1)输入:有零个或多个输入2)输出:有至少一个输出3)确定性:每条指令是清晰的、无歧义的4)有限性:每条指令的执行次数和时间都是有限的3.算法与程序的区别➢程序是算法用某种程序设计语言的具体实现➢程序可以不满足算法的有限性4.算法复杂性分析1)算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性2)三种时间复杂性:最坏情况、最好情况、平均情况3)可操作性最好且最有实际价值的是最坏情况下的时间复杂性第二章递归与分支策略1.递归概念:直接或间接调用自身的算法2.递归函数:用函数自身给出定义的函数3.递归要素:边界条件、递归方程4.递归的应用✧汉诺塔问题void Hanuo(int n,int a,int b,int c){if(n==1) return;Hanuo(n-1,a,c,b);move(a,b)Hanuo(n-1,c,b,a);}✧全排列问题void Perm(Type list[],int k,int m){ //产生list[k,m]的所有排列if(k == m){for(int i = 0;I <= m;i++) cout<<list[i];cout<<endl;}else{for(int i = j; i<=m;i++){Swap(list[k],list[i]);Perm(list,k+1;m);Swap(list[k],list[i])}}}5.分治法的基本思想:将一个规模较大的问题分成若干个规模较小的子问题,这些子问题互相独立且与原问题相同。
6.分治法的使用条件:✓问题的规模缩小到一定程度可以容易地解决✓问题可以分解为若干个规模较小的相同问题✓利用原问题分解出的子问题的解可以合并为原问题的解✓各个子问题是相互独立的7.分治法的时间复杂度8.分治法的应用二分搜索1)时间复杂度 O(logn)2)参考算法快速排序1)快排的运行时间与划分是否对称有关2)时间复杂度O(nlogn)合并排序1)基本思想:将待排元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最总将排序好的子集合合并成所要求的排序好的集合。
算法设计与分析实训课程学习总结解决复杂问题的高效算法设计方法

算法设计与分析实训课程学习总结解决复杂问题的高效算法设计方法在算法设计与分析实训课程中,我学到了如何解决复杂问题并设计出高效的算法。
本文将对我在课程学习过程中的体会与收获进行总结,并分享一些关于高效算法设计方法的经验。
一、课程学习体会与反思在算法设计与分析实训课程中,我通过课堂学习、课后实践以及与同学的讨论,逐渐掌握了解决复杂问题的基本方法与技巧。
在实践过程中,我发现以下几点对于算法设计与分析至关重要。
首先,我学会了分析问题的复杂度。
在面对一个复杂问题时,我首先要了解问题的规模与特点,然后通过算法分析来确定问题的复杂度。
这有助于我选择合适的算法以及评估算法的性能。
通过对问题复杂度的深入理解,我能够更加准确地估计算法的执行时间和资源消耗,为解决问题提供依据。
其次,我学会了设计优化的算法。
在解决复杂问题时,我需要根据问题的特性与需求,选择适合的数据结构和算法策略。
比如,对于大规模数据的排序问题,我可以选择使用快速排序算法来提高排序效率;对于图论问题,我可以采用广度优先搜索或深度优先搜索等算法来遍历图结构。
通过深入研究各种算法,我不断完善和优化代码,并提高了算法的执行效率。
第三,我意识到算法的可读性和可维护性同样重要。
一个好的算法应当具备良好的可读性,使得其他人能够轻松理解代码的逻辑。
同时,它也应当具备良好的可维护性,方便日后的修改和扩展。
在课程实践中,我学会了合理拆分代码,注释清晰以及采用模块化设计等方法,提高代码的可读性和可维护性。
二、高效算法设计方法分享在实践中,我总结了一些高效算法设计方法,希望能为大家提供一些参考。
1. 分而治之(Divide and Conquer):将复杂问题划分成若干个子问题,然后逐个解决。
通过将问题分解成更小的子问题,可以降低问题的复杂度,提高算法的效率。
典型的应用包括归并排序和快速排序等。
2. 动态规划(Dynamic Programming):将原问题划分成若干个子问题,然后通过构建一个多阶段决策模型,逐步求解得到最优解。
算法设计与分析重点总结

算法设计与分析重点总结考试题型:选择 2* 10个填空2* 10个简答 3* 4个程序分析填空 4* 4个综合(代码)8* 4个第⼀章基础知识1.算法的定义算法就是解决问题的⽅法,是解决某⼀特定问题的⼀组有穷指令的序列,是完成⼀个任务所需要的具体步骤和⽅法2.算法的特征有限性 ⼀个算法总是在执⾏了有穷步的运算之后终⽌确定性:算法的每种运算必须要有确切的定义,不能有⼆义性。
输⼊:每个算法有0个或多个输⼊。
所谓0个输⼊是指算法本⾝定出了初始条件。
输出:⼀个算法产⽣⼀个或多个输出,这些输出是同输⼊有某种特定关系的量可⾏性:算法中有待实现的运算都是基本的运算,原理上每种运算都能由⼈⽤纸和笔在有限的时间内完成。
(实数的算术运算是“不能⾏”的)3.计算过程只满⾜确定性、能⾏性、输⼊、输出四个特性但不⼀定能终⽌的⼀组规则4.算法的有穷性意味着不是所有的计算机程序都是算法5.算法正确性证明数学归纳法,反例:能够使算法运⾏失败的输⼊实例6.算法的好坏:通过数学⽅法进⾏分析,时间复杂度,空间复杂度,循环次数(归并,快排,贪⼼的复杂度)7.算法运⾏中主要影响运⾏时间的语句是基本操作,即占有最多⽐例的语句8.时间复杂度分析:1)确定⽤来表⽰问题规模的变量;2)确定算法的基本操作;3)写出基本操作执⾏次数的函数(运⾏时间函数);4)如果函数依赖输⼊实例,则分情况考虑:最坏情况、最好情况、平均情况;5)只考虑问题的规模充分⼤时函数的增长率,⽤渐近符号O 、Θ、Ω 、o 来表⽰。
6)常⽤O和Θ9.基本操作算法中的某个初等操作,基本操作的选择,必须反映出该操作随着输⼊规模的增加⽽变化的情况第⼆章递归算法1.递归若⼀个对象部分地包含它⾃⼰, 或⽤它⾃⼰给⾃⼰定义, 则称这个对象是递归的;若⼀个过程直接地或间接地调⽤⾃⼰, 则称这个过程是递归的过程。
分为直接递归和间接递归2.特点(1)将问题分解成为形式上更加简单的⼦问题来进⾏求解,递归过程⼀般通过函数或⼦过程来实现(2)问题求解规模缩⼩,把问题转化为规模缩⼩了的同类问题的⼦问题(3)相邻两次重复之间有紧密的联系(4)是否收敛,即终⽌条件3.使⽤递归的三种情况问题的定义数据结构问题求解的过程4.递归模型递归边界(递归的终⽌条件)和递归体5.过程先将整个问题划分为若⼲个⼦问题,通过分别求解⼦问题,最后获得整个问题的解。
算法设计与分析课程的心得体会

《算法设计与分析》课程的心得体会以最少的成本、最快的速度、最好的质量开发出合适各种各样应用需求的软件,必须遵循软件工程的原则,设计出高效率的程序。
一个高效的程序不仅需要编程技巧,更需要合理的数据组织和清晰高效的算法。
这正是计算机科学领域里数据结构与算法设计所研究的主要内容。
一些著名的计算机科学家认为,算法是一种创造性思维活动,并且处于计算机科学与技术学科的核心。
在计算机软件专业中算法分析与设计是一门非常重要的课程,很多人为它如痴如醉。
很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有程序=算法+数据结构这个公式。
算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养我们养成思考分析问题,解决问题的能力。
如果一个算法有缺陷,或不适合某个问题,执行这个算法将不会解决这个问题。
不同的算法可能用不同的时间、空间或效率来完成同样的任务。
一个算法的优劣可以用空间复杂性和时间复杂度来衡量。
算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。
计算机系统中的操作系统、语言编译系统、数据库管理系统以及各种各样的计算机应用系统中的软件,都必须使用具体的算法来实现。
算法设计与分析是计算机科学与技术的一个核心问题。
因此,学习算法无疑会增强自己的竞争力,提高自己的修为,为自己增彩。
那么,什么是算法呢?算法是指解决问题的方法或过程。
算法满足四个性质,即输入、输出、确定性和有限性。
为了了解算法,这个学期马老师带我们走进了算法的世界。
马老师这学期提出不少实际的问题,以及解决问题的算法。
我在此只说比较记忆深刻的问题,即0-1背包的问题。
0-1背包问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。
问题的名称来源于如何选择最合适的物品放置于给定背包中。
首先,0-1背包问题具有最优子结构性质和子问题重叠性质,适于采用动态规划方法求解。
算法设计期末总结

算法设计期末总结在这个学期的算法设计课程中,我学到了许多关于算法设计和分析的知识和技巧。
通过课程的学习和实践,我对算法设计的原则、常用算法和问题求解的方法有了更深入的理解。
本文将对我在本学期算法设计课程中所学到的内容进行总结,并对未来的学习和发展提出一些展望。
一、算法设计的基本原则在算法设计的过程中,有一些基本原则是需要遵循的。
首先,算法应该是正确的,即能够解决给定的问题。
其次,算法的效率也是非常重要的,因为对于大规模问题,如果算法的时间和空间复杂度太高,将导致运行时间过长或者无法处理。
另外,算法应该是可读性和可维护性好的,便于其他人理解和修改。
最后,算法的稳定性也是需要考虑的,即对于输入的变化,算法的输出应该是一致的。
二、常用的算法和数据结构在算法设计中,有一些常用的算法和数据结构可以帮助解决大部分的问题。
其中,常见的数据结构有线性表、树、图等,而常用的算法有排序、查找、图算法等。
对于不同类型的问题,选择合适的数据结构和算法是非常重要的,可以大大提高算法的效率。
在课程的学习中,我对线性表、树和图等数据结构进行了详细的学习和实践。
线性表是一种最简单的数据结构,常见的有数组和链表。
对于线性表的操作,如插入、删除、查找等,有不同的实现方法和时间复杂度。
树是一种常见的非线性结构,有很多种类型,如二叉树、堆等。
树的遍历和查找是树算法中常见的操作。
图是一种复杂的数据结构,由节点和边组成,有很多种表示方法和算法。
图的遍历和最短路径算法是图算法中重要的内容。
此外,排序算法是算法设计中重要的一部分。
我学习了冒泡排序、插入排序、选择排序、快速排序、归并排序等常见的排序算法,并对它们的思想、实现和时间复杂度有了更深入的理解。
三、问题求解的方法在算法设计中,我们经常需要求解各种类型的问题,如搜索问题、优化问题等。
对于不同类型的问题,有一些常见的求解方法可以参考。
其中,穷举法、贪心法、动态规划法是常见的求解方法。
穷举法是一种简单直观的求解方法,它通过枚举所有可能的解来找到问题的解。
北大 算法分析与设计 ss-lecture10-课程总结

2 22
+
... +
n 2n
)
≈
2
1 2
+
1 22
+
1 23
+
... +
1 2n
=
1 2
1 − (1/ 2)n 1 − 1/ 2Fra bibliotek=1−
1 2n
1 22
+
1 23
+ ...+
1 2n
=
1 (1 − 2
1 2n−1
)
=
1 2
−
1 2n
1 23
+ ...+
1 2n
=
1 22
(1 −
1 2n−
2
)
=
1 22
⇒ p(1 + 2 + ... + 2n−1 ) / 2n−1 = 1 ⇒ p(2n − 1) / 2n−1 = 1 ⇒ p ≈ 1/2
15
算法分析
A(n) =
p⋅1+
p⋅2+ 2
p 22
⋅ 3 + ...+
p 2n−1
⋅n
=
p(1 +
2 2
+
3 22
+
... +
n 2n−1
)
=
2 p( 1 2
+
log n , loglog n, n1/ logn = Θ (1)
14
算法分析
2. 已知 L 是含有n 个元素并且排好序的数组,x在L中. 如果 x 出现在 L中第 i个 ( i=2, 3, …, n) 位置的概率是在前一个位置 概率的一半,当 n 充分大时,估计下述查找算法平均情况下 的时间复杂性 A(n). 只需给出近似值,要求简单求解过程.
算法设计与分析总结

算法设计与分析总结一、算法引论算法:通常人们将算法定义为一个有穷的指令集,这些指令为解决某一特定的任务规定了一个运算序列。
什么是算法?计算机来解决的某一类问题的方法或步骤。
算法是程序的核心。
算法的两个要素:算法是由操作与控制结构两个要素组成。
(1)操作①算术运算:加、减、乘、除等。
②关系运算:大于、大于等于、小于、小于等于、等于、不等于等。
③逻辑运算:与、或、非等。
④数据传送:输入、输出、赋值等。
(2)控制结构各操作之间的执行顺序:顺序结构、选择结构、循环结构,称为算法的三种基本结构一个算法应当具有以下特性:1、输入。
一个算法必须有0个或多个输入。
它们是算法开始运算前给予算法的量。
2、输出。
一个算法应有一个或多个输出,输出量是算法计算的结果。
3、确定性。
算法的每一步都应确切地、无歧义的定义,对于每一种情况,需要执行的动作都应严格的,清晰的规定。
4、有穷性。
一个算法无论在什么情况下都应在执行有穷步后结束。
5、有效性。
算法中每一条运算都必须是足够基本的。
原则上都能够被精确的执行。
6、一个问题可以有多个解决的算法。
程序可以不满足条件4。
计算机程序是算法的实例,是算法采用编程语言的具体实现。
算法的分类:(1)数值计算算法(2)非数值计算算法算法的表示:1、自然语言2、传统流程图3、N-S流程图4、伪代码5、计算机语言计算机程序设计中有两个核心目标:1、算法必须是易于理解,编码和调试的2、设计的算法能够最有效的使用计算机的资源。
目标1是软件工程的概念 ;目标2是数据结构和算法设计的概念 ;判断一个算法的优劣,主要有以下标准:1、正确性:要求算法能够正确的执行预先规定的功能和性能要求。
2、可使用性:要求算法能够很方便的使用。
3、可读性:算法应当是可读的,这是理解、测试和修改算法的需要。
4、效率:算法的效率主要指算法执行时计算机资源的消耗,包括存储和运行时间的开销。
5、健壮性:要求在算法中对输入参数、打开文件、读文件记录、子程序调用状态进行自动检错、报错并通过与用户对话来纠错的功能,也叫作容错性或例外处理。
高校计算机专业算法设计与分析课程知识点梳理

高校计算机专业算法设计与分析课程知识点梳理在高校计算机专业中,算法设计与分析是一门重要的课程,它涉及到计算机领域中各种算法的设计与分析方法。
本文将对这门课程的知识点进行梳理,以帮助读者更好地理解和掌握相关内容。
一、算法的基本概念与复杂度分析1.1 算法的概念与特性算法的定义与特性,包括输入、输出、确定性、可行性以及有穷性等。
同时介绍算法的基本表示方法,如伪代码和流程图。
1.2 算法的效率与复杂度介绍算法的效率概念,包括时间复杂度和空间复杂度。
讲解如何通过渐进分析来评估算法的复杂度,并介绍常见的渐进符号。
二、算法设计与分析方法2.1 穷举法与递归法介绍穷举法与递归法的基本思想和应用场景。
着重讲解递归的思想与递归函数的编写方法,并引入递归算法的时间复杂度计算方法。
2.2 分治法与动态规划介绍分治法和动态规划的思想和应用场景。
解释如何将问题划分为子问题,并通过合并子问题的解来得到原始问题的解。
同时介绍动态规划的基本原理和递推关系的建立。
2.3 贪心算法与回溯法介绍贪心算法和回溯法的基本思想和解决方法。
分析贪心算法的优缺点,并通过实例详细说明回溯法的应用。
三、常见算法的设计与分析3.1 排序算法介绍常见的排序算法,包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。
讲解每种排序算法的基本思想、实现过程和时间复杂度分析。
3.2 查找算法介绍常见的查找算法,包括顺序查找、二分查找和哈希查找等。
分析每种查找算法的优劣和适用场景,并讲解它们的实现原理和时间复杂度。
3.3 图算法介绍图的基本概念和表示方法,然后讲解常见的图算法,包括深度优先搜索算法和广度优先搜索算法。
给出算法的伪代码和流程图,并分析它们的时间复杂度。
四、高级算法与数据结构4.1 贪心算法深入介绍贪心算法的概念和特点,以及如何设计贪心算法解决实际问题。
通过实例详细说明贪心算法的应用,并分析其正确性和适用性。
4.2 动态规划算法进一步讲解动态规划算法的原理和实现方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
−
1 2n
...
16
递推方程求解
3. 估计T1(n), T2(n)的阶, 其中
⎧⎪⎨T1
(
n)
=
3T1
(
n 2
)
+
n
log
n
⎪⎩T1(1) = 1
⎪⎨⎧T2 (n)
=
T2 (n
−
1)
+
1 n
⎪⎩T2 (1) = 1
给出简要求解过程.
过程略
T1(n) = Θ (nlog3 ) T2 (n) = Θ (logn)
分治策略
6. 在n(n≥3)枚硬币中有一枚重量不合格的硬币(重量过轻 或者过重),如果只有一架天平可以用来称重,设计一个算法 找出这枚不合格的硬币,使得称重的次数最少?
(1) 用文字说明算法的主要步骤. (2) 写出伪码,用到的变量要进行说明,对主要步骤要给出 注释. (3) 每称1次就作为1次基本运算,分析算法的最坏情况下的 时间复杂度.
算法B:对S 排序,并输出S 中最大的 i 个数。
(1) 分析A,B 两个算法在最坏情况下的时间复杂性。 (2) 试设计一个最坏情况下时间复杂性的阶更低的算法。要求
用文字说明算法的设计思想;简要给出算法的伪码描述 (可以调用学过的算法,对于使用的变量或过程要给与说 明,不要求写程序);分析算法最坏情况下的时间复杂性.
设x1,x2,...,xn是0或1,xi=1当且仅当下载请求i被批准. 令Fk(y) 表示考虑前k个申请,带宽限制为y时的最大带宽使用量,则
Fk(y)=max{Fk-1(y), Fk-1(y-ak)+ak}, F1(y)=a1 顺序计算k=1,2,...n,对给定的k令y=1,2,...,K,依次确定各个子 问题的Fk(y)值和xk的值. 算法时间复杂度为O(nK).
17
递推方程求解
4. 设递推方程 T (n) = 7T (n / 2) + n2 给出了算法A在最坏情况下的时间复杂度函数,算法B在最 坏情况下的时间复杂度函数W(n)满足递推方程
W (n) = aW (n / 4) + n2
试确定最大的正整数a使得W(n)的阶低于T(n)的阶?
解:T(n)=Θ(nlog7成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中的硬币与拿走的硬币比较. 如果不等,则是不
W (n) = Θ (nlog4 a )
要使 log 4 a < log 7
即 loga<2log7,即a<49, 因此最大的正整数为48.
18
分治策略
5. 给定n个不同数的集合S和正整数i, i<n1/2, 求S 中最大的 i个 数,并且按照从大到小次序顺序输出。有下述算法:
算法A:调用 i 次找最大算法 findmax , 每调用一次从S中 删除一个最大的数。
合格硬币.
有下述递推方程: T (n) ≤ T (2n / 3) + O(1) T (1) = 0
22
动态规划
7. 设P是一台Internet上的Web服务器。 T={1, 2, … , n}是n个 下载请求的集合,∀i∈T,ai∈Z+表示下载请求i所申请的带宽. 已知服务器的最大带宽是正整数K. 我们的目标是使带宽得到 最大限度的利用,即确定T的一个子集S,使得 ,且 的值达到 最小. 设计一个算法求解服务器下载问题,用文字说明算法的 主要设计思想和步骤,给出最坏情况下的时间复杂度.
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
=
1 (1 − 2
1 2n−1
)
=
1 2
−
1 2n
1 23
+ ...+
1 2n
=
1 22
(1 −
1 2n−
2
)
=
1 22
23
贪心法
8. 有n个进程p1,p2,…,pn. 对于i=1,2,…,n,进程i的开始时间为 s[i], 截止时间为d[i]. 可以通过监测程序Test来测试正在运 行的进程。Test每次测试的时间很短,可以忽略不计. 换 句话说,如果Test在时刻t运行,那么它将对满足s[i]≤ t ≤ d[i]的所有进程pi同时取得测试数据. 假设最早运行的进程 的开始时刻是0,问:如何安排测试时刻,使得对每个进 程至少测试一次,且Test测试的次数达到最少?说明你的 算法的主要设计思想,给出伪码,证明算法的正确性,并 分析算法最坏情况下的时间复杂度. (贪心法,见作业)
log(n!), log2 n, 1, n!, n2n , n1/ logn , (3 / 2)n , log n , (log n)logn , 22n , nloglogn , n3 ,
log log n, n log n, n, 2logn , log n
22n , n!, n2n , (3 / 2)n , (log n)logn = Θ (nloglogn ), n3 , log(n!) = Θ (nlogn), n = 2logn , log2 n, log n,
⇒ p(1 + 2 + ... + 2n−1 ) / 2n−1 = 1 ⇒ p(2n − 1) / 2n−1 = 1 ⇒ p ≈ 1/2
15
算法分析
A(n) =
p⋅1+
p⋅2+ 2
p 22
⋅ 3 + ...+
p 2n−1
⋅n
=
p(1 +
2 2
+
3 22
+
... +
n 2n−1
)
=
2 p( 1 2
+
11
回溯和分支限界
• 适用条件
– 搜索问题、多步判断、多米诺条件
• 解向量的确定 • 分支条件的确定**
– 约束条件 – 代价函数的确定(了解)
• 搜索树节点数的估计
– Monte Carlo方法
• 典型问题
12
算法分析技术
• 评价算法的因素
– 正确性、工作量、占用空间、简单性、最优性
• 算法的两种复杂度
解: (1)
TA (n) = Θ (in) = O(n3/ 2 )
TB (n) = Θ (nlog n)
19
(2) 关于算法C 的说明:设 k 表示第 i 大元素在排好序数组的 下标,元素记为 x. 用选择算法确定这个元素 x , 用 x 划分 数组 S, 将比 x 大的放到后边, 排序 S 中从 k 到 n 的元素, 倒序输出.
⎩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
算法设计技术
• 分治策略 • 动态规划 • 贪心法 • 回溯和分支限界
8
分治策略
• 分治策略的适用条件 • 子问题的划分**
– 均衡划分原则 – 子问题类型与原问题相同
• 递归算法分析——递推方程** • 减少子问题的技术(了解) • 典型问题
9
动态规划
• 适用条件
– 优化问题、多步判断、优化原则、子问题重叠
• 关于目标函数的递推方程** • 自底向上的计算 • 表格存储 • 解的追踪 • 典型问题
10
贪心法
• 适用条件
– 组合优化、多步判断、贪心选择性质
• 局部优化策略的确定 • 贪心选择性质的证明** • 近似解的估计(了解) • 典型问题
25
(1) G1与G2的矩阵是M1=(aij)和M2=(bij). 算法
• 无限等比序列的收敛值
a1 (1
+
q
+
q2
+
...)
=
a1 1−q
,
q<1
• 调和级数的估计值
1 + 1 + ... + 1 + ... = O(log n)
2
n
• 对数函数和的估计值
log1 + log2 + ... + logn = O(nlog n)
5
主定理
设a ≥ 1,b > 1为常数,f (n)为函数, T (n)为非负整数 T (n) = aT (n / b) + f (n),
24
问题的下界
9. 设G1=(V1,E2),G2=(V2,E2)是两个简单图,其中V1=V2. 假设 G1和G2的输入用邻接矩阵表示,即如果{vi,vj}是图的边,那么 它的邻接矩阵M的第 i 行第 j列的元素 rij=1;否则 rij=0. (1) 设输入规模是图中的顶点数n,设计算法判定G1是否为G2 的补图. 说明设计思想,并给出最坏情况下的时间复杂度. (2)对于求解这个问题的所有算法,给出一个尽可能紧的时间 复杂度的下界,并证明你的结果.
课程总结
考试范围