上次写博客,已经是半个月之前了。我也不知道我这段日子在干嘛了,没有具体的目标与计划,比较随性,看了几本原本束之高阁的书,包括那本室友推荐,买来后一直搁在床头,不少著名的书里提到的《怎样解题》,以及那本曾经感觉不能理解的《孤独及其所创造的》,还看了一部《中国近代史》,因为还未买到港版,至今还在看小小的手机屏幕。昨夜清风习习,凉意袭人,没有负担,没有烦恼,可以看书看到自然睡,睡觉睡到自然醒,何其的幸福呵。然后又想起被搁置很久的《算法引论》,于是今天又开始阅读了。
第三章《算法分析》主要用于计算算法的复杂度,记得以前《算法导论》也有仔细介绍过,不过没有仔细去了解。关于上界、下界等标记也没有仔细去理解。今天算是认真了一回吧。
首先介绍一下这三个符号:Ο、Ω、Θ
如果存在常数项c和N,使得对于所有的n>=N,有g(n)<=c f(n),则称函数g(n)相对于另一函数f(n)是Ο(f(n)),换句话说,对于足够大的n,函数g(n)不超过函数f(n)的一个固定倍数。Ο是函数的上界。
如果存在常数项c和N,使得对于所有的n>=N,在输入规模为n是解决问题的步数T(n)至少为c g(n),则我们说T(n)=Ω(g(n))。
如果一个特定函数f(n)同时满足f(n)=Ο(g(n))和f(n)=Ω(g(n)),则称f(n)=Θ(g(n))。
符号Ο、Ω、Θ分别大致对应的是"<=",">="和"="。
另外,有如下定理:
1. 对于所有常数c>0和a>1,以及所有单调递增函数f(n),有(f(n))^c = Ο(a^f(n))
换句话说,一个指数函数要比一个多项式函数增长得快。
2. 如果f(n)=Ο(s(n))并且g(n)=Ο(r(n)),则f(n)+g(n)=Ο(s(n)+r(n))
3. 如果f(n)=Ο(s(n))并且g(n)=Ο(r(n)),则f(n).g(n)=Ο(s(n).r(n))
关于算法的复杂度分析,有两种情况:
(1)如果算法由几个部分组成,则它的复杂度通常是这些部分的复杂度的总和。算法可能包含一个执行多次的循环,每一次都有不同的复杂度。这涉及到求和。
(2)分治算法常常把一个大规模的输入递归地分成小规模输入,最后再从小到大整合起来,其算法的复杂度常常具有递推关系。另外,一些算法本身也是递推的,如Fibonacci数列。
熟悉这些将对我们分析算法的复杂度有很大的帮助。
1. 我们知道sum(i)=n(n+1)/2,现在让我们求和:sum(i^2)
2. 分治算法常常具有如下的算法运行时间表达式:
该式的含义为,算法将问题分为a个子问题,每个子问题的规模是原始问题的1/b,用于合并各个子问题的算法运行时间是cn^k。a, b, c, k均为常数。
尝试着把它拆开,假设当n=b^m,且T(1)=c,有:
这是一个简单的几何级数,分三种情况,分别取决于(b^k/a)是大于1, 等于1还是小于1.
情况1:a>b^k
此时,当m趋向于无穷大时,级数收敛于常数。因此T(n)=Ο(a^m),而m=log_b(n),因此有
情况2:a=b^k
情况3:a<b^k
在此情况下,几何级数的因子大于1,为了计算几何级数的和,可以使用标准表达式。用F(F是一个常数)来表示b^k/a,由于级数的第一个元素是a^m,所以有:
再来看一下著名的Fibonacci数列:
F(n)=F(n-1)+F(n-2), F(1)=1, F(2)=2
一个合理的猜测是F(n)每次都被加倍,即它大约为2^n,尝试F(n)=c2^n,则有:
显然c2^n太大了,并且c在等式中并不起作用。我们尝试使用一个小一点的底数a,令F(n)=a^n,则有:
还有一种递推关系,它涉及全部历史,例如:
- 大小: 25.5 KB
- 大小: 2.4 KB
- 大小: 22.7 KB
- 大小: 3.6 KB
- 大小: 5.6 KB
- 大小: 6 KB
- 大小: 2 KB
- 大小: 15.5 KB
- 大小: 66 KB
分享到:
相关推荐
计算机算法引论——设计与分析技术.本书讲述计算机算法的各种设计策略,包括分治技术、贪心技术、动态规划技术回溯和分支限界技术等。介绍算法分析技术、算法的时间和空间复杂度分析方法;讨论各类经典的应用问题...
《算法引论》是一本深入探讨算法理论与实践的书籍,它涵盖了计算机科学中的核心算法,为学习者提供了丰富的知识和理解。算法是计算机科学的灵魂,是解决复杂问题的关键工具,而《算法引论》正是引导读者步入这个领域...
全书共分12章,是按照领域进行分类的:第1章到第4章为介绍性内容,涉及数学归纳法、算法分析、数据结构等内容;第5章提出了与归纳证明进行类比的算法设计思想;第6章到第9章分别给出了几个领域的算法,如序列和集合...
全书共分12章,是按照领域进行分类的:第1章到第4章为介绍性内容,涉及数学归纳法、算法分析、数据结构等内容;第5章提出了与归纳证明进行类比的算法设计思想;第6章到第9章分别给出了几个领域的算法,如序列和集合...
《算法引论:一种创造性方法》是一本深入探讨算法设计与分析的著作,旨在通过创新性的教学方式,引领读者理解并掌握算法的核心概念。在学习算法的过程中,创造性思维的培养至关重要,因为算法的设计往往需要跳出常规...
《计算机算法引论:设计与分析技术》是一本面向计算机、软件工程和网络工程专业及相关专业的本科生(高年级)和研究生教材,根据国内外计算机技术的最新发展,讲述计算机算法的各种设计策略,包括分治技术、贪心技术、...
《算法引论:一种创造性方法》是国际算法大师乌迪.曼博(Udi Manber)博士撰写的一本享有盛誉的著作。全书共分12章,是按照领域进行分类的:第1章到第4章为介绍性内容,涉及数学归纳法、算法分析、数据结构等内容;第...
《算法引论:一种创造性方法》是一本深入探讨算法设计与分析的经典著作。这本书的核心目标是教会读者如何创造性地思考和构建算法,从而解决实际问题。算法是计算机科学的基石,理解和掌握算法对于任何IT从业者来说都...
《算法引论——一种创造性方法》是一本深入探讨算法设计与分析的经典著作。该书旨在引导读者理解算法的本质,培养解决复杂问题的创造性思维。在IT行业中,算法是解决问题、优化程序性能的关键工具,尤其在大数据处理...
到第4意为介绍性内容,涉及数学归纳法、算法分析、数据结构等内容;第5章提出了与归纳证明进行类比的 算法设计思想;第6拿到第9宣言分别给出了4个领域的算法,如序列和集合的算法、图算法、几何算法、代数 和数值...
算法的理论处于计算机科学的核心地位,同时,它与计算机应用的许多实际问题有着 直接的关系,例如,网络技术、多媒体技术、汁算机安全技术等,其最关键的部分都是算法 ...以及人们如何是进行计算机算法的设计与分析的c
算法分析与及设计教程习题解答 第 1 章 算法引论 第 2 章 递归算法与分治算法 第 3 章 贪心算法 第 4 章 动态规划算法 第 5 章 回溯算法 第6章 随机化算法 第7章 图论与网络流问题
全书共分12章:第1章到第4章为介绍性内容,涉及数学归纳法、算法分析、数据结构等内容;第5章提出了与归纳证明进行类比的算法设计思想;第6章到第9章分别给出了4个领域的算法,如序列和集合的算法、图算法、几何算法...
算法分析与设计 算法分析与设计是计算机科学中的一个重要领域,旨在研究和开发高效、可靠、可扩展的算法,以解决复杂的计算问题。本资源摘要信息将对算法分析与设计的基本概念、方法和技术进行概述,并对相关的知识...
在算法分析方面,书中的重点将放在时间复杂度和空间复杂度上,这是评估算法效率的重要指标。通过对算法运行时间的估算,读者可以理解如何优化算法,使其在处理大规模数据时保持高效。此外,书中还会涉及渐进分析、大...
总结来说,算法引论及简单算法的学习涵盖了算法设计的基础,特别是算法分析的关键概念,包括时间复杂性和空间复杂性,以及如何通过理论和实践相结合的方式来评估和优化算法。这些知识对于理解和编写高效代码至关重要...
【算法引论剖析】是关于计算机科学中核心概念——算法的深入讲解。算法是一系列解决问题的清晰指令,广泛应用于各种领域,从简单的路径规划到复杂的DNA测序问题。本资料详细介绍了算法的基础知识,包括其定义、表达...
《算法引论》是计算机科学领域的一门基础课程,它主要探讨如何设计和分析解决特定问题的算法。算法是程序设计的核心,是解决问题的精确步骤序列。本篇内容主要介绍了算法的基本概念、重要特性和描述方法。 首先,...