读数据结构与算法分析

不相交集合

等价关系

满足三个性质

- 自反性
- 对称性
- 传递性

基本数据结构

基本思路

使用一个数组,下标表示该集合,内容表示指向的父亲

实现

类型声明

typedef int DisjSet[NumSets + 1] ;
typedef int SetType ;
typedef int ElementsType ; void Intialize(DisjSet S) ;
void SetUnion(DisjSet S,SetType Root1,SetType Root2) ;
SetType Find(ElementType X,DisjSet S) ;

初始化

void Intialize(DisjSet S)
{
int i ; for(i = NumSets; i > 0;i--)
S[i] = 0 ;
}

Union操作

不是最好的方法

void Union(DisjSet S,SetType Root1,SetType Root2)
{
S[Root2] = Root1 ;
}

Find操作

SetType Find(ElementType X, DisjSet S)
{
if(S[X] <= 0)
return X ;
else
return Find(S[X],S) ;
}

更好的Find操作

让根节点的数组内容为高度的相反数,也就是用负数表示

void SetUnion(DisjSet S,SetType Root1,SetType Root2)
{
if(S[Root2] < S[Root1]) //R2高
S[Root1] = Roo2 ;
else
{
if(S[Root1] == S[Root2])
S[Root1]-- ;
S[Root2] = Root1 ;
}
}

路径压缩

执行Union操作最终都会形成最坏情形的树

改进Find方法

改进的Find函数

SetType Find(ElementType X,DisjSet S)
{
if(S[X] <= 0)
return X ;
else
return S[X] = Find(S[X],S) ;
}

不相交集合ADT -数据结构(C语言实现)的更多相关文章

  1. 不相交集合ADT

    不相交集合数据结构保持一组不相交的动态集合S={S1,S2,...,SK},每个集合通过一个代表来识别,代表即集合中的某个成员. 如果x表示一个对象,不相交集合支持以下操作: MAKE-SET(x): ...

  2. 三元组ADT (数据结构C语言版) C++实现

    很久没用C语言,都忘了C语言中没有引用参数,下面的代码中用到了C语言没有的引用参数. 首先是一些表示状态的全局变量 common.h #define TRUE 1 #define FALSE 0 #d ...

  3. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  4. 【并查集】 不相交集合 - 并查集 教程(文章作者:Slyar)

    最近写了一个多星期的并查集,一瞬间贴出这么多解题报告,我想关于并查集的应用先告一段落吧,先总结一下. 在网上看到一篇关于并查集比较好的教程(姑且允许我这么说吧),不转过来是在可惜.献给爱学习的你 文章 ...

  5. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  6. 并查集(不相交集合)详解与java实现

    目录 认识并查集 并查集解析 基本思想 如何查看a,b是否在一个集合? a,b合并,究竟是a的祖先合并在b的祖先上,还是b的祖先合并在a上? 其他路径压缩? 代码实现 结语 @(文章目录) 认识并查集 ...

  7. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  8. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  9. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

随机推荐

  1. OpenID Connect Core 1.0(五)使用授权码流验证(下)

    3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...

  2. 详解Map集合体系及方法entrySet、keySet、values

    简单回顾Map集合: Map表示映射关系,以键值对的方式来保存数据.key和value一一对应.key是唯一的,不可重复,而value是可重复的,可以被多个key关联.虽然Map是放入两个数据,但是却 ...

  3. 如何通过github上传项目并在readme.md中展示图片二维码

    将本地项目上传至github   第一步:git init (创建仓库)   第二步:git add README.md (添加项目)git add *   第三步:git commit -m &qu ...

  4. [jQuery]常用正则表达式

    验证网址:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$电子 ...

  5. JQ+css3 导航栏到底部上移

    导航栏 .navigation { position: fixed; bottom: 100px; right: 100px; z-index:; } .navigation { transition ...

  6. background-image大小和位置的设置

    1.background-position: 当背景图很大时,可以让其固定显示在不同的位置.剩下的会隐藏. 引入背景图片:background-image: url("img/banner. ...

  7. day89 DjangoRsetFramework学习---restful规范,解析器组件,Postman等

     DjangoRsetFramework学习---restful规范,解析器组件,Postman等           本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析 ...

  8. Role Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using System.Collections.Ge ...

  9. python3 用户登录验证的小功能

    用户登录验证,记录一下,还需要修改黑名单不合理 #!/usr/bin/env python3 ''' 需求:编写登录接口 1.输入用户名和密码 2.验证用户密码成功后输出欢迎消息 3.3次没有验证通过 ...

  10. 蓝牙耳机电路和PCB(网上下载用于练习)

    这个是文件 https://pan.baidu.com/s/1smIyd_aNIt-ON8z8AeWn4Q 密码 w6ju 这是导入进去以后的样子,前面步骤我就跳过了 这是原作者的布局 但是我在看原理 ...