在一个具体的程序中,程序的复杂度是如何计算的?

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 20:37:07

在一个具体的程序中,程序的复杂度是如何计算的?
在一个具体的程序中,程序的复杂度是如何计算的?

在一个具体的程序中,程序的复杂度是如何计算的?
算法的复杂性
算法的复杂性是算法效率的度量,是评价算法优劣的重要依据.一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低.
计算机的资源,最重要的是时间和空间(即存储器)资源.因而,算法的复杂性有时间复杂性和空间复杂性之分.
不言而喻,对于任意给定的问题,设计出复杂性尽可能低的算法是我们在设计算法时追求的一个重要目标;另一方面,当给定的问题已有多种算法时,选择其中复杂性最低者,是我们在选用算法适应遵循的一个重要准则.因此,算法的复杂性分析对算法的设计或选用有着重要的指导意义和实用价值.
简言之,在算法学习过程中,我们必须首先学会对算法的分析,以确定或判断算法的优劣.
1.时间复杂性:
例1:设一程序段如下(为讨论方便,每行前加一行号)
(1) for i:=1 to n do
(2) for j:=1 to n do
(3) x:=x+1
.
试问在程序运行中各步执行的次数各为多少?
行号 次数(频度)
(1) n+1
(2) n*(n+1)
(3) n*n
可见,这段程序总的执行次数是:f(n)=2n2+2n+1.在这里,n可以表示问题的规模,当n趋向无穷大时,如果 f(n)的值很小,则算法优.作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(n2).
2.空间复杂性:
例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法:
算法1:for i:=1 to n do
b[i]:=a[n-i+1];
for i:=1 to n do
a[i]:=b[i];
算法2:for i:=1 to n div 2 do
begin
t:=a[i];a[i]:=a[n-i-1];a[n-i-1]:=t
end;
算法1的时间复杂度为2n,空间复杂度为2n
算法2的时间复杂度为3*n/2,空间复杂度为n+1
显然算法2比算法1优,这两种算法的空间复杂度可粗略地表示为S(n)=O(n)
信息学比赛中,经常是:只要不超过内存,尽可能用空间换时间.

在一个具体的程序中,程序的复杂度是如何计算的? 程序中的时间复杂度是怎么计算的? 幂函数是如何计算的,其计算复杂度如何统计幂函数在一些程序软件中都有公式,比如matlab中的power,我的问题是这个函数是如何实现的,具体就是怎样加,乘的.我的初衷是要知道幂函数的计算复 (21) 算法的空间复杂度是指______.A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 下列程序段的时间复杂度是:for(i=1;i 发那科加工中心2个问题,一是在程序列表那,程序号后面加注释,如何操作?一是如何在程序中输入小括号()第一个问题的补充,程序列表那每个程序号后面都有括号,是加程序注释的,请指点下 在语言处理程序中,解释程序的功能是() A.解释执行高级语言程序 B.将汇编语言程序编译成目标程序 C.解释执行汇编语言程序 D.将高级语言程序编译成目标程序 matlab toc tic 的用法这二个函数可以获得程序执行时间,能否给个程序片断,举个例子.我想在一个程序中比较多段子程序的运行时间,如何编程呢 在LabViEW的程序框图中如何添加箭头? C语言中算法时间复杂度设n为正整数,请用大O表示法描述下列程序段的时间复杂度 x=91;y=100; while(y>0) { if(x>100) { x-=10; y--; } else x++; } 此题是一个双重循环.对于每个y值(y>0),if语句执行11次,其中10 编个程序 具体要求在下边 要用到数据结构的知识 请用C或PASCAL编写一个函数BIPARTITE判断一个连通无向图G是否是二部图,并分析程序的时间复杂度.设G用二维数组A来表示,大小为n*n(n为结点个 如何编制一个死循环的程序 java程序中如何产生随机数(一个按钮产生一个1~100的随机数) 求程序~ 如何运行一个perl程序具体的操作步骤,是windows环境下的,要求说明具体点,具体的操作步骤和运行命令 求下面程序的时间复杂度 for(i=1;i 下面程序段的时间复杂度是多少?...for(i=1;i 求下列程序段的时间复杂度 k=1; while(k while (scanf(%d%d,&w,&h),在程序中是一个已经定义的数嘛?