算法:基本/常用 概念

------------------时间复杂度------------------

算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n));例如:

for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
c[i][j]=0;//该步骤属于基本操作执行次数:n的平方次
for(k=1;k<=n;++k)
c[i][j]+=a[i][k]*b[k][j];//该步骤属于基本操作执行次数:n的三次方次
}
}
        计算时间复杂度的时候,先找出算法的基本操作,然后根据 相应的各语句确定它的执行次数,如: T(n) = n 的平方+n的三次方再找出 T(n) 的同数量级(同数量级有以下:1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n) = 该数量级,则 f(n) = n的三次方。若 T(n)/f(n) 求极限可得到一常数c,则时间复杂度T(n) = O(f(n))。即T(n) = O(n^3) 注:n^3即是n的3次方。

        分类:(按数量级递增排列)常见的时间复杂度:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),k次方阶O(n^k),指数阶O(2^n);
------------------空间复杂度------------------

指运行完一个程序所需内存的大小。程序执行时所需存储空间包括以下两部分:
1.固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
2.可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。
         一个算法所需的存储空间用f(n)表示。S(n)=O(f(n)) ,其中n为问题的规模S(n)表示空间复杂度

------------------寻找算法------------------

        算法三种基本结构:顺序、条件、循环。一个问题的解决,先模拟过程,找到循环的部分,抓住核心思想,确定变量;把握核心变量/条件,确定循环体的逻辑分支等;最后根据循环体思想套用/确定变量初始值。循环思想-循环体-确定变量-找核心量/条件-循环体分支判断-初值确定-特殊情况处理

         例子:计算器算法:根据循环体,常规思路可能是:算数1、运算符、算数2、计算结果;但是仔细模拟过程发现,算数1、运算符需要,但是算数2和计算结果合为一个更方便,处理数值输入更好;变量确定了,重复循环体,发现”运算符“在算法中起核心作用,运算符是一个个独立体;之前输入各种数字等,一旦运算符A输入了,它的左操作数必须确定,不管是取display还是之前计算而来,而一旦碰到下一个运算符B,B的左运算数必须确定,总是只有一个左操作数+运算符;一旦输入新的运算符,之前的部分计算,变成新的左操作数+运算符。核心量找到了,循环体内的逻辑分支就好写了,判断运算符为空或者不为空的处理,初值处理,一切逻辑清晰了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值