求解算法的时间复杂度的具体步骤是:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n+n2)=Ο(n2)。
常见的算法时间复杂度由小到大依次为:
Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)称为多项式时间,而Ο(2n)和Ο(n!)称为指数时间。计算机科学家普遍认为前者是有效算法,把这类问题称为P类问题,而把后者称为NP问题。
这只能基本的计算时间复杂度,具体的运行还会与硬件有关。
上面的这部分内容是比较可靠的,理解的时候,可以参看着下面的这部分内容。
在计算算法时间复杂度时有以下几个简单的程序分析法则:
1.对于一些简单的输入输出语句或赋值语句,近似认为需要O(1)时间
2.对于顺序结构,需要依次执行一系列语句所用的时间可采用大O下"求和法则"
求和法则:是指若算法的2个部分时间复杂度分别为 T1(n)=O(f(n))和 T2(n)=O(g(n)),则 T1(n)+T2(n)=O(max(f(n), g(n)))
特别地,若T1(m)=O(f(m)), T2(n)=O(g(n)),则 T1(m)+T2(n)=O(f(m) + g(n))
3.对于选择结构,如if语句,它的主要时间耗费是在执行then字句或else字句所用的时间,需注意的是检验条件也需要O(1)时间
4.对于循环结构,循环语句的运行时间主要体现在多次迭代中执行循环体以及检验循环条件的时间耗费,一般可用大O下"乘法法则"
乘法法则: 是指若算法的2个部分时间复杂度分别为 T1(n)=O(f(n))和 T2(n)=O(g(n)),则 T1*T2=O(f(n)*g(n))
5.对于复杂的算法,可以将它分成几个容易估算的部分,然后利用求和法则和乘法法则技术整个算法的时间复杂度
另外还有以下2个运算法则:
(1) 若g(n)=O(f(n)),则O(f(n))+ O(g(n))= O(f(n))
(2) O(Cf(n)) = O(f(n)),其中C是一个正常数
可以用以上法则对下面程序段进行简单分析
①for (i=0; i<n; i++)
② for (j=0; j<n; j++)
{
③ c[i][j] = 0;
④ for (k=0; k<n; k++)
⑤ c[i][j]= c[i][j]+ a[i][k]* b[k][j];/ * T5(n) = O(1) */
}
第①条与②③④⑤是循环嵌套T1(n)*T2(n)* (T3(n)+ T4(n)* T5(n))= O(n*n*n)即为整个算法的时间复杂度
O(1)<O(log2n)<O(n)<O(n log2 n)<O(n^2)<O(n^3)<O(2^n)
转自http://blog.sina.com.cn/s/blog_50ce2abb0100vhem.html
可以看看这个:http://blog.csdn.net/iluna/article/details/4159485
分享到:
相关推荐
《平均计算时间复杂度优化的动态粒子群优化算法》 粒子群优化(PSO,Particle Swarm Optimization)算法是一种基于群体智能的优化技术,广泛应用于各种领域,特别是对实时性要求较高的宽带数字信号处理。然而,传统...
时间复杂度的几种计算方法 时间复杂度是算法优劣的重要指标,是数据结构的重要理论基础,是学习和教学过程中贯穿始终的主要线索。该知识点是数据结构的重要组成部分,对算法的时间性能进行评估和分析。时间复杂度的...
在实际的计算中,还会遇到不同结构的算法,需要根据不同的结构特点来计算时间复杂度。主要包括顺序结构、选择结构和循环结构等,对于这些结构,有不同的计算规则: 1. 简单的输入输出语句或赋值语句,它们通常被...
算法设计与分析——时间复杂度 算法设计与分析是计算机科学中的一门重要课程,旨在研究和分析...通过本实验,我们可以看到快速排序的时间复杂度最低,同时也了解了算法设计与分析的基本概念和时间复杂度的计算方法。
计算时间复杂度主要关注算法中最基本的操作(如比较、赋值等),并忽略非基本操作和常数项的影响。具体步骤包括: - 确定基本操作:找出算法中重复执行次数最多的操作。 - 计算基本操作的执行次数:分析算法流程,...
时间复杂度 时间复杂度是计算机科学中的一种概念,用于描述算法的运行时间。...因此,时间复杂度是评估算法效率的重要指标,通过计算时间复杂度,可以知道算法的执行时间,并且可以对算法进行优化,以提高算法的效率。
在算法设计中,准确计算时间复杂度对于评估算法的效率至关重要。《算法的时间复杂度分析》中提出了一些计算时间复杂度的方法: ##### 4.1 直接计算法 直接计算法适用于可以直接计算出语句频度的情况。例如,求两个...
在计算时间复杂度时,需要注意以下几点: * 忽略常量、低次幂和最高次幂的系数 * 只考虑最坏的情况 * 求极限时,利用 1/n 趋向于 0 的性质 简化的计算步骤是: 1. 找到执行次数最多的语句 2. 计算语句执行次数的...
总之,理解并能够准确计算时间复杂度对于优化算法和提升程序效率至关重要。在面试和工作中,能够熟练分析算法的时间复杂度是评价技术能力的一个重要方面。通过掌握大O表示法和相关规则,可以更好地评估和比较不同...
"平衡二叉树时间复杂度计算1" 在计算机科学中,平衡二叉树是一种特殊的二叉树数据结构,它的时间复杂度计算是非常重要的。下面我们将详细介绍平衡二叉树的时间复杂度计算。 首先,让我们了解什么是平衡二叉树。...
总的来说,这些题目涉及到的基础知识点包括稳定排序、时间复杂度计算、主定理的应用以及斐波那契数列的特性。通过解答这些题目,参赛者可以深入理解算法的时间复杂度分析,并提升他们的算法设计能力。在实际编程竞赛...
计算时间复杂度时,我们需要关注算法中的基本操作,这些操作会随着输入大小的增加而重复执行。例如,如果一个算法包含一个循环,每次循环都执行固定数量的操作,那么我们首先计算循环的次数,然后乘以循环内部操作的...
本资源“时间复杂度计算练习.zip”提供了深入理解和掌握时间复杂度计算的实践练习,包括一篇详细讲解的时间复杂度计算练习.docx文档以及一份实现源码的时间复杂度计算练习.cpp。 首先,我们来深入了解时间复杂度。...
总之,理解并计算时间复杂度对于优化算法和设计高效的数据结构至关重要。通过分析时间复杂度,我们可以预测算法在处理大量数据时的行为,并据此做出决策,以提高程序的运行效率。在实际编程中,应尽可能选择时间...
此外,自动化计算时间复杂度的方法还需要解决实际编程中的一些实际问题,比如循环变量依赖、递归调用、条件分支、函数内联展开、以及数据结构的动态分配等。因此,算法的实现和验证是一个相对复杂的过程,需要充分...
在“时间复杂度初体验.ppt”中,可能会详细讲解这些概念,通过实例和图表帮助学习者直观地理解各种时间复杂度的表现,并教授如何分析和计算时间复杂度。此外,还可能涉及如何在实际编程中应用时间复杂度理论,以提升...