zoukankan      html  css  js  c++  java
  • 数据结构与算法之美 04 | 复杂度分析(下)

    本章讲解:
    最好情况时间复杂度: 代码在最理想情况下执行的时间复杂度
    最坏情况时间复杂度: 代码在最坏情况下执行的时间复杂度
    平均情况时间复杂度: 代码在所有情况下执行的次数的加权平均值
    均摊时间复杂度: 代码在执行的所有复杂度情况中绝大部分是低级别的复杂度,
    个别情况是高级别复杂度且发生具有时序关系时,可以将这个高级别
    复杂度均摊到低级别复杂度上,基本上均摊结果就等于低级别复杂度



    最好、最坏情况时间复杂度
    示例代码:
    func find(array []int, n, x int) (pos int) {
    pos = -1
    for i:=0; i<n; i++ {
    if array[i] == x {
    pos = i
    break
    }
    }
    return pos
    }

    func main() {
    a := []int{1,2,3,4,5}
    fmt.Println(find(a, len(a), 2))
    }

    最好情况时间复杂度为O(1)
    最坏情况时间复杂度为O(n)
    这段代码的加权平均时间复杂度仍然是 O(n)

    均摊时间复杂度
    示例代码:
    func insert(val int) {
    var array = [5]int{}
    var count = 0
    if count == len(array) {
    var sum = 0
    for i:=0; i< len(array); i++ {
    sum += array[i]
    }
    array[0] = sum
    count = 1
    }
    array[count] = val
    count ++
    }

    最好情况时间复杂度为O(1)
    最坏情况时间复杂度为O(n)

    那平均时间复杂度是多少? 答案是O(1)


    为什么要引入这4个概念?
    1、同一段代码在不同情况下时间复杂度会出现量级差异,为了更全面、更准确的描述代码的时间复杂度。
    2、代码复杂度在不同情况下出现量级差别时才需要区别这四种复杂度,大多数情况不需要。

    如何分析平均、均摊时间复杂度?
    1、平均时间复杂度
    代码在不同情况下复杂度出现量级差别,则用代码所有可能情况下执行次数的加权平均值表示
    2、均摊时间复杂度
    两个条件满足时使用:
    1、代码在绝大多数情况下是低阶别复杂度,只有在极少情况下是高级别复杂度
    2、低级别和高阶别复杂度出现具有时序规律,均摊结果一般都等于低阶别复杂度

  • 相关阅读:
    C#导出数据—使用Word模板书签的使用
    C#动态调用泛型类、泛型方法
    C#中运算符的介绍和使用
    C#中自定义类型转换
    Linux删除文件后没有释放空间
    Linux下用dd命令测试硬盘的读写速度
    强制关闭或重启Linux系统的几种方法
    前端使用a标签启动本地.exe程序
    Linux 命令别名,让alias永久生效
    Linux 自动删除N小时或分钟前的文件
  • 原文地址:https://www.cnblogs.com/vincenshen/p/9741702.html
Copyright © 2011-2022 走看看