数据结构-完全hash,二级哈希java实现

哈希表详解 先来看一个TopK题目: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。      假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。 如何解答?Topk之前已经说过, 阅读详情

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.data.struct;

import java.util.Random;

/**
 * 
 * @author Administrator
 *完全散列,两级散列
 */
public class CompeletHash {
	private Object [][]slot;
	private int a;//系数a
	private int b;//系数b
	private int p=101;//最大值范围,假设数据是0到100
	private int firstSlot;//一级slot数
	public CompeletHash(int slotSize){
		firstSlot=slotSize;
		slot=new Object[slotSize][];
		a=new Random().nextInt(p);
		b=new Random().nextInt(p);
		for(int i=0;i<slotSize;i++){
			Integer mi=p/firstSlot+1;
			Object [] secondSlot=new Object[mi+3];
			secondSlot[0]=mi;
			Integer ai=new Random().nextInt(p);
			Integer bi=new Random().nextInt(p);
			secondSlot[1]=ai;
			secondSlot[2]=bi;
			slot[i]=secondSlot;
		}
		secondSize=new int[firstSlot];
		System.out.println("a:"+a+" b:"+b);
	}
	private int hashFirst(int key){
		return (a*key+b)%p%firstSlot;
	}
	private int hashSecond(int key){
		return (((int)(slot[hashFirst(key)][1])*key+((int)slot[hashFirst(key)][2]))%p%((int)slot[hashFirst(key)][0]));
	}
	
	private int []secondSize;
	
	public void put(int key,int value){
		Entry entry=new Entry();
		entry.setKey(key);
		entry.setValue(value);
		if(slot[hashFirst(key)][hashSecond(key)+3]!=null){
			System.out.println("confict:"+key);
		}
		slot[hashFirst(key)][hashSecond(key)+3]=entry;
		secondSize[hashFirst(key)]+=1;
	}
	
	public Object get(int key){
		Entry entry=((Entry)slot[hashFirst(key)][hashSecond(key)+3]);
		if(entry!=null){
			return entry.getValue();
		}else{
			return null;
		}
		
	}
	
	public int size(){
		int size=0;
		for(int i=0;i<firstSlot;i++){
			for(int j=3;j<slot[i].length;j++){
				if(slot[i][j]!=null){
					size+=1;
				}
				
			}
		}
		return size;
	}
	
	public void print(){
		for(int i=0;i<firstSlot;i++){
			for(int j=3;j<slot[i].length;j++){
				if(slot[i][j]!=null){
					System.out.print("("+((Entry)slot[i][j]).getKey()+","+((Entry)slot[i][j]).getValue()+") ");
				}
				
			}
			System.out.println();
		}
		System.out.println();
		for(int i=0;i<firstSlot;i++){
			System.out.print(secondSize[i]+" ");
		}
		System.out.println();
	}
	
	public void remove(int key){
		slot[hashFirst(key)][hashSecond(key)+3]=null;
	}
	
	private static class Entry{
		private int key;
		private int value;
		public int getKey() {
			return key;
		}
		public void setKey(int key) {
			this.key = key;
		}
		public int getValue() {
			return value;
		}
		public void setValue(int value) {
			this.value = value;
		}
		
		
	}
	public static void main(String[] args) {
		CompeletHash myHash=new CompeletHash(10);
		myHash.put(33, 33);
		myHash.print();
		myHash.put(44, 44);
		myHash.put(36, 36);
		myHash.print();
		System.out.println(myHash.size());
		for(int i=1;i<100;i++){
			myHash.put(i, i);
		}
		myHash.print();
		System.out.println(myHash.size());
	}

}

第二级hash会出现冲突可能是二级a,b系数选择问题,有能解决的可以和我联系共同探讨

【Java】哈希算法的实现-----Hash 五道大数据习题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 ①大文件 => 分解为小文件 hash(ip)%1000 1000个小文件 ②1000个小文件 => HashMap (IP,IP_count); => 当前HashMap根据IP_count进行排序 ③假设hash算法将同一个IP哈希到同一个文件 => 1000个在当前文件中频度最高的I... 阅读详情

相关推荐

【算法】哈希算法和哈希表

在计算机科学中,“哈希”这个词被用来描述将任意长度的数据转换为固定长度字符串的过程,这个过程与切碎并搅拌的过程类似,因此得名。这些算法通过将输入数据分割成若干个等长或不等长的块,并对每个块进行一系列的位运算、移位运算、模运算、异或运算等,得到一个中间结果,称为一个“消息摘要”。哈希表的性能依赖于哈希函数的质量、处理哈希冲突的方法以及哈希表的负载因子(即已存储元素的数量与哈希表大小的比例)。在实际应用中,比如在编程语言的标准库中,哈希表的实现往往是高度优化的,并结合以上多种技术来减少冲突的概率以及解决冲突。

