数据结构NOIp.ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构NOIp

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 最短路问题 单源最短路—— Dijkstra算法 多源最短路—— Floyd-Warshall算法 Dijkstra算法 Dijkstra算法中心—— + + 1 2 4 3 3 1 6 3 2 +∞ +∞ +∞ 0 Dist值 4 3 2 1 节点号 3 2 6 5 4 选择 标记 扩展 任意顶点对之间的最短路 假设求从vi到vj的最短路径,如果vi到vj有弧,则它们的路径为cost[i,j],否则需要进行n次试探,首先考虑(vi v1 vj ),比较它与(vi vj )的大小,取较短者为中间节点序号不大于1的最短路径,ji假如 (vi,…,v2 )和 (v2 ,…, vj )都是中间节点序号不大于1的最短路径,那么(vi,…,v2 ,…, vj )可能是中间节点序号不大于2的最短路径.将它和中间节点序号不大于1的最短路相比较,从中选出中间节点的序号不大于2的最短路径之后,再增加一个顶点v3,继续进行试探.这样进行n次试探后,最后得到必然是vi到vj的最短路径。 Floyd-Warshall算法过程 dist数组的初始值为所有边的情况 For k:=1 To vtxnum Do {枚举中间点} For i:=1 To vtxnum Do {枚举起点} For j:=1 To vtxnum Do {枚举终点} If dist[i,k]+dist[k,j]dist[i,j] Then dist[i,j]:=dist[i,k]+dist[k,j] 最后的结果仍旧保存在dist数组中 网络流与匹配问题 网络最大流 最小费用最大流 二分图的最大匹配 二分图的最佳匹配 网络流算法 寻找增广链,并根据增广链修改流量。重复这一步骤,直到不再存在增广链。 如果需要在此基础上求最小费用最大流,只需从增广链的选择上着手。 二分图与匹配算法 二分图的匹配算法又称匈牙利算法 匈牙利算法的中心——可增广轨 不断寻找可增广轨,并根据可增广轨修改匹配 最佳匹配只是在选择可增广轨时,将匹配的权值作为选择的条件 Hash表 概念:若确定某个对应关系f,对于给定的值k,若在结构中存在关键字和k相等的记录,必定在f(k)的存储位置上找到,我们称这个对应关系f为哈希表 Hash表的构造方法 直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法 处理冲突的方法 开放定址法 ( Hi=(H(key)+di) mod m)、再哈希法、链接地址法等等 哈希函数与哈希表 哈希函数就是关键字集合与地址集合的映像 哈希表常用于搜索过程中状态是否处理过的判断 (例如:八数码问题) 数据结构的应用(题1) 某大学有三个系,每个系的学生名字单独放在一个文本文件中,已知每个系的学生人数不超过1000人。请编一程序,在这所大学中寻找这样的名字,用该名字的人数恰为M(M0)。注意:同一个系或系与系之间都有可能出现同名现象. 数据结构的应用 这是一道比较简单的查找和统计问题。最容易想到的就使用一个数组每一个出现的名字及出现的次数记录下来。这样每增加一个节点,就要将当前节点与前面所有产生的节点进行比较。这样最坏的情况下时间复杂度将达到3000*3000=9*10^6。我们还会想到另一种方法,就使用单链表将名字从小大的连接起来。这样,每新添一个节点,即从表头查找起,若找到相同的则纪录下来,否则插入适当的位置。这样,时间复杂度会相应的有所降低。对于查找,我们就不得不想到二叉排序树,如果对此题构造一棵二叉排序树,对于每一个节点,左孩子存放比父节点字串值小的字串,右孩子存放比父节点字串值大的字串,,这样平均时间复杂度将降到O(log n)。 数据结构的应用(2) 一个城市中有N个车站,已知M条连接这些车站的公共汽车单向路线,设计算法求出从第一号车站到第N号车站的最少换车次数. 这道题粗看起来似乎不太简单,但我们仔细分析一下题目就会发现,这道题实际上可以转化为最短路径问题来进行求解。 考虑经过的所有路线中,每条路线都只保留一头一尾两个车站,则经过的车站数目再减2实际上就是所求的换车次数了。要使换车次数最少,也就是要找从1到N的一条最短路径。而图中的边也需要重新设计。 在每一条路线中,任两个结点均由其中的前者向后者连一条边,然后将每条边的长度都定为1。 *

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档