美文网首页
从0开始——算法是个什么玩意

从0开始——算法是个什么玩意

作者: c枫_撸码的日子 | 来源:发表于2018-11-02 16:14 被阅读0次

    前言

    上一章中,主要学习可数据结构的基本概念,但是
    程序 = 数据结构 + 算法
    因此,这一节就来了解算法是个什么玩意。

    算法的基本概念

    1.算法定义
    解决某个问题的具体步骤
    2.算法的特性

    • 输入
      有0个或者多个输入
    • 输出
      至少一个输出
    • 有穷性
      有限的步骤执行完毕
    • 确定性
      每一个步骤都是确定的,不会产生歧义
    • 可行性
      每一步都是可行的,执行有限次数能完成

    3.算法时间复杂度的定义
    在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
    算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n))。它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。其中f(n)为n的某个函数。

    用大写O()来体现时间复杂度,成为大O记法

    4.时间复杂度的分析方法
    也称为推导大O阶方法

    1.用常数1取代运行时间中的所有加法常数。
    2.在修改后的运行次数函数中,只保留最高阶项。
    3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。
    这样得到的结果就是大O阶
    
    • 常数阶
      无论顺序结构的代码还是分支结构的代码,其时间复杂度都是O(1).
    • 线性阶
      关键就是要分析循环结构的时间复杂度,
      一重循环时间复杂度为O(n)
    • 对数阶
    int count = 1;
    while (count < n)
    {
      count = count * 2;
    }
    

    由于每次count乘以2以后,就距离n更近了。也就是说,有多少个2相乘后大于n,就会退出循环,由2^x=n,x=log2n,
    则时间复杂度为O(logn).

    • 平方阶
      双重循环的时间复杂度为O(n^2)
      如果外循环改完m,那么时间复杂度就是O(n*m).

    算法的空间复杂度
    就是算法所需要的存储空间。
    记作:S(n) = O(f(n));其中n为问题的规模,f(n)为语句关于n所占存储空间的函数。

    相关文章

      网友评论

          本文标题:从0开始——算法是个什么玩意

          本文链接:https://www.haomeiwen.com/subject/qsmqxqtx.html