算法2013s(L12)-平摊分析.pptVIP

  1. 1、本文档共44页,可阅读全部内容。
  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文档。上传文档
查看更多
算法设计与分析 2022年9月24日 讲授内容:平摊分析 教  师:胡学钢、吴共庆 纲要 动态表 聚集分析法 记账法 势能法 9/24/2022 算法设计与分析-动态规划 2 目标: 使表尽可能的小,但是还足够大不会溢出(或者变为低效率)。 问题: 如果我们不能预先知道合适的大小应该怎么办? 答案:动态表. 思路: 每当表溢出的时候,通过分配(用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). 严格分析 平摊分析是一种分析方法,证明在一系列操作中,每个操作的平均代价很小,即使在这个系列中一个操作的代价比较大。 虽然我们进行平均,但是,其中并不涉及概率! •平摊分析保证在最坏情况下每个操作的平均性能。 平摊分析 三种常用的平摊分析方法: • 聚集 法, • 记账 法, • 势能 法. 我们刚刚看到的是聚集分析。 聚集法虽然简单,但是不如其他两种方法精确。特别是,记账法和势能法可以给每个操作分配特定的平摊代价。 平摊分析的类型 • 给第 i 个操作虚构一个平摊代价 ĉi , 1单位的工作付$1 (比如时间). • 执行操作消费一定的代价. • 任何当时没有消费的余额存在银行 准备给以后的操作使用。 • 银行的余额不能为负值! 我们必须要保证对所有的 n • 这样, 总的平摊代价提供了总的实际代价的上界。 记账法 例子: 溢出 假设 给第 i 个插入操作平摊费用为 ĉi = $3 。 • $1 付给这次插入操作 • $2 给以后表倍增预存 当表倍增的时候, $1 付给移动一个最近加入的项, 同时 $1 付给移动一个旧的项. 动态表的记账分析 假设 给第 i 个插入操作平摊费用为 ĉi = $3 。 • $1 付给这次插入操作 • $2 给以后表倍增预存 当表倍增的时候, $1 付给移动一个最近的项, 同时 $1 付给移动一个旧的项. 举例: 溢出 动态表的记账分析 例子: 假设 给第 i 个插入操作平摊费用为 ĉi = $3 。 • $1 付给这次插入操作 • $2 给以后表倍增预存 当表倍增的时候, $1 付给移动一个最近的项, 同时 $1 付给移动一个旧的项. 动态表的记账分析 键的不变量: 存款余额不会低于 0. 这样, 平摊代价的和给真实代价提供了一个上界。 *第一个操作的代价仅仅是 $2, 不是 $3. 动态表的记账分析 思路: 将银行帐号视为动态集合的势能。 框架: • 开始时,初始的数据结构为 D0. • 操作 i 将 Di–1 转换为 Di. • 操作 i 的代价为 ci . • 定义 势能函数 Φ: {Di} →R, 使得 Φ(D0 ) = 0 并且对所有的 i ,Φ(Di) ≥ 0. • 平摊代价 ĉi 和相关的 Φ 定义为 ĉi = ci + Φ(Di) –Φ(Di–1). 势能法 势能ΔΦi • 如果 ΔΦi 0, 那么 ĉi ci. 操作 i 在数据结构中存储势能以备后用. • 如果 ΔΦi 0, 那么 ĉi ci. 数据结构将存储的势能取出付操作i的代价。 理解势能 n 个操作的平摊代价之和为 两边求和。 平摊代价之和 n 个操作的平摊代价之和为 平摊代价之和 n 个操作的平摊代价之和为 平摊代价之和 定

文档评论(0)

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

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

版权声明书
用户编号:7054124121000035

1亿VIP精品文档

相关文档