平摊分析 讲师胡学钢.pptVIP

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
平摊分析 讲师胡学钢

平摊代价分析 第i 个插入的平摊代价是 如果 i –1刚好是 2的幂, 其他; 平摊代价计算 第i 个插入的平摊代价是 如果 i –1刚好是 2的幂, 其他; 如果 i –1刚好是 2的幂, 其他; 如果 i –1刚好是 2的幂, 其他; 计算 情况 1: i –1 刚好为 2的幂。 情况 1: i –1 刚好为 2的幂。 计算 情况 1: i –1 刚好为 2的幂。 计算 情况 1: i –1 刚好为 2的幂。 计算 情况 2: i –1 不是 2的幂。 情况 1: i –1 刚好为 2的幂。 情况 2: i –1 不是 2的幂。 情况 1: i –1 刚好为 2的幂。 计算 情况 2: i –1 不是 2的幂。 情况 1: i –1 刚好为 2的幂。 计算 因此, n 插入最坏情况的代价为Θ(n)。 情况 2: i –1 不是 2的幂。 情况 1: i –1 刚好为 2的幂。 计算 情况 2: i –1 不是 2的幂。 情况 1: i –1 刚好为 2的幂。 练习: 修正这个分析中的错误,证明第一次插入的 平摊代价仅仅为 2. 计算 情况 2: i –1 不是 2的幂。 情况 1: i –1 刚好为 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. * 算法导论 平摊分析 ? 动态表 ? 聚集分析法 ? 记账法 ? 势能法 胡学钢、吴共庆 哈希表应该多大? 目标: 使表尽可能的小,但是还足够大不会溢出(或者变为低效率)。 问题: 如果我们不能预先知道合适的大小应该怎么办? 答案:动态表. 思路: 每当表溢出的时候,通过分配(用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. 插入 动态表举例 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). 严格分析(续) 平摊分析 平摊分析是一种分析方法,证明在一系列操作中,每个操作的平均代价很小,即使在这个系列中一个操作的代价比较大。 虽然我们进行平均,但是,其中并不涉及概率! ?平摊分析保证在最坏情况下每个操作的平均性能。 平摊分析的类型 三种常用的平摊arguments: ? 聚集 法, ? 记账 法, ? 势能 法. 我们刚刚看到的是聚集分析。 聚集法虽然简单,但是不如其他两种方法精确。特别是,记账法和势能法可以给每个操作分配特定的平摊代价。 记账法 ? 给第 i 个操作虚构一个平摊代价 ?i , 1单位的工作付$1 (比如时间). ? 执行操作his fee is consumed to perform the operation. ? 任何当时没有消费的余额存在银行 准备给以后的操作使用。 ? 银行的余额不能为负值! 我们必须要保证对所有的

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档