什么是算法

算法的基本概念

算法是指解决方案的准确而完整的描述,是一系列解决问题的清晰指令

研究算法的目的是为了更有效的处理数据,提高数据运算效率。算法是定义在数据的逻辑结构上,但算法具体实现要在存储结构上进行。

算法可以简单的理解为解决问题的方法和它的程序代码实现
用程序代码输出”hello world”也是算法,就像1+1=2是数学一样。

有关算法及其内容导图

在这里插入图片描述

算法复杂度

算法的复杂性体现在运行该算法时的占用计算机资源的多少上,计算机最重要的资源是时间(CPU )和空间(内存),因此杂度分为时间和空间复杂度(性)。

复杂度用O(f(n))表示。f(n)表示与需处理的问题规模n相关的关系函数

时间复杂度是指执行算法所需要的计算工作量。也就是:计算机运行一个算法时,程序代码被执行的总次数
空间复杂度是指执行这个算法所需要的内存空间

时间复杂度

  • 案例
int sum(int n)
{
int value=0;    //1
int ii=1;	    //1
while(ii<=n)    //100
{
cvalue=value+i; //100
ii++;           //100
}
return value;   //1
}     

假设n=100,程序将被执行1+1+100+100+ 100+1=303次。
T(n)=O(f(n))=O(3n+3)
(T表示时间time)

时间复杂度关心的是数量级,所以对f(n)函数表达式要简化,原则是:
①略去常数 ②只保留最高阶的项 ③变最高阶项的系数为1
所以最终时间复杂度为:O(n)

如果 f(n)=2n^3+7n
则:T(n)=O(2n^3+7n) O(2n^3)最终为: O(n^3)
所以求时间复杂度,只关心程序代码中最内层循环的次数,即最多的那一个循环次数就可以了。

  • 常见的时间复杂度

在这里插入图片描述

  • 时间复杂度有最好时间复杂度、平均时间复杂度、最坏时间复杂度
    比如输入一个数字6范围内的数字,确定这个数字为3,可能一次就可以确定,为O(3)。折半找,平均2次可以确定,O(2)。遍历就3次可以确定,O(3)

空间复杂度

空间复杂度S(n)是指算法消耗的内存空间,也是问题规模(需要处理的数据量) n的函数。S(n)=O(f(n))
S表示space

int sum(int n)
{
int value=0;
int ii=1;
while (ii<=n)
{
value=value+ ii;
ii++;
}
return value;
}

这个函数代码块中,定义了整型变量n、value、ii
如果int占用的内存是4B,所需空间是4+4+4 ,
不管n怎么变,算法所需要的内存空间都是一个固定的常数,空间复杂度为O(1)

int sumt(int n)
{
int ii;
int arrIn];
}

如果int占用的内存是4B,所需空间是4+4+4n , S(n)=O(n)

int sumt(int n)
{
int ii;
int arr1[n];
int arr2[n][n];
}

所需空间是4+4+4n+4n^2 S(n)=O(n^2)
空间复杂度在递归函数里运用起来较为复杂,以后有机会再记录~

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值