刘汝佳-7功能数据结构【信息技术】.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
功能数据结构 清华大学 刘汝佳 几种常见的操作 插入(insert) 在数据结构中增加一个数据。 删除(delete) 在数据结构中删除一个数据。 查找(search) 在数据结构中查找指定的数据。大部分数据结构都需要检索。 静态数据结构 不需要插入和删除的数据结构称为静态数据结构。 往往牺牲一些预处理时间和附加空间来换取更好的性能而不必担心维护的复杂度。 半静态数据结构、动态数据结构 对象空间分解 关键码空间分解 数据结构设计的常见问题 时间效率和空间开销的关系 矛盾。用时间去换空间或用空间换时间。需要做时空平衡 统一。精简数据表示有可能在缩减空间的同时设计出更快速的操作 不同操作的关系 例子:维护一种动态数据结构,可修改,可查询里面是否有需要的元素 有序数组。插入O(n),查找O(logn) 链表。插入O(1),查找O(n) 如何让两者的时间复杂度都比较低呢? 可扩充性:并查集、线段树 实现复杂度:AVL树 vs Treap 功能数据结构举例 并查集 堆 哈希表 排序二叉树 线段树 并查集:概念与操作 不相交集合 合并 查找 Tarjan数据结构(Tarjan 1975): 森林表示法 每棵树一个集合, 根为集合标识 树的形态并不重要, 重要的是有哪些节点 合并: 让一棵树成为另一棵的子树, 即修改父亲 查找: 不停找父亲, 直到到达树根 特点: 只需要维护父亲信息, 不需要维护子女信息 并查集:实现与优化 基本实现: 父亲表示法 father:array[1..maxn] of integer; 初始 father[i] := i; 合并: father[u] := v; 查找: while(father[u]!=u) u:=father[u]; 优化(启发式合并+路径压缩) 合并: 深度较小的树成为深度较大的树的子树 查找: 把经过路径上的点的父亲都设为根 效果? 并查集:时间复杂度分析 回忆 原始方案:合并基于深度值 复杂之处:路径压缩对深度的影响不规则 解决方案:设计基于rank值的合并 rank的定义和计算规则 刚建立的新集合的rank为0 rank不同的树合并:rank大的拥有新根,两树rank不变。 rank相同的树合并:任选一个拥有新根,把它的rank加1 均摊分析(amortized analysis) 二进制计数器问题 有一个初始值为0的k位二进制计数器只支持加一操作,该操作的时间复杂度如何?我们把改变一个二进制位看作常数时间。 均摊分析 最坏情况下(k个1再加1)所有位都需要改变,为O(k) 但是由于计数器在不断加一,不可能连续若干次都遇到最坏情况 应分析一个操作序列的总时间,而非单个操作的时间。 比较: 平均情况时间复杂度是针对不同输入来计算平均值的 均摊分析是一个序列的所有操作取平均值 二者从不同方面说。均摊分析可以是最坏情况,也可是平均情况。 累计分析(aggregate analysis) 基本思想 先计算n个操作的总时间T(n) 每个操作的均摊时间复杂度就是T(n)/n了 二进制计数器问题 第0位每次变化,因此一共变化n次;第1位每两个操作变一次,一共变n/2次……第k位变化n/2k次,故总变化数小于2n次 每次操作的均摊复杂度为O(n)/n = O(1)。 会计分析法(accounting method) 问题 有的数据结构支持多种操作,那么累计分析就无法计算出一个确定的值 会计分析法 把每个操作的实际时间消耗看做资金消耗(时间比做金钱!) 定义这种操作的“投资额”,供以后操作的使用。 如果可以保证始终有可用资金,那么实际消费的资金不会超过投资总量 算法的时间耗费(即资金消耗)的上限为总投资额。 关键:投资额如何设计? 会计分析法一 投资额设计方法一 把任何一个0变成1的操作时投资2美元,而把1变成0时不进行投资,则这2美元中的一个当时就会用掉,而另一个可以提供给这个1变回到0时使用,因此 可用资金数目等于1的数目,即总是非负的。 由于每次最多只有一个0变成1(但可能有多个1变成0),因此投资总量不超过2n美元。虽然每改变一位都要用掉一个美元,但是由于刚才证明了始终有可用资金,因此资金消耗不超过2n美元,即:n个操作的总时间不超过O(n)。 会计分析法二 投资额设计方法二 每次操作时给第i个位投资2-i美元,则 它从上一次翻转起一共累计得到了1美元投资,正好够它这一次翻转,因此资金不会短缺 每次操作投资2美元,所以一共投资了2美元,因此总时间不超过O(1)。 总结 时间比作金钱,资金消耗代表时间消耗 对操作或对象投资使得资金始终可用 则资金消耗=O(投资额) 微操作法、对象分类法 势能分析法(potential method) 势能 势能为整个数据结构的一个状态函数。

文档评论(0)

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

1亿VIP精品文档

相关文档