算法复杂度分析方法

本文探讨了如何衡量算法的好坏,主要通过分析空间复杂度S(n)和时间复杂度T(n)。举例说明了时间复杂度过高可能导致的效率问题,并通过改进算法结构降低复杂度。介绍了最坏情况复杂度和平均复杂度的概念,以及复杂度的渐进表示法,如O、Ω和Θ记号,用于描述算法效率的上界、下界和等价关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是好的算法

  • 空间复杂度 S ( n ) S(n) S(n)——根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。

  • 时间复杂度 T ( n ) T(n) T(n)——根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到这个结果。
    例如:输入N,打印1~N:

    void printN(int N)
    {
         
    	if(N)
    	{
         
    		printN(N - 1);
    		printf("%d\n", N);
    	}
    	return;
    }
    

    在这里插入图片描述
    当N过大时,程序占用存储空间较大,非正常退出。

    改为循环结构实现:

    	void printN(int N)
    	{
         
    		int i;
    		for(i = 1; i <= N; i++)
    		{
         
    			printf("%d\n", i);
    		}
    		return;
    	}
    

    没用涉及到程序调用的问题,不论N多大,占用的空间始终是固定的,没有问题。
    另一个例子:求多项式的值:

    	double f(int n, double a[], double x)
    	{
         
    		int i;
    		double p = a[0];
    		for(i = 1; i <= n; i++)
    		{
         
    			p += (a[i] * pow(x, i));
    		}
    		return p;
    	}
    

    每次循环执行i次乘法,乘法总次数 = ( 1 + 2 + . . . . . . . + n ) = ( n 2 + n ) / 2 =(1+2+.......+n)=(n^2+n)/2 =(1+2+.......+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值