数字人生 1348

二级hash。。?

二级hash 一级hash函数是固定的。 每个槽有自己的二级hash函数。 且 二级hash长度是该槽内相同element个数的平方。 这样能保证二级hash无碰撞发生。 一级hash中, 某个槽内有n个元素, 对应的二级hash长度为m=n^2; 这n个元素在该二级hash中的碰撞的pair有 C(n,2); 出现碰撞的概率为1/m 因此, 碰撞次数的期望就是

aalbertini的专栏 2140

GB2312二级汉字哈希算法

这个是用C编写的二级汉字哈希算法,移植性很好,大家可以看看哦

[数据结构no2]哈希表

给定关键字key 函数H(x) 可以由f=H(key)直接算出key在数组下标中的位置,直接进行查找 需要解决问题: 1.选择合适H(x)提高数组空间利用率和降低冲突率 2.当key1!=key2但H(key1)=H(key2)时如何解决冲突 3.如何查找哈希表中特定值 解决方法: 对于1:如何选定函数 1.直接定制:直接做线性函数 2.取一定的位数:取某特定几位进行处理 3.平方取中:先把这个数平方,然后取其中间某几位 4.叠加和:分割成几个部分,然后求和,取特定位数 5.取余:取H(key)=key m

cykap的博客 169

Uni-App推送踩坑实录:从云函数URL化到后台推送失效,我都经历了什么

本文详细记录了Uni-App开发者在接入uni-push 2.0时遇到的推送失效问题,从云函数URL化到后台推送失效的完整排查过程。通过系统化分析和与官方沟通,最终找到解决方案,并分享了预防措施与最佳实践,帮助开发者避免类似问题。

weixin_42552716的博客 487

PLC与变频器联动控制:从开关量、模拟量到通讯的接线与编程实战

在工业自动化系统中,电机调速控制是核心需求之一,其关键在于实现可编程逻辑控制器(PLC)与变频器之间的可靠联动。其基本原理是通过PLC输出控制信号,由变频器接收并驱动电机按设定速度运行。这项技术的核心价值在于实现电机的软启停、精确调速与节能控制,广泛应用于风机、水泵、传送带及精密张力控制等场景。其中,开关量控制以其接线简单、抗干扰能力强的特点,成为基础且可靠的方案;而模拟量控制则能实现无级平滑调速,满足更高精度的工艺要求。本文以西门子、三菱等主流品牌为例,深入解析了这两种主流控制方式的硬件接线、参数设置与梯

1271

算法打基础——HashⅡ: 全域哈希与完美哈希

这一节涉及数学超级多,各种数论知识,各种不明觉厉! 看了几遍,才勉强看懂一些,所以这 篇稍微简单的介绍着两种hash table, 免得瞎说说错了。 这一讲的主要知识点是:1. 全域哈希及构造 2. 完美哈希 1. 全域哈希及构造 介绍全域哈希之前,要先讨论一下普通哈希的一个缺点。 举个charles举得那个例子:如果你 和一个竞争对手同时为一家公司做compiler的sy...

weixin_30835933的博客 374

2 海康视觉平台VisionMaster 上手系列:大纲及准备

海康视觉平台VisionMaster 大纲,课前准备 快速入门 工业机器视觉 机器视觉

HuangGong2022的博客 1万+

算法导论 第十一章:哈希表

当将一个域U中的元素映射到一个哈希表T中时,我们如何映射?若映射到同一位置怎么办?前一个问题我们通过hash函数来解决,后一个问题我们通过“冲突处理”解决。 1.Hash 函数 (1)除法      h(k) = k mod m          m的选取:素数,且不要太靠近 2的幂次方 (2)乘法 其中,0 EG:当m=8=2^3,w=7时: (3)全域哈希

dllTimes 1294

西门子S7-200 SMART 实战解析:滑动平均值滤波算法在模拟量信号处理中的应用

本文详细解析了在西门子S7-200 SMART PLC中实现滑动平均值滤波算法的实战应用。通过处理模拟量信号如温度、压力等,该算法有效抑制信号干扰,提升系统稳定性。文章涵盖算法原理、程序框架、信号采集及调试优化,为工业自动化工程师提供实用指南。

gitlab7runner的博客 1158

