算法

一.定义

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

简而言之,算法是描述解决问题的方法

二.特性

输入、输出、有穷性、确定性和可行性

好的算法应该具有正确性,可读性,健壮性,高效率和低存储量的特征

三.算法时间效率度量

1.可以忽略加法常数

O(2n + 3) = O(2n)

2.与最高次项相乘的常数可忽略

O(2n^2) = O(n^2)

3.最高次项的指数大的,函数随着 n 的增长,结果也会变得增长得更快

O(n^3) > O(n^2)

4.判断一个算法的(时间)效率时,函数中常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数

O(2n^2) = O(n^2+3n+1)
O(n^3) > O(n^2)

四.时间复杂度&空间复杂度的区别用法

1.时间复杂度:大 O 阶推导方法

①.定义

时间复杂度所需消耗的时间即基本操作执行次数

②.时间复杂度的计算

  • 常数 1取代运行时间中的所有加法常数
  • 在修改后的运行次数函数中,只保留最高阶项
  • 如果最高阶项存在且不是 1,则去除与这个项相乘的常数

③.举例:

int i,j;
for ( i = 0; i < n; ++i){
    for(j = i; j < n; ++j){
        //时间复杂度为 O(1) 的程序步骤序列 
    }
}

④.分析:

对于外循环,其时间复杂度为 O(n);

对于内循环,当 i=0 时,内循环执行了 n 次,当 i=1 时,执行了 n-1 次,······当 i=n-1 时,执行了 1 次。

因此内循环总的执行次数为:

n + (n-1) + (n-2) + ··· + 1

在这里插入图片描述

根据大 O 阶推导方法,最终上述代码的时间复杂度为 :
在这里插入图片描述

⑤.常见的时间复杂度

在这里插入图片描述

2.空间复杂度

①.定义

算法的空间复杂度通过计算算法所需的存储空间实现

运行完一个程序所需内存的大小

算法的时间复杂度和空间复杂度是可以相互转化的

②.空间复杂度的计算

利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计

一个算法所需的存储空间用f(n)表示

空间复杂度的计算公式记作:S(n)=O(f(n))  
 
其中n为问题的规模
 
S(n)表示空间复杂度

③.存储空间

(1)固定部分

这部分属于静态空间

这部分空间的大小与输入/输出的数据的个数多少、数值无关

主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间

(2)可变空间

这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等

这部分的空间大小与算法有关

3.常用的算法的时间复杂度和空间复杂度

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值