大话数据结构之——时间复杂度O

一、时间复杂度
同一问题可用不同 算法解决,而一个算法的质量优劣将影响到算法乃至 程序的效率。算法分析的目的在于选择合适算法和改进算法。
计算机科学中,算法的 时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的 字符串的长度的函数。时间复杂度常用 大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。
计算:
1.一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
分析:随着模块n的增大,算法执行的时间的增长率和 f(n) 的增长率成正比,所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。
2. 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出 T(n) 的同 数量级(它的同数量级有以下: 1,log2n,n,n log2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n) = 该数量级,若 T(n)/f(n) 求极限可得到一常数c,则时间复杂度T(n) = O(f(n))
for(i=1; i<=n; ++i)
{
    for(j=1; j<=n; ++j)
    {
        c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次
        for(k=1; k<=n; ++k)
            c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次
    }
}
二、算法的最坏情况。
算法(Algorithms)的复杂度(Complexity)是指运行一个算法所需消耗的资源(时间或者空间)。同一个算法处理不同的输入数据所消耗的资源也可能不同,所以分析一个算法的复杂度时,主要有三种情况可以考虑,最差情况(Worst Case)下的,平均情况(Average Case)的, 最好情况(Best Case)下的。


最差的复杂度符合我们的要求,那么所有的情况可以包含在里面。

计算 1 + 2 + 3 + 4 + ...... + 100。代码如下,之前也有讲过:


#include "stdio.h"

	int main()

	{

	    int i, sum = 0, n = 100;    /* 执行1次 */

	    for( i = 1; i <= n; i++) /* 执行 n+1 次 */

	    {

	        sum = sum + i;          /* 执行n次 */

	        //printf("%d \n", sum);

	    }

	    printf("%d", sum);          /* 执行1次 */

	}

另外一种方法:
1
	#include "stdio.h"
2
	 
3
	int main()
4
	{
5
	    int sum = 0, n = 100;   /* 执行1次 */
6
	    sum = (1 + n) * n/2;    /* 执行1次 */
7
	 
8
	    printf("%d", sum);      /* 执行1次 */
9
	}







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值