企业和个人 AI 编程工具怎么选?2025 年 12 款主流工具(Claude/Cursor 等)核心能力 + 收费对比

2025 年最火的 12 款 AI 编程工具,像 Claude、Cursor 这些热门款,我把它们的核心能力、收费标准全扒得明明白白,看完这篇你不用再瞎琢磨,直接就能挑到对的!再说说 Cursor,美国 Cursor Labs 做的,还拿过红杉资本投资,2022 年推出后,2024 年收入直接涨了 6400%,势头很猛。总之,不管你是企业技术管理者、程序员,还是刚入门的 AI 小白,按自己的需求(语言、合规、预算)挑,保准能找到最适合的 AI 编程工具!最后给大家划重点,不同需求直接对号入座:?

hundred98的博客 2804

哈希算法的介绍和实现

百科中,从哈希算法的功能上,对哈希算法进行了定义。百科是这样定义哈希算法的:哈希算法可以将任意长度的二进制值映射为较短的,固定长度的二进制值。我们把这个二进制值成为哈希值。在Java中,哈希(Hash)是一个广泛应用于数据结构和算法中的概念,主要用于快速查找、存储和比较数据。哈希的核心在于哈希函数(Hash Function),它将输入(通常称为键,key)映射到一个固定范围的输出值,这个输出值称为哈希值(Hash Value)或哈希码(HashCode)。

₍˄·͈༝·͈˄*₎◞ ̑̑的博客 2396

Vivado实战:从零封装AXI-Lite接口的呼吸灯IP核

本文提供了一份详细的Vivado实战指南,手把手教你如何将Verilog编写的呼吸灯模块封装成带AXI-Lite接口的IP核。内容涵盖从创建IP框架、编写核心逻辑、连接AXI总线到在ZYNQ系统中调用并编写C程序进行软硬件协同测试的完整流程,是掌握FPGA软硬件协同设计的关键实践。

weixin_29233333的博客 598

科普文:【哈希算法:CRC哈希系列、BKDR Hash、APHash、DJB Hash、JSHash、RSHash、SDBM Hash、PJWHash、ELFHash、MurmurHash、FNV等】

在编程中,字符串转hash是一个常见且重要的操作。 为了简化这一过程,我们可以创建一个工具类HashUtils,其中包含了多种常用的字符串转hash算法,如CRC、MD5、SHA系列(SHA-1、SHA-256等)、BKDR hash、APHash、DJB Hash、JSHash、RSHash、SDBM Hash、PJWHash和ELFHash。 这些字符串转哈希算法简介如下: BKDR Hash:以131为底的对数计算,适用于字符串哈希。 APHash:通过加法、位操作和乘法计算哈希值,适用于字符串

为无为,事无事,味无味。 2185

深入解析雪球网股票行情数据爬取:基于WebSocket与API的实时数据获取技术实践

本文详细介绍了如何使用Python爬虫技术获取雪球网的股票行情数据,涵盖了WebSocket实时数据连接和RESTful API接口调用两种主要技术方案。完整的WebSocket客户端,支持实时行情订阅和数据处理功能丰富的API客户端,支持多种数据类型的获取数据存储和管理系统,使用SQLite进行数据持久化实时监控和预警系统,支持自定义预警规则技术指标计算,提供基本的数据分析功能。

2201_76125261的博客 1257

用 ABAP OAuth 2.0 Client 直连 SAP SuccessFactors:从体系到落地的一条龙实践指南

ABAP SMI允许在后端对外部服务的OData端点进行定义与自定义化配置,并以受信连接的方式暴露给ABAP应用调用。它并不替代OAuth,而是扮演端点与自定义参数的集中化定义者,最终认证依旧由完成。对于需要在ABAP后端发起临时或补充型OData调用的场景,SMI是一个轻量而清晰的集成入口。scope的客户端应用已经完成注册,API DomainCompany ID、证书或密钥都已归档。ABAP的Profile与Client已建立并绑定,OA2C_GRANT可见绿色访问状态。SMI。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 286

常见加密算法——哈希算法(MD)

加密算法是一种利用数学方法对数据进行变换的技术,旨在保护数据的安全,防止未经授权的访问或修改。对称加密算法非对称加密算法和哈希算法(也称为摘要算法)。MD5(Message Digest Algorithm 5)是一种广泛使用的加密哈希函数,它能够接受输入(如一个文件或一段文字)并生成一个固定长度的128位(16字节)的哈希值,通常以32位的十六进制数字表示。MD5算法由罗纳德·李维斯特(Ronald L. Rivest)在1992年设计,旨在确保数据的完整性。

HHX_01的博客 6224

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Redis数据结构-Hash哈希

ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认为512个),同时所有值小于hash-max-ziplist-value配置(默认为64个字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀,但是读写元素比较慢。几乎所有的主流编程语言都提供了哈希(Hash)类型,它们的叫法可能是哈希,字典,关联数组,映射。优点:简单,直观,灵活。

2301_76928097的博客 1696

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

哈希(Hash)算法与查找

哈希算法(Hash)​​,简单来说就是一个“​​数据粉碎机​​”。你给它输入任意内容(文字、文件、密码等),它会吐出一串​​固定长度的乱码​​(叫“哈希值”)。

2302_81240667的博客 2520

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

搞定leetcode面试经典150题之哈希算法

HashSet:是一个不允许重复元素的集合,它基于HashMap来实现,add()方法通过计算元素的哈希值来确定存储位置,避免元素重复。HashMap:是一个键值对集合,put()方法通过计算键的哈希值来确定存储位置,并将对应的值存储到该位置。哈希函数:哈希表的效率依赖于哈希函数的质量,优秀的哈希函数可以减少哈希冲突,提高操作效率。

buyaotutou的博客 1857

数据结构与算法——(Hash)哈希表与哈希算法

哈希算法(Hash Algorithm)是一种将任意长度的输入(称为预映射或消息)转换成固定长度输出(称为哈希值或散列值)的函数。哈希值通常是一个较短的、固定长度的数字串,它几乎唯一地对应于原始数据。

Lemon 1300

一文学懂哈希及如何手撕哈希算法(附详细例题)

哈希是一种非常重要的技术,广泛应用于计算机科学中的数据存储、加密、安全验证等领域。一个好的哈希函数需要具备快速计算、抗碰撞、不可逆等特性,而哈希算法的选择则依赖于具体的应用场景。在实际应用中,了解哈希的工作原理,掌握常见哈希算法的特性,能够帮助你在多个技术领域中更好地使用哈希。在 Java 中,哈希表(如HashMap和HashSet)提供了高效的查找、去重、计数等操作。在解决算法题时,合理利用哈希能够显著提高效率,尤其是当你面对需要频繁查找或存储某些数据时。对于查找问题,可以利用哈希表进行快速查找。

m0_62128746的博客 1万+

哈希(散列,Hash)算法总结-java版

目录 哈希算法简介 哈希算法的分类 加法Hash 位运算Hash 乘法Hash 除法Hash 查表Hash 混合Hash 常用的哈希算法 直接寻址法 数字分析法 平方取中法 折叠法 随机数法 除留余数法 流行的哈希算法 MD4 MD5 SHA及其他 碰撞性 哈希算法在java中的使用 Object Integer Long String Ha...

今天吃了吗的博客 2637

ConcurrentHashMap:哈希算法与位运算

摘要:本文深入解析了ConcurrentHashMap的核心优化技术,重点探讨了哈希算法与位运算的协同机制。通过分析哈希函数设计、位运算替代取模运算的原理,揭示了其性能优化的数学基础。文章详细讲解了2的幂次方容量的必要性,并通过性能对比实验(位运算比取模快3.75倍)验证了优化效果。同时介绍了ConcurrentHashMap的再哈希策略、分段哈希技术等关键设计,为理解高性能并发数据结构提供了底层视角。最后强调基础技术的巧妙组合往往能产生最强大的优化效果,体现了计算机科学中"简单即美"的

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 1315

加密与安全_深入了解哈希算法

哈希算法(Hash)又称摘要算法(Digest)。哈希算法是一种重要的加密算法,其核心思想是将任意长度的数据映射为固定长度的哈希值,这个哈希值通常用于验证数据的完整性、索引数据和加速数据查找。在Java中,hashCode()方法是一种哈希算法的应用。相同的输入一定会得到相同的输出不同的输入大概率得到不同的输出。在实际编程中,我们经常需要根据对象的哈希值来进行数据存储和查找,比如使用哈希表等数据结构。为了确保正确性,如果一个类覆写了equals()方法,就必须同时覆写hashCode()

小工匠 8000

Hash(哈希算法)和Hash Table(散列表)

哈希(Hash)原本是个人名,由于他提出哈希算法的概念,所以就以他的名字命名了。哈希算法也称为散列算法,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来确定唯一的输入值。简单的说就是一种将任意内容的输入转换成相同长度

pingyongpy的学习空间 1531
上一篇: Hash表分析以及Java实现
下一篇: 数据结构-二叉搜所树java实现
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值