1、答案:动态表.思路:每当表溢出的时候,通过分配(用malloc或者 new)一个新的更大表使其增长。将原来表中的所有项都移动到新表中,然后释放旧表的内存。,动态表举例,1.插入2.插入,溢出,动态表举例,1.插入2.插入,溢出,动态表举例,动态表举例,1.插入2.插入,1.插入2.插入3.插入,动态表举例,溢出,1.插入2.插入3.插入,动态表举例,溢出,1.插入2.插入3.插入,动态表举例,溢出,1.插入2.插入3.插入,动态表举例,动态表举例,1.插入2.插入3.插入4.插入,动态表举例,溢出,1.插入2.插入3.插入4.插入5.插入,动态表举例,溢出,1.插入2.插入3.插入4.插入5.
2、插入,动态表举例,1.插入2.插入3.插入4.插入5.插入,动态表举例,1.插入2.插入3.插入4.插入5.插入6.插入7.插入,最坏情况分析,考虑一连串 n 个插入。指向一个插入的最坏情况时间是(n).因此,n 个插入的最坏运行时间是 n(n)=(n2).错误!实际上,n 个插入的最坏情况费用进行是(n)(n2).我们看看为什么是这样:,令 ci=第 i 个插入的代价,如果 i 1 刚好是 2的幂,其他.,严格分析,严格分析,令 ci=第 i 个插入的代价,如果 i 1 刚好是 2的幂,其他.,n 个插入的费用.,因此,每个动态表操作的平均费用是(n)/n=(1).,严格分析(续),平摊分析
3、,平摊分析是一种分析方法,证明在一系列操作中,每个操作的平均代价很小,即使在这个系列中一个操作的代价比较大。虽然我们进行平均,但是,其中并不涉及概率!平摊分析保证在最坏情况下每个操作的平均性能。,平摊分析的类型,三种常用的平摊arguments:聚集 法,记账 法,势能 法.我们刚刚看到的是聚集分析。聚集法虽然简单,但是不如其他两种方法精确。特别是,记账法和势能法可以给每个操作分配特定的平摊代价。,记账法,给第 i 个操作虚构一个平摊代价 i,1单位的工作付$1(比如时间).执行操作his fee is consumed to perform the operation.任何当时没有消费的余额
4、存在银行 准备给以后的操作使用。银行的余额不能为负值!我们必须要保证对所有的 n,这样,总的平摊代价提供了总的实际代价的上界。,例子:,溢出,动态表的记账分析,假设 给第 i 个插入操作平摊费用为 i=$3。$1 付给这次插入操作$2 给以后表倍增预存当表倍增的时候,$1 付给移动一个最近加入的项,同时$1 付给移动一个旧的项.,动态表的记账分析,假设 给第 i 个插入操作平摊费用为 i=$3。$1 付给这次插入操作$2 给以后表倍增预存当表倍增的时候,$1 付给移动一个最近的项,同时$1 付给移动一个旧的项.,举例:,溢出,例子:,动态表的记账分析,假设 给第 i 个插入操作平摊费用为 i=
5、$3。$1 付给这次插入操作$2 给以后表倍增预存当表倍增的时候,$1 付给移动一个最近的项,同时$1 付给移动一个旧的项.,记账分析(续),键的不变量:存款余额不会低于 0.这样,平摊代价的和给真实代价提供了一个上界。,i为分配的平摊代价(虚拟),另外,banki=banki-1+i-ci*第一个操作的代价仅仅是$2,不是$3.,令 ci=第 i 个插入的代价,如果 i 1 刚好是 2的幂,其他.,势能法,思路:将银行帐号视为动态集合的势能。,框架:开始时,初始的数据结构为 D0.操作 i 将 Di1 转换为 Di.操作 i 的代价为 ci.定义 势能函数:Di R,使得(D0)=0 并且对
6、所有的 i,(Di)0.平摊代价 i 和相关的 定义为 i=ci+(Di)(Di1).,理解势能,potential difference i,如果 i 0,那么 i ci.操作 i stores work in the data structure for later use.如果 i 0,那么 i ci.数据结构将存储的工作取出付操作i的代价。,The amortized costs bound the true costs,n 个操作的平摊代价之和为,两边求和。,The amortized costs bound the true costs,The series telescopes.
7、,n 个操作的平摊代价之和为,The amortized costs bound the true costs,n 个操作的平摊代价之和为,表倍增的势能分析,定义在i第个插入后表的势能为(假设,Note:,记账法),平摊代价分析,第i 个插入的平摊代价是,平摊代价分析,第i 个插入的平摊代价是,如果 i 1刚好是 2的幂,其他;,平摊代价计算,第i 个插入的平摊代价是,如果 i 1刚好是 2的幂,其他;,如果 i 1刚好是 2的幂,其他;,计算,情况 1:i 1 刚好为 2的幂。,情况 1:,计算,情况 2:i 1 不是 2的幂。,情况 2:,计算,因此,n 插入最坏情况的代价为(n)。,练习:修正这个分析中的错误,证明第一次插入的平摊代价仅仅为 2.,计算,情况 2:,因此,n 插入最坏情况的代价为(n)。,结论,平摊代价给数据结构性能提供了清晰的抽象。当需要进行平摊分析的时候,任何方法都可以使用,但是每种方法都有特定的情况,最精确和简单。Different schemes may work for assigning amortized costs in the accounting method,or potentials in the potential method,有时产生不同的边界。yielding radically different bounds.,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1