- 1、本文档共147页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
集合及其表示 并查集 静态搜索表 二叉搜索树 AVL树 集合及其表示 集合是成员(对象或元素)的一个群集。集合中的成员可以是原子(单元素),也可以是集合。 集合的成员必须互不相同。 在算法与数据结构中所遇到的集合,其单元素通常是整数、字符、字符串或指针,且同一集合中所有成员具有相同的数据类型。 colour = { red, orange, yellow, green, black, blue, purple, white } name = { “An”, “Cao”, “Liu”, “Ma”, “Peng”, “Wang”, “zhang” } 集合中的成员一般是无序的,但在表示它时,常写在一个序列里。 常设定集合中的单元素具有线性有序关系,此关系可记作“”,表示“优先于”。 整数、字符和字符串都有一个自然线性顺序。指针也可依据其在序列中安排的位置给予一个线性顺序。 集合的有序链表类的定义 并查集 (Union-Find Sets) 并查集支持以下三种操作: Union (Root1, Root2) //并操作 Find (x) //搜索操作 UFSets (s) //构造函数 对于并查集来说,每个集合用一棵树表示。 为此,采用树的双亲表示作为集合存储表示。集合元素的编号从0到 n-1。其中 n 是最大元素个数。 在双亲表示中,第 i 个数组元素代表包含集合元素 i 的树结点。根结点的双亲为-1,表示集合中的元素个数。 在同一棵树上所有结点所代表的集合元素在同一个子集合中。 为此,需要有两个映射: 集合元素到存放该元素名的树结点间的对应; 集合名到表示该集合的树的根结点间的对应。 设 S1= {0, 6, 7, 8 }, S2= { 1, 4, 9 }, S3= { 2, 3, 5 } 初始时, 用构造函数 UFSets(s) 构造一个森林, 每棵树只有一个结点, 表示集合中各元素自成一个子集合。 用 Find(i) 寻找集合元素 i 的根。如果有两个集合元素 i 和 j, Find(i) == Find(j), 表明这两个元素在同一个集合中, 如果两个集合元素 i 和 j 不在同一个集合中,可用 Union(i, j) 将它们合并到一个集合中。 并查集操作的算法 查找 void UFSets :: Union ( int Root1, int Root2 ) { //求两个不相交集合Root1与Root2的并 parent[Root2] = Root1; //将Root2连接到Root1下面 } Find和Union操作性能不好。假设最初 n 个元素构成 n 棵树组成的森林,parent[i] = -1。做处理Union(n-2, n-1), …, Union(1, 2), Union(0, 1)后,将产生退化的树。 合并 按树结点个数合并 结点个数多的树的根结点作根 按树高度合并 高度高的树的根结点作根 Union操作的折叠规则 为进一步改进树的性能,可以使用如下折叠规则来“压缩路径”。即:如果 j 是从 i 到根的路径上的一个结点,且 parent[j] ? root[j], 则把 parent[j] 置为 root[i]。 静态搜索表 通常称用于搜索的数据集合为搜索结构,它是由同一数据类型的对象(或记录)组成。 在每个对象中有若干属性,其中有一个属性,其值可唯一地标识这个对象。称为关键码。使用基于关键码的搜索,搜索结果应是唯一的。但在实际应用时,搜索条件是多方面的,可以使用基于属性的搜索方法,但搜索结果可能不唯一。 实施搜索时有两种不同的环境。 静态环境,搜索结构在插入和删除等操作的前后不发生改变。? 静态搜索表 动态环境,为保持较高的搜索效率, 搜索结构在执行插入和删除等操作的前后将自动进行调整,结构可能发生变化。 ? 动态搜索表 衡量一个搜索算法的时间效率的标准是:在搜索过程中关键码的平均比较次数或平均读写磁盘次数(只适合于外部搜索),也称为平均搜索长度ASL(Average Search Length),通常它是搜索结构中对象总数 n 或文件结构中物理块总数 n 的函数。 在静态搜索表中, 利用数组元素的下标作为数据对象的存放地址。搜索算法根据给定值x, 在数组中进行搜索。直到找到x在数组中的位置或可确定在数组中找不到x为止。 另外衡量一个搜索算法还要考虑算法所需要的存储量和算法的复杂性等问题。 顺序搜索 (Sequential Search) 所谓顺序搜索, 又称线性搜索, 主要用于在线性结构中进行搜索。 设若表中有 CurrentSize 个对象,则顺序搜索从表的先端开始,
文档评论(0)