首页 > 其他分享 >模板-整型哈希hval

模板-整型哈希hval

时间:2024-10-17 12:32:34浏览次数:1  
标签:const h2 hval h1 u64 整型 哈希 h3

可以考虑将单个int类型映射成3个uint64,再执行加减操作,从而实现将多个int的集合最终映射成3个uint64,通过比较这3个uint64是否相等来快速判断集合是否相同。

由于加法满足交换律,与顺序无法,因此上述做法天然支持多重集合。对于单重集合,可以考虑再加个set维护当前插入了哪些元素,已经有的元素就不需要再参与哈希了。

struct hval {
	u64 h1, h2, h3;
	u64 f1(u64 x) { return 1ULL * x * x * x * 1237123 + 19260817; }
	u64 f2(u64 x) { return 1ULL * x * x	    * 3217321 + 71806291; }
	u64 f3(u64 x) { return 1ULL * x		    * 1678931 + 74328249; }
	void set(int x) {
		h1 = f1(x & 0x7fffffff) + f1(x >> 31);
		h2 = f2(x & 0x07ffffff) + f2(x >> 27);
		h3 = f3(x & 0x00007fff) + f3(x >> 15);
	}
	hval(u64 a=0, u64 b=0, u64 c=0):h1(a), h2(b), h3(c) {}
	bool operator==(const hval &rhs) const {
		return h1 == rhs.h1 && h2 == rhs.h2 && h3 == rhs.h3;
	}
	friend hval operator+(const hval &a, const hval &b) {
		return hval(a.h1 + b.h1, a.h2 + b.h2, a.h3 + b.h3);
	}
	friend hval operator-(const hval &a, const hval &b) {
		return hval(a.h1 - b.h1, a.h2 - b.h2, a.h3 - c.h3);
	}
};

标签:const,h2,hval,h1,u64,整型,哈希,h3
From: https://www.cnblogs.com/chenfy27/p/18471816

相关文章

  • 哈希表
    在计算机世界中,哈希表如同一位聪慧的图书管理员。他知道如何计算索书号,从而可以快速找到目标图书。@目录1.哈希表的概念1.1哈希表的基本操作1.2哈希表的常用操作2.基于数实现哈希表2.1哈希表的结构体定义2.2哈希表的初始化2.3删除哈希表2.4哈希函数2.5查找哈希表中的元素2.6删除......
  • 非加密哈希函数库-SpookyHash
    地址:https://burtleburtle.net/bob/hash/spooky.htmlSpookyHashisapublicdomainnoncryptographichashfunctionproducingwell-distributed128-bithashvaluesforbytearraysofanylength.Itcanproduce64-bitand32-bithashvaluestoo,atthesames......
  • 【C++】精妙的哈希算法
    ......
  • 模板-自动取模整型mint
    输入为int64类型,底层用int64表示,每次运算后自动取模。template<intMOD>structMInt{i64x;intnorm(i64u)const{u%=MOD;if(u<0)u+=MOD;returnu;}MInt(i64v=0):x(norm(v)){}intval()const{returnx;}MIntoperator-()const{returnMInt......
  • C#哈希查找算法
    前言哈希查找算法是一种高效的查找算法,通过将键值映射到哈希表中的位置来实现快速访问。在C#中,哈希查找通常通过哈希表(Hashtable)或字典(Dictionary)来实现。实现原理哈希函数:将键值转换成哈希值,该哈希值决定了键值在哈希表中的位置。哈希表:一种数据结构,用于存储键值对。哈希表中的位......
  • C#哈希查找算法
    前言哈希查找算法是一种高效的查找算法,通过将键值映射到哈希表中的位置来实现快速访问。在C#中,哈希查找通常通过哈希表(Hashtable)或字典(Dictionary)来实现。实现原理哈希函数:将键值转换成哈希值,该哈希值决定了键值在哈希表中的位置。哈希表:一种数据结构,用于存储键值对。哈希表......
  • 字符串哈希
    字符串哈希哈希函数的基本性质:1)输入参数的可能性是无限的,输出的值范围相对有限2)输入同样的样本一定得到同样的输出值,也就是哈希函数没有任何随机机制3)输入不同的样本也可能得到同样的输出值,此时叫哈希碰撞4)输入大量不同的样本,得到的大量输出值,会几乎均匀的分布在整个输出域上......
  • 代码随想录算法训练营第八天(1)|哈希表理论基础
    文档讲解:代码随想录难度:有一点哈希表理论基础哈希表首先什么是哈希表,哈希表(英文名字为Hashtable,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hashtable就可以了)。哈希表是根据关键码的值而直接进行访问的数据结构。这么官方的解释可能有点懵,其实......
  • [CTSC2014] 企鹅 QQ——哈希
    [CTSC2014]企鹅QQ题目背景PenguinQQ是中国最大、最具影响力的SNS(SocialNetworkingServices)网站,以实名制为基础,为用户提供日志、群、即时通讯、相册、集市等丰富强大的互联网功能体验,满足用户对社交、资讯、娱乐、交易等多方面的需求。题目描述小Q是PenguinQQ网站的......
  • CF1746F Kazaee(随机化哈希)
    真的做不来这种题怎么办/ll题意给定\(n\)个数,\(q\)次操作:单点修改一个数的值。查询区间内所有数的出现次数是否均为\(k\)的倍数。\(n,q\le3\times10^5\)。分析一眼看上去只能带修莫队,而且常数还巨大无比。这种随机化哈希题一般是考虑一个必要不充分条件,但是充分的......