数据结构集合与字典

本文探讨了数据结构中的并查集,介绍了find和Union操作及其加权规则。接着讲解了字典的概念,包括跳表的工作原理和搜索、插入、删除操作。最后,深入分析了散列,包括散列函数的选择、冲突解决策略如开放地址法和开散列法,并讨论了装载因子对散列表性能的影响。
摘要由CSDN通过智能技术生成

并查集
用树形结构来表示元素和所属子集的关系
find算法:

int UFSets::Find(int x)
{
   
	if(parent[x]<0)
		return x;
	else
		return Find(parent[x]);
}

Union操作
为了得到两个集合的并,只要将表示其中一个集合的树的根节点置为另一个集合的树的根节点的子女即可。
Union的加权规则
如果以i为根的树中节点个数小于以j为根的树中节点个数,则让j成为i的父。加权后树的高度不超过 ⌊ l o g 2 m ⌋ \lfloor log_{2}m\rfloor log2m

int UFSets::WeightedUnion(int Root1,int Root2)
{
   
	int r1=Find(Root1),r2=Find(Root2),temp;
	if(r1!=r2)
	{
   
		temp=parent[r1]+parent[r2];
		if(parent[r2]<parent[r1])
		{
   
			//让r1接在r2下面
			parent[r1]=r2;
			parent[r2]=temp;
		}
		else
		{
   
		//让r1接在r2下面
			parent[r2]=r1;
			parent[r1]=temp;
		}
	}
}

应用:等价类划分

字典
一对<key,value>对的集合
不同元素的key各不相同

跳表
0级链是包含所有元素的有序链表,第 2 1 , 2 ∗ 2 1 , 3 ∗ 2 1 . . . 2^{1},2*2^{1},3*2^{1}... 21,221,32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值