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、低级别和高阶别复杂度出现具有时序规律,均摊结果一般都等于低阶别复杂度

  • 相关阅读:
    activeMq-1 快速入门
    netty2 案例:数据通信
    SQL学习分享之数据链接(二)
    SQL学习 (一)
    CSS的定位重叠
    CSS 伪类 学习
    Jmeter 初学(三)
    玩转codeacademy (三)
    玩转codecademy (二)
    玩转codecademy(首次体会对象的乐趣) (一)
  • 原文地址:https://www.cnblogs.com/vincenshen/p/9741702.html
Copyright © 2011-2022 走看看