zoukankan      html  css  js  c++  java
  • 算法及其性能分析

    要点概论:

    1. 算法概述

    2. 算法的时间复杂度分析

    3. 增长量级

    4. 算法的空间复杂度分析

    1. 算法概述

      算法是指解决问题的一种方法或一个过程。算法通常使用计算机程序来实现。算法接手待处理的输入数据,然后执行相应的处理过程,最后输出处理的结果。如图所示:

      算法的实现为若干指令的有穷序列,具有如下性质。

        1)输入数据:算法可以接收用于处理的外部数据

        2)输出结果:算法可以产生输出结果

        3)确定性:算法的组成指令必须准确无歧义

        4)有限性:算法指令的执行次数必须是有限的,执行的时间也必须是有限的。

      再计算机上执行一个算法,会产生内存开销和时间开销,算法的性能分析包括以下两个方面。

        1)时间性能分析

        2)空间性能分析

    2. 算法的时间复杂度分析

      衡量算法有效性的一个指标是运行时间。算法的运行时间长度与算法本身的设计和所求解的问题的规模(即算法求解问题的输入量,通常以一个整数表示)有关。

      算法的时间性能分析,又称为算法的时间复杂度分析。

      对于问题规模较大数据,如果算法的时间复杂度呈指数分布,完成算法的时间可能趋向于无穷大,即无法完成。

      一个算法运行的总时间取决于以下两个主要因素:

         1)每条语句的执行成本。

         2)每条语句的执行次数(频度)。

      算法中语句的频度之和示例:

    total = 0
    
    for i in range(n):
        for j in range(n):
            total += a[i][j]
    
    print(total)
    
    #内循环语句运行了 n * n 次,总算发执行语句频度为: n*2 + 2

    3. 增长量级

      对于问题规模 n ,假如算法 A 中所有语句的频度之和为 100n + 1 ;算法 B 中所有语句的频度之和为 n*2 + n + 1。则算法 A 和 B 对于不同问题规模的运行时间对照如表所示:

    问题规模 n 算法 A的运行时间 算法 B 的运行时间
    10   1001   111
    100   10 001   10 101
    1000   100 001   1 001 001
    10 000   1 000 001   100 010 001

      

      由表可以看出,随着问题规模 n 的增长,算法的运行时间主要取决于最高指数项

      在算法分析中,通常使用增长量级来描述。

      

      增长量级用于描述函数的渐进增长行为,一般使用大O符号表示。

      例如, 2n  ,100n 与  n + 1属于相同的增长量级,记为 O(n),表示函数随 n 线性增长。

      

      算法分析中常用的增长量级如表所示:

    函数类型 增长量级 举例 说明
     常量型   1 count -= 1 语句(整数递减)
       对数型   
    ㏒₂n
      

    while n > 0:

      n = n//2

      count += 1  

    除半(二分查找法等) 
       线性型     n

     for i in range(n):

      if i / 2 != 0:  #奇数

        sum_odd += i

    单循环(统计奇数的个数,顺序查找法等) 
      线性对数型   
    n㏒₂n
      (待补充)  分而治之算法(归并排序法等)
     二次型    n**2

     for i in range(l,n):

      s = ''

      for j in range(l,n):

        s += str.format('{0:l}*{l:l}={2:2}',i,j,i*j)

      print(s)

     两重嵌套循环(打印九九乘法表,冒泡排序算法,选择排序算法,插入排序算法等)
     三次型    n**3

     for i in range(n):

      for j in range(i+l,n):

      for k in range(j+l,n):

        if ( a[i] + a[j] + a[k] ) == 0:

          count += 1

     三重嵌套循环

    4 . 算法的空间复杂度分析

      衡量算法有效性的另一个指标是内存消耗。对于复杂的算法,如果其消耗的内存超过运行该算法的计算机的可用物理内存,则算法无法正常执行。

      算法的内存消耗分析,又称为算法的空间复杂度( Space Cconplexity)分析

      python语言面向对象特性的主要代价之一是内存消耗

      python的内存消耗与其在不同计算机上的实现有关。不同版本的python有可能使用不同方法实现同一种数据类型。

      

      确定一个python程序内存使用的典型方法是,先统计程序使用的对象的数量,然后根据对象的类型乘以各对象占用的字节数。示例如下:

    import sys
    
    >>>sys.getsizeof(100)      # 28
    
    >>>sys.getsizeof('abc')   # 52
    
    >>>sys.getsizeof(True)    # 28

      

  • 相关阅读:
    HyperLeger Fabric开发(三)——HyperLeger Fabric架构
    WPF设计の画刷(Brush)
    WPF设计の画刷(Brush)
    WPF设计の画刷(Brush)
    Mina Basics 02-基础
    内置方法
    py-opp 类(class)
    Python 学习目录
    py-函数进阶
    py-函数基础
  • 原文地址:https://www.cnblogs.com/HZY258/p/8452824.html
Copyright © 2011-2022 走看看