【算法】一、概述

由于这是本人的一些学习笔记,什么算法历史等在这里不作概述。

1.1概念

算法是规则的有限集,是为解决特定问题而规定的一系列操作。

1.1.1算法的特性

有限性有限步之后必须结束。

确定性每一步骤必须有确切的含义,无二义。

可行性原则上能精确的运行,即在现有条件情况下,是可以实现的。即使手工运算也能实现。

输入性有0个或多个输入,刻画运算对象的初始情况。

输出性有一个或多个输出,反映数据加工结果。

1.1.2算法的描述方式

自然语言

框图(流程图或N-S图)

高级语言

伪代码(类语言)

1.1.3算法设计要求(什么才是“好”算法)

正确

可读性好

健壮性高

高效率-低存储

1.2算法复杂度分析

1.2.1时间复杂度

 过于简单的时间复杂度分析这里不予赘述

下面看一个例子:

int i=0,sum=0;
while(sum<n){
   i++;
   sum+=i;
}
return sum;

假设执行次数为m,即i最后为m

则有sum=m(m-1)/2 即m(m-1)/2>=n

计算得T(n)=O(√n)

时间复杂度的类别

最好时间复杂度:最少次数

平均时间复杂度:平均次数

最坏时间复杂度:最大次数

一般采用最坏情况来作为算法的时间复杂度

1.2.2空间复杂度

一个算法的存储量包括形参所占空间和临时变量。在对算法进行存储空间分析时,只考虑临时变量所占空间。

两个例子:

void func(int n){
   int i=1,k=100;
   while(i<=n){
      k++;
      i+=2;
   }
}

空间复杂度:S(n)=O(1)

int maxelem(int a[],int i,int j){
   int mid(i+j)/2,max1,max2;
   if(i>j){
      max1=maxelem(a,i,mid);
      max2=maxelem(a.mid+1,j);
      return (max1>max2)?max1:max2;
   }
   else return a[i];
}

递归算法空间复杂度=每层需要的辅助空间*递归深度

S(n)=O(logn)

1.3算法分析的三种渐进符号:O、Ω和θ

1.3.1大O符号

大O符号:f(n)=O(g(n)),当且仅当存在正常量c和n0,使n>=n0时,f(n)<=cg(n),即g(n)为f(n)的上界

Ω符号与大O符号相反

θ符号居中

简单来说:

 也就是长这个样子

我个人建议通过极限法理解:

与数学结合起来,再联系图像,就会好理解多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

噶炜123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值