首页 > 其他分享 >哈希hash

哈希hash

时间:2024-09-15 21:37:11浏览次数:8  
标签:hash 哈希 sum times base 一维

hash其实就是把一个字符串或数字映射成一个值域范围更小的数字,很简单对吧
那末总么实现呢?
D板子:https://www.luogu.com.cn/problem/P3370
我们首先固定一个base,然后要把字符串转化成base进制的数(base要包含值域且通常为大质数),并用unsigned long long 存(相当于对\(2^{64}\)取模)。
(eg:\(h\)1\(\times\)\(P^{5}\)+\(h\)2\(\times\)\(P^{4}\)+\(h\)3\(\times\)\(P^{3}\)+\(h\)4\(\times\)\(P^{2}\)+\(h\)5\(\times\)\(P^{1}\)+\(h\)6\(\times\)\(P^{0}\))
这是一维哈希
下面是一维哈希的前缀和
还是上面那个例子:\(h\)1\(\times\)\(P^{5}\)+\(h\)2\(\times\)\(P^{4}\)+\(h\)3\(\times\)\(P^{3}\)+\(h\)4\(\times\)\(P^{2}\)+\(h\)5\(\times\)\(P^{1}\)+\(h\)6\(\times\)\(P^{0}\)
\(sum[1]=\)\(h\)1\(\times\)\(P^{0}\),\(sum[2]=\)\(h\)1\(\times\)\(P^{1}\)+\(h\)2\(\times\)\(P^{0}\)
\(......\)
\(sum[6]=\)\(h\)1\(\times\)\(P^{5}\)+\(h\)2\(\times\)\(P^{4}\)+\(h\)3\(\times\)\(P^{3}\)+\(h\)4\(\times\)\(P^{2}\)+\(h\)5\(\times\)\(P^{1}\)+\(h\)6\(\times\)\(P^{0}\)
那末3~6的哈希值\(=\)\(sum[6]-sum[2]\times(6-3+1)\)
故l-r的哈希值\(sum[r]-sum[l-1]\times(r-l+1)\)
下面是二维哈希
一维哈希能把一个串或序列表示成一个数字,而二维的能把一个矩阵用一个数表示。
先把每行做个哈希,再按列对每行的hash再做哈希
(eg:http://noip.ybtoj.com.cn/contest/875/problem/3)
哈希表
其实手写用处不大
专业的讲解:https://oi-wiki.org/ds/hash/
很多时候可以用map或unordered_map实现,
可以把每个要插入的元素放到这里跑一边:

点击查看代码
ull shift(ull x) {
  x ^= mask;
  x ^= x << 13;
  x ^= x >> 7;
  x ^= x << 17;
  x ^= mask;
  return x;
}

注意

  1. 枚举正方形时可枚举正方形中心,再二分正方形边长。

标签:hash,哈希,sum,times,base,一维
From: https://www.cnblogs.com/OIergyy/p/18415681

相关文章

  • 字符串哈希&线段树维护字符串哈希
    本文哈希数组均为1-index,原始字符串均为0-index。哈希值类typedefunsignedlonglongull;ullbs=13131,bspw[MAXN];inlinevoidinit_bspw(){bspw[0]=1;for(inti=1;i<MAXN;i++)bspw[i]=bspw[i-1]*bs;}structHashNode{ullval;intlen;......
  • 哈希表简单介绍
    概念在顺序结构以及平衡树中,元素关键字与他们存储的位置并没有直接的映射关系,从而会影响查找关键字的效率,顺序结构中查找关键字的时间复杂度为O(N),平衡树查找关键字的时间复杂度为O(log2^N)。最理想的搜索方法——只搜索一次就能找到关键字。如果有一种数据结构,能够使得关键字根......
  • Java HashMap详解:源码分析、hash 原理、扩容机制、加载因子、线程不安全
    这篇文章将会详细透彻地讲清楚Java的HashMap,包括hash方法的原理、HashMap的扩容机制、HashMap的加载因子为什么是0.75而不是0.6、0.8,以及HashMap为什么是线程不安全的,基本上HashMap的常见面试题,都会在这一篇文章里讲明白。HashMap是Java中常用的数据结构之一......
  • java中的Map系列的集合HashMap、HashTable、TreeMap以及Collections和Collection的区
    1.Map的特性特性:key键-value值身份证号--->人可以通过key获取到valueMap它的key是唯一的,Map中的key是无序的而且是不重复的value是可以重复的。Map集合的基本方法:Vput(Kkey,Vvalue)添加元素如果put的key存在那么会用新的value的值替换掉原有的value值key......
  • P10469 后缀数组(Hash+二分)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • P10468 兔子与兔子(Hash)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • Hash Table 哈希表工作原理介绍及C/C++/Python实现
    HashTable哈希表工作原理介绍及C/C++/Python实现哈希表(HashTable),也称为散列表,是一种通过哈希函数将键(Key)映射到表中一个位置以便快速访问记录的数据结构。它提供了非常高效的数据检索、插入和删除操作。哈希表的基本原理是使用一个哈希函数将输入(通常是字符串)转换为一个......
  • P10467 [CCC 2007] Snowflake Snow Snowflakes(Hash)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • Python与Go语言中的哈希算法实现及对比分析
    哈希算法是一种将任意大小的数据输入转化为固定大小的输出(通常为一个散列值)的算法,在密码学、数据完整性验证以及数据索引等场景中广泛应用。本文将详细介绍Python和Go语言如何实现常见的哈希算法,包括MD5、SHA-1、SHA-256等。文章不仅提供代码示例,还会详细解释每个算法的特点、应用......
  • Hash表实践 —— 两数之和
    目录题目背景解题思路题目背景这个题目用常规的双循环就可以完成。但不是最优解。为什么?看看他的步骤数:N=【3,2,4】求结果为6的两个元素坐标如下,1).3+2=5不等于2).3+4=7不等于3).2+4=6等于,获取坐标【1,2】规律:2个数=1个步骤3个数=3个步骤4个数=6......