《左神算法初级班》第五节课:和哈希函数有关的三个结构与并查集

这篇博客介绍了哈希函数和相关数据结构,包括哈希表、布隆过滤器、一致性哈希以及并查集。讲解了哈希函数的性质及其在大数据去重中的应用,设计了RandomPool结构,讨论了布隆过滤器的误判率和实现,并阐述了一致性哈希如何实现负载均衡和数据迁移。此外,还涉及了并查集在解决岛问题中的作用。
摘要由CSDN通过智能技术生成
目录:

1)哈希函数与哈希表
2)布隆过滤器详解
3)一致性哈希结构
4)并查集结构与应用(岛问题)


题目一:认识哈希函数和哈希表
  1. 哈希函数的性质:
  • 输入域:无穷大
  • 输出域S:有限(hashcode十六进制)。十六位,每一位可以从0-9,a-f中选一个(1616 = 2 64)。
  • 同样的输入,有同样的输出
  • 不同的输入,可能也有同样的输出
  • 输入域数据量多了之后,在输出域S中均匀分布,因其离散性
    在这里插入图片描述
  • 要扩容,但扩容是成倍扩的,不是时刻扩。还可以离线扩。所以有了这些技巧,哈希表的增删改查的时间复杂度还是O(1)
  • 经典哈希:产生冲突时,挂成链表结构。因为均匀,所以后面挂的链是均匀上涨的。
  • 扩展哈希:挂的不再是链表,而是红黑树结构。
    在这里插入图片描述
  1. 哈希函数在大数据领域中的应用:
  • 背景:一个很大的文件,有100T。其中存着字符串文本,目的要找出重复的文本,达到去重的效果。
  • 解决方法:用哈希来分流。分配1000台机器,给机器标号0-999。把这个大文件中的数据分到1000台机器中去。相同的文本一定会分到同一个机器中去。
  • 把每行读出来,利用哈希函数算出hashcode,再把hashcode取模1000,模出来的值即为这一行要放的机器号中。重复的文本会来到同一台机器中。
    在这里插入图片描述

题目二:设计RandomPool结构

【题目】 设计一种结构,在该结构中有如下三个功能:

  • insert(key):将某个key加入到该结构,做到不重复加入。
  • delete(key):将原本在结构中的某个key移除。
  • getRandom(): 等概率随机返回结构中的任何一个key。

【要求】 Insert、delete和getRandom方法的时间复杂度都是 O(1)

  • 提示:默认哈希函数的增删改查的时间复杂度都为O(1)
  • 准备两张哈希表(为了严格等概率返回任何一个key)。
  • 使用哈希表,而不是改造哈希表。在这里插入图片描述
  • 只有add和getrandom操作

  • 加上remove操作:产生洞的时候,用最后一行string数据去填这个洞,再把最后一行数据删掉。此时,在整个index中还是连续的。(标index是为了每次getrandom时有数据)

    public static class Pool<K> {
     //K为泛型
		private HashMap<K, Integer> keyIndexMap;
		private HashMap<Integer, K> indexKeyMap;
		private int size;

		public Pool() {
   
			this.keyIndexMap = new HashMap<K, Integer>();
			this.indexKeyMap = new HashMap<Integer, K>();
			this.size = 0;
		}

		public void insert(K key) {
   
			if (!this.keyIndexMap.containsKey(key)) {
   
				this.keyIndexMap.put(key, this.size);
				this.indexKeyMap.put(this.size++, key);
			}
		}

		public void delete(K key) {
   
			if (this.keyIndexMap.containsKey(key)) {
   
				int deleteIndex = this.keyIndexMap.get(key)
利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值