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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值