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

  • 相关阅读:
    【原创】cs+html+js+css模式(一):初识新模式
    【原创】cs+html+js+css模式(三):RemoteCallHandler详解
    删除表数据
    【原创】cs+html+js+css模式(二):webconfig中的设置
    silverlight动画
    rdlc报表表达式应用(字符串和转换)
    Accordion控件制作下拉面板菜单(静态数据)
    silverlight三种布局
    Sys.UI.DomElement
    Accordion控件动态数据绑定案例
  • 原文地址:https://www.cnblogs.com/vincenshen/p/9741702.html
Copyright © 2020-2023  润新知