03_时间复杂度和空间复杂度

程序在计算机上的运行时间取决于下列因素:

1.算法采用的策略、方案

2.代码质量

3.输入规模

4.机器执行指令的速度

 

我们看下等差数列求和的两种算法的执行情况

第一种算法:

int sum = 0;                   //执行1次	    int n = 100;                   //执行1次
 for (int i = 1; i <= n; i++) { //执行n+1次
            sum = sum + i;               //执行n次
        }
	    System.out.println(sum);       //执行1次

第二种算法:

int n = 100;                   //执行1次	    sum = (1 + n) * n / 2;         //执行1次

    System.out.println(sum);       //执行1次

第一种算法执行了2n+4次,第二种算法执行了3

当输入规模很大的时候,也就是n值很大的时候,两种算法的执行效率就可以看成n:1


 int x = 0;	    int sum = 0;
	    int n = 100;
	    for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                x++;
                sum = sum + x;
            }
        }

这个算法的执行次数呢?有一个嵌套的for循环,输入规模很大的时候可以抽象为n²


算法效率的度量方法

算法的时间复杂度

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)n的变化情况并确定T(n)的数量级。

算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(F(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。这种记法称作大O标记法

一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法。

以上三个算法的时间复杂度分别是O(1)O(n)O(n²)

 

时间复杂度(大O记法)的推导原则:

用常数1取代运行时间中的所有加法常数。

在修改后的函数中,只保留最高项。

如果最高阶项存在且不是1,则去除与这个项相乘的常数。

 

算法的空间复杂度

也就是算法所需的内存空间,记作:S(n)=O(F(n))。其中,n为问题规模,f(n)为关于n所占存储空间的函数。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值