如何计算一个算法的判断时间复杂度度

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
算法的时间复杂度是指(c)
下载积分:1000
内容提示:算法的时间复杂度是指(c)
文档格式:DOC|
浏览次数:304|
上传日期: 12:20:02|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
算法的时间复杂度是指(c)
官方公共微信请教Dijkstra算法的时间复杂度?急!!_科学_百科问答
请教Dijkstra算法的时间复杂度?急!!
提问者:qu07an
我们可以用大O符号将Dijkstra算法的运行时间表示为边数m和顶点数n的函数。 Dijkstra算法最简单的实现方法是用一个链表或者数组来存储所有顶点的集合Q,所以搜索Q中最小元素的运算(Extract-Min(Q))只需要线性搜索Q中的所有元素。这样的话算法的运行时间是O(n2)。 对于边数少于n2稀疏图来说,我们可以用邻接表来更有效的实现Dijkstra算法。同时需要将一个二叉堆或者斐波纳契堆用作优先队列来寻找最小的顶点(Extract-Min)。当用到二叉堆的时候,算法所需的时间为O((m+n)log n),斐波纳契堆能稍微提高一些性能,让算法运行时间达到O(m + n log n)。相关问题和算法 在Dijkstra算法的基础上作一些改动,可以扩展其功能。例如,有时希望在求得最短路径的基础上再列出一些次短的路径。为此,可先在原图上计算出最短路径,然后从图中删去该路径中的某一条边,在余下的子图中重新计算最短路径。对于原最短路径中的每一条边,均可求得一条删去该边后子图的最短路径,这些路径经排序后即为原图的一系列次短路径。 OSPF(open shortest path first, 开放最短路径优先)算法是Dijkstra算法在网络路由中的一个具体实现。 与Dijkstra算法不同,Bellman-Ford算法可用于具有负花费边的图,只要图中不存在总花费为负值且从源点 s 可达的环路(如果有这样的环路,则最短路径不存在,因为沿环路循环多次即可无限制的降低总花费)。 与最短路径问题有关的一个问题是旅行商问题(traveling salesman problem),它要求找出通过所有顶点恰好一次且最终回到源点的最短路径。该问题是NP难的;换言之,与最短路径问题不同,旅行商问题不太可能具有多项式时间算法。 如果有已知信息可用来估计某一点到目标点的距离,则可改用A*算法,以减小最短路径的搜索范围。
回答者:retr
Mail: Copyright by ;All rights reserved.数据结构与算法系列之时间复杂度 - 简书
数据结构与算法系列之时间复杂度
上一篇《数据结构和算法》中我介绍了数据结构的基本概念,也介绍了数据结构一般可以分为逻辑结构和物理结构。逻辑结构分为集合结构、线性结构、树形结构和图形结构。物理结构分为顺序存储结构和链式存储结构。并且也介绍了这些结构的特点。然后,又介绍了算法的概念和算法的5个基本特性,分别是输入、输出、有穷性、确定性和可行性。最后说阐述了一个好的算法需要遵守正确性、可读性、健壮性、时间效率高和存储量低。其实,实现效率和存储量就是时间复杂度和空间复杂度。本篇我们就围绕这两个"复杂度"展开说明。在真正的开发中,时间复杂度尤为重要,空间复杂度我们不做太多说明。
时间复杂度
时间复杂度和空间复杂度是算法效率的度量方法。也就是说,一个好的算法取决于它的时间复杂度和空间复杂度。函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n&N,f(n)总是比g(n)大。那么,我们说f(n)的增长渐近快于g(n)。
翻译过来就是:如果存在一个临界值,使得f(n)&g(n)永远成立,那么我们就认为"f(n)的增长渐近快于g(n)"。这里我拿3个函数的增长曲线来说明问题。如下图:函数一:X = 3n 注释:3乘以n函数二:Y = 2n^2 注释:n的平方乘以2函数三:Z = 2n^2 + 3n 注释:n的平方乘以2 + 3乘以n
当n=1时,Y & X & Z.当n=2时,X & Y & Z.所以,存在一个值,这个值位于1和2之间,使得X & Y & Z永远成立。我们就称Y的渐进增长快于X,Z的渐进增长快于Y,当然,根据传递性规则,Z的渐进增长也快于X。
算法时间复杂度的定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
时间复杂度计算方法
1.用常数1取代运行时间中的所有加法常数。2.在修改后的运行次数函数中,只保留最高阶项。3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。最后,得到的最后结果就是时间复杂度。
常见的时间复杂度
按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O( log n ),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。也就是:常用的时间复杂度所耗费的时间从小到大依次是:O(1) & O(logn) & (n) & O(nlogn) & O(n^2) & O(n^3) & O(2^n) & O(n!) & O(n^n)
时间复杂度顺序表.gif
int n = 0;
printf(“oneSong”);
printf(“oneSong”);
printf(“oneSong”);
printf(“oneSong”);
printf(“oneSong”);
printf(“oneSong”);
printf(“oneSong”);
printf(“oneSong”);
printf(“oneSong”);
上面这段代码的时间复杂度是O(1)。因为,按照时间复杂度的定义来说,n和问题的规模没有关系。当然,按照时间复杂度计算方法第一条也可以得出结果为O(1)。
// 线性阶int i ,
n = 10086, sum = 0;
for( i=0; i & i++ )
sum = sum +
上面这段代码的时间复杂度是O(n),因为问题规模会随着n的增长而变得越来越大,并且这种增长是线性的。
int i, j, n = 998;
for( i=0; i & i++ )
for( j=0; j & j++ )
printf(“oneSong”);
上面这段代码外层执行n次,外层循环每执行一次,内层循环就执行n次,那总共程序想要从这两个循环出来,需要执行n*n次,也就是n的平方。所以这段代码的时间复杂度为O(n^2)。
int i = 1, n = 100;
while( i & n )
i = i * 2;
由于每次i*2之后,就距离n更近一步,假设有x个2相乘后大于或等于n,则会退出循环。于是由2^x = n得到x = log(2)n,所以这个循环的时间复杂度为O(logn)。
算法的空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。在程序开发中,我们所指的复杂度不做特别说明的情况下,就是指时间复杂度。现在的硬件发展速度之快使得我们完全可以不用考虑算法所占的内存,通常都是用空间换取时间。加之算法的空间复杂度比较难算,所以,无论是在考试中还是在项目开发中,我们都侧重于时间复杂度。所以,空间复杂度,略过。
图片来源参考自:鱼C工作室。感谢鱼C工作室贡献出了这么好的图片。如非特别说明,笔者所有文章都是原创文章。如果您喜欢这篇文章,转载请注明出处。如果您对数据结构感兴趣,请关注我,后续会更新大量精品文章供大家参考!PS:本篇文章在博客园也有同步更新,大家也可以通过博客园关注我
强烈的代码洁癖,强迫症重度患者。关心架构设计,更注重细节研究。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
时间复杂度的几种计算方法.pdf 3页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:100 &&
时间复杂度的几种计算方法,时间复杂度的计算方法,时间复杂度计算方法,时间复杂度的计算,时间复杂度计算,算法时间复杂度计算,如何计算时间复杂度,怎么计算时间复杂度,算法复杂度的计算方法,递归时间复杂度的计算
你可能关注的文档:
··········
··········
1------------------------------ISSN
E-mail: eduf@
年 月 Computer Knowledge and Technology
电脑知识与技术
) Computer Knowledge and Technology 电脑知识与技术
Vol.7, No.19, July 2011.
Tel:+86-551-5690963
5690964 时间复杂度的几种计算方法 刘怀愚,朱昌杰,李璟 (淮北师范大学计算机科学与技术学院,安徽淮北 235000 ) 摘要:算法的时间复杂度是反映算法优劣的重要指标,是《数据结构》 的重要理论基础,是学习和教学过程中贯穿始终的主要线索。 但是由于概念的抽象和计算方法的繁琐,使算法时间复杂度成为最难理解和掌握的问题之一。 在总结教学经验的基础上,该文提出 几种常用的时间复杂度计算方法,使对该知识点的教学和学习变得系统和简单。 关键词:数据结构;时间复杂度;渐进时间复杂度;迭代法 中图分类号:
文献标识码:
文章编号:
11)19-4636-03 Several Calculation Methods of Time Complexity LIU Huai-yu, ZHU Chang-jie, LI Jing (Schoof of Computer Science and Technology, Huaibei Normal University, Huaibei 235000, China) Abstract:
Time complexity is an important index in algorithm in terms of reflecting the quality of the algorithm. Time complexity is also an important theoretical basis in Data Structure, thus is regarded as a major clue throughout learning and teaching process. However, due to the abstractness of the concept and the tedious calculation method, time complexity of the algorithm becomes a most difficult issue to un- derstand
experiences,
time complexity with the aim of simplifying the teaching and learning of the knowledge point in a systematic approach. Key words: D Time C Asymptotic Time C Iteration method 1 算法时间复杂度的基本概念 1.1 算法的执行时间和语句频度
在已证明算法正确性的前提下,评价算法的好坏主要是关注算法在时间和空间上性能的优劣。
正在加载中,请稍后...

我要回帖

更多关于 算法时间复杂度 的文章

 

随机推荐