先通过表的扩增这一例子来引入今天的主题——平摊分析和势能分析
可是万一我们不知道n是多大呢
使用动态表解决 溢出就建立一个大小翻倍的空间,然后复制过去
这样做插入的最坏时间复杂度为n
所以其真实的时间消耗为n+sigma(2^i) 0<=i<=lg(n+1) 即3n
因此其实插入的时间复杂度为O(1)
尽管有时会有巨大开销,但是会被平均的开销平摊掉,这就是平摊分析
平摊分析:平均操作复杂度不高,尽管有些操作会有较高的复杂度
三种类型的平摊方法:
1.聚集分析
2.记账方法(accounting)
3.势能分析
2.3它们为每一个操作分配了特点的平摊代价
记账方法:
想象自己担任了一个会记
对第i个操作收费为ci
一个哈希表的大小应该为多少比较合适?
theta(n)比较合适可是万一我们不知道n是多大呢
使用动态表解决 溢出就建立一个大小翻倍的空间,然后复制过去
这样做插入的最坏时间复杂度为n
让我们看看平均的时间复杂度,每次基本插入操作为1,空间溢出时需要开一个更大一倍的空间,并复制当前的元素过去,所以空间溢出时所需要的时间为2的i次方(i为第几次溢出)
所以其真实的时间消耗为n+sigma(2^i) 0<=i<=lg(n+1) 即3n
因此其实插入的时间复杂度为O(1)
尽管有时会有巨大开销,但是会被平均的开销平摊掉,这就是平摊分析
平摊分析:平均操作复杂度不高,尽管有些操作会有较高的复杂度
三种类型的平摊方法:
1.聚集分析
2.记账方法(accounting)
3.势能分析
2.3它们为每一个操作分配了特点的平摊代价
记账方法:
想象自己担任了一个会记
对第i个操作收费为ci