引用
求解算法的时间复杂度的具体步骤是:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
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)
分享到:
相关推荐
通常情况下,我们可以使用循环不变量的方法来计算频度,然后根据频度计算算法的时间复杂度。 例如,在例 2.1 中,我们可以看到,语句 1 的频度为 1,语句 2 的频度为 n,语句 3 的频度为 n^2,则算法的时间复杂度为...
算法时间复杂度的计算方法 时间复杂度是衡量算法性能的重要指标,它描述了算法执行时间与问题规模之间的关系。时间复杂度是算法的渐近性质,它定义了算法的执行时间与问题规模之间的关系。 时间复杂度的计算方法...
### 算法复杂度计算方法 #### 一、时间复杂度 时间复杂度是用来评估算法执行速度的一个重要指标,通常用于衡量算法随输入数据规模(通常标记为n)的增长趋势。 ##### 1. 时间频度 - **定义**:算法执行过程中基本...
时间复杂度是用来表示一个程序(或算法)执行时间与输入数据量之间关系的一种量度方法。它是通过分析算法执行过程中基本操作的次数来评估算法效率的一个标准。时间复杂度通常用大O符号表示,如O(1)、O(n)、O(n^2)等...
时间复杂度的几种计算方法 时间复杂度是算法优劣的重要指标,是数据结构的重要理论基础,是学习和教学过程中贯穿始终的主要线索。...理解时间复杂度的概念和计算方法,对算法的优化和评估至关重要。
本文介绍的`KC`函数即为一种基于MATLAB实现的复杂度计算方法。 3. **信号处理与特征提取**:通过计算信号的复杂度,我们可以更有效地进行信号处理和特征提取工作。这在诸如生物医学信号分析、通信系统设计等领域...
在信息学奥赛中,算法的时间复杂度和空间复杂度是衡量算法效率的重要指标,尤其对于青少年编程者来说,理解并掌握这两点至关重要。算法效率分析主要包括时间效率和空间效率,它们分别对应于时间复杂度和空间复杂度的...
算法复杂度是计算机科学中一个非常重要的概念,它指的是一个算法在解决问题时所需要的计算资源和时间的增长趋势。算法复杂度是衡量一个算法优劣的重要指标。 在这里,我们将从算法复杂度的概念开始,讨论算法复杂度...
在《算法的时间复杂度分析》这篇文章中,作者程世辉等人详细探讨了算法时间复杂度的相关概念及计算方法。 #### 二、算法分析的基本理论 ##### 2.1 评价算法好坏的标准 对于同一问题的不同算法,评价其优劣的标准...
接下来,我们来计算整个算法的时间复杂度。排序每个段需要O(n/sqrt(n))的时间,因为总共有n个元素。然后,进行sqrt(n)-1次合并,每次合并的时间复杂度是O(sqrt(n))。所以,总的计算时间为: O(n/sqrt(n)) + sqrt(n)...
算法设计与分析——时间复杂度 算法设计与分析是计算机科学中的一门重要课程,旨在研究和分析...通过本实验,我们可以看到快速排序的时间复杂度最低,同时也了解了算法设计与分析的基本概念和时间复杂度的计算方法。
计算复杂度是算法分析中一个重要概念,它衡量了算法执行的时间或空间复杂度。本文将详细介绍算法分析和计算复杂度的概念,以及相关的知识点。 一、算法分析的重要性 算法分析是计算机科学中的一种重要技术,它可以...
最后,时间复杂度计算方法需要根据具体的算法和问题来灵活应用。通过了解不同算法的复杂度,可以帮助我们更有效地进行问题解决,并在实际应用中优化代码性能,从而提升软件的运行效率。在实际编程中,开发者应尽可能...
本篇文章将详细讲解基于灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)的纹理复杂度计算方法,以及其在图像水印中的应用。 灰度共生矩阵是一种统计工具,用于描述图像中像素之间的相对位置关系。在二维...
本文主要介绍C++中算法的时间复杂度与空间复杂度的计算方法,详细阐述了复杂度分析中的一些专业术语和概念,并给出了一些常见的时间复杂度的示例和如何进行算法复杂度的判断和改进。 时间复杂度是衡量算法运行时间...
算法复杂度是衡量一个算法效率的重要指标,它主要关注在最坏、最好和平均情况下,算法执行时间或空间需求的增长趋势。理解算法复杂度对于优化程序性能和选择合适的算法至关重要。初学者在学习这一概念时,应从以下几...
#### 二、时间复杂度的几种计算方法 ##### 2.1 直接计算法 直接计算法适用于那些可以直接计算出语句频度的算法。首先,需要确定每个语句的频度,然后计算总的执行时间 T(n),最后求出 T(n) 的数量级。例如,计算两...
递推关系式则是另一类描述算法复杂度的形式,它通过上一步或几步的状态来描述当前状态。解决递推关系式的一个有效工具依然是主定理,通过将递推式转换为对应的递归式,我们可以利用主定理找到其解。 最后,算法设计...
时间复杂度是指执行算法所需要的计算工作量,而空间复杂度则是指执行这个算法所需要的内存空间。 稳定排序和非稳定排序是排序算法的一种分类。稳定排序是指在排序过程中,所有相等的数经过某种排序方法后,仍能保持...