zoukankan      html  css  js  c++  java
  • 算法基础

    1. 什么是算法

    • 算法(Algorithm):一个计算过程,解决问题的方法

    • 一个算法应该具有一下七个重要特称:

      • ①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;
      • ②确切性(Definiteness):算法的每一步骤必须有确切的定义;
      • ③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输 入是指算法本身定出了初始条件;
      • ④输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没 有输出的算法是毫无意义的;
      • ⑤可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行 的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);
      • ⑥高效性(High efficiency):执行速度快,占用资源少;
      • ⑦健壮性(Robustness):对数据响应正确。

    2. 算法的好坏评判标准

    时间复杂度:T(n)

    根据算法写成的程序在执行时 耗费时间的长度。这个长度往往也与输入数据的规 模有关。时间复杂度过高的低效算法可能导致我们 在有生之年都等不到运行结果。
    

    时间复杂度:就是用来评估算法运行时间的一个式子(单位)。一般来说,时间复杂度高的算法比复杂度低的算法慢。

    print('hello world')
    print('hello python')
    print('hrllo ssd ')        #O(1)    大O,简而言之可以认为它的含义是“order of”(大约是)。
    #
    for i in range(n):
        print('hello world')
        for j in range(n):
            print('hello world')   #O(n^2)
    
    for i in range(n):
        for j in range(i):
            print('hrllo owd')   ##O(n^2)
    n= 64
    while n>1:
        print(n)     #O(log2n)或者O(logn)
        n = n//2
    

    while的分析思路:

    ​ 假如n = 64的时候会输出:如下图

    这时候可以发现规律:

    • 常见的事件复杂度:

      O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

    空间复杂度:S(n)

    根据算法写成的程序在执行时 占用存储单元的长度。这个长度往往与输入数据的 规模有关。空间复杂度过高的算法可能导致使用的 内存超限,造成程序非正常中断。
    

    空间复杂度:用来评估算法内存占用大小的一个式子

  • 相关阅读:
    spring data jpa @index无法创建索引
    vue form绑定数据后只能显示不能编辑
    vue dialog每次打开会展示上一次数据(转载)
    vue-i18n突然所有的都解析不出来了
    sass计算高度
    动态指定日志路径(logback)
    Springboot配置文件内容加密
    java环境变量修改后不生效
    SOAP和REST
    Git配置别名
  • 原文地址:https://www.cnblogs.com/zhangdadayou/p/12070532.html
Copyright © 2011-2022 走看看