首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏

    常见hash算法

    hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值),这样可以快速在数组等条件中里面存取数据.  至于key值,一般都是用某种算法(所谓的Hash算法)算出来的.例如:字符串的Hash算法, char* value = "hello"; int key = (((((((27* (int)'h'+27 Hash算法有很多很多种类。具体的可以参考之前我写的Hash算法的一些分析。 本处给大家提供一个集合了很多使用的Hash算法的类,应该可以满足不少人的需要的: Java代码 常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。 APHash也是较为优秀的算法。DJBHash,JSHash,RSHash与SDBMHash各有千秋。PJWHash与ELFHash效果最差,但得分相似,其算法本质是相似的。

    2.8K20发布于 2019-05-25
  • 来自专栏开源部署

    Nginx学习 – ip_hashhash算法

    直接看代码: 162 for ( ;; ) { 163 164 for (i = 0; i < 3; i++) {  165            hash = (hash * 113 + iphp 这样做的目的是保证ip地址前三位相同的用户经过hash计算将分配到相同的后端server。 2、哈希函数:hash = (hash * 113 + iphp->addr[i]) % 6271 作者使用了这样一个极为简单的hash函数,当然目的是为了性能。而这样一个hash函数的效果如何呢? = 89; for(int i = 0; i < 3; i++) {       hash = (hash * 113 + rand_num[i]) % 6271; //hash运算     }     hash = hash % peer_number;     result[hash]++; //统计hash值命中   } // 设定一个阈值per,当每个server命中次数与平均值偏差超过该比例时记录

    1.7K20编辑于 2022-06-30
  • 来自专栏数据分析与挖掘

    hash算法的应用

    =len(b): return False #用来存储映射关系 #例如{1:'x',2:'y',3:'z'} hash={} #用来存储是否被使用 'x','y','z'] #那么1:'y'就重复使用了,就返回False used={} for i in range(len(a)): if a[i] in hash : #不是第一次出现,检查映射关系是否匹配 if hash[a[i]]! #检查这个单词是否使用过,使用过则返回False if b[i] in used: return False hash if b[j][:len(i)]==i: b[j]=i return " ".join(b) print(replacewords(a,b)) 方法二:利用hash

    57720发布于 2020-08-26
  • 来自专栏仙士可博客

    php hash算法

    ash算法,又称散列算法,杂凑算法 它可以将一个长度不固定的数据,通过算法,获取其特征值生成一个固定的,较短的数据,压缩其文件标识. 实现用一个较短的数据进行标识一个大数据标识.比如用32位字符串的md5,标识整个文件 我们可以自定义一个算法,将中文字符串,只获取拼音首字母的特征,转成hash: "仙士可"=>'xsk' "阿伟死了" 因此,一个优秀的hash算法,应该具备以下条件: 1:正向快速计算,能通过输入的数据,在有限的时间,利用有限的资源就能计算出hash值(比如说你要用数据 做1亿次加减乘除法计算,虽然很难重复了,但是每次都计算 ,否则将失去hash本身的特性 目前最经典的hash算法有md5,time33,sha 在实际使用中,md5是字符串hash,并且性能较差,php在hashtable中hash计算使用的是time33算法 最后附带上使用php实现的各种流行hash算法 <?

    1.7K20发布于 2020-09-30
  • 来自专栏程序猿~

    HashMap - hash算法详解

    重点代码 hash再运算 static final int hash(Object key) { int h; return (key == null) ? , boolean evict) { ...代码省略 // 计算桶位置 if ((p = tab[i = (n - 1) & hash]) == null) tab[i] = newNode(hash, key, value, null); ...代码省略 2. 代码讲解 key的hash值做再运算 这里采用的是hash值高16位与低16位的异或运算,这里有两个问题,1-为什么要高位与低位进行运算,2-为什么用异或进行运算,而不用&或者|呢 原因: 因为之后的计算 hash桶位置的时候,用的算法是除余,并且数组的长度始终是2的n次方,所以桶位置的运算用2的n次方-1做与运算即可,但是这样hash高位的特征就丧失了,为了将高位特征也加入到hash计算中,所以这么操作

    1.1K20发布于 2021-03-18
  • 来自专栏决胜机器学习

    有趣的算法(三)——Hash算法

    有趣的算法(三)——Hash算法 (原创内容,转载请注明来源,谢谢) 一、Hash算法 近期看到用hash实现基于hash的简单的小型数据库(传统大型数据库用的都是B+tree),感觉挺感兴趣,故先研究 hash算法,近期会用hash实现一个小的数据库。 1、hash函数 作用是把任意长度的输入,通过hash算法得到固定函数的输出,输出的内容就是hash值。这种映射是一种压缩映射,即输出的内容占用的存储空间可能会小于输入的内容。 5、经典hash算法:DJB hashfunction(俗称Times33) 该算法效率和随机性很高,运用广泛,包括Perl、Berkeley DB、Apache、MFC、STL、PHP等的Hash, 二、Hash表 1、算法 hash表的时间复杂的O(1),即key通过hash函数,找到值所在的地方。

    1.6K70发布于 2018-03-07
  • 来自专栏积累沉淀

    hash算法原理详解

    只需要调整哈希函数算法即可在时间和空间上做出取舍。 在Hash表中,记录在表中的位置和其关键字之间存在着一种确定的关系。这样我们就能预先知道所查关键字在表中的位置,从而直接通过下标找到记录。 例Hash(80127429)=(80127429)13=8*137+0*136+1*135+2*134+7*133+4*132+2*131+9=(502432641)10如果取中间三位作为哈希值,得Hash +=X[i++];   sum%=N;      //N是记录的条数   } 这种函数把字符串的前10个字符的ASCⅡ值之和对N取摸作为Hash地址,只要N较小,Hash地址将较均匀分布[0,N]区间内 算法就学习总结到这里了,今天度过了22岁生日,晚上还是坚持完成了写这篇博客,今天暂时不写了,明天来总结Java中的hashcode和equals方法, 转载请指明出处http://blog.csdn.net /tanggao1314/article/details/51457585 参考资料 大话数据结 算法导论

    4.9K50发布于 2018-03-08
  • 来自专栏程序员奇点

    Hash 算法有哪些?

    Hash算法的有哪几种,优缺点,使用场景 Hash ,一般叫做散列算法,就是把任意长度的输入通过散列算法,变换成固定长度的输入,相当于一种压缩映射,将任意长度的消息压缩到某一固定长度的消息摘要的函数。 >>10) ^ (hash>>20)); } • 乘法Hash;这种类型的Hash函数利用了乘法的不相关性(乘法的这种性质,最有名的莫过于平方取头尾的随机数生成算法,虽然这种算法效果并不好); static 不过,因为除法太慢,这种方式几乎找不到真正的应用 • 查表Hash;查表Hash最有名的例子莫过于CRC系列算法。虽然CRC系列算法本身并不是查表,但是,查表是它的一种最快的实现方式。 查表Hash中有名的例子有:Universal Hashing和Zobrist Hashing。他们的表格都是随机生成的。 • 混合Hash;混合Hash算法利用了以上各种方式。 各种常见的Hash算法,比如MD5、Tiger都属于这个范围。

    4.6K40发布于 2020-08-10
  • 来自专栏全栈程序员必看

    murmurhash算法_hash function

    摘自murmur-hash php扩展实现,稍作整理留加备用。。 --------------------------------------------------------- // Finalization mix - force all bits of a hash

    66320编辑于 2022-11-07
  • 来自专栏全栈程序员必看

    Hash算法的讲解

    那么这些Hash算法到底有什么用呢?    与加密算法不 同,这一个Hash算法是一个不可逆的单向函数。采用安全性高的Hash算法,如MD5、SHA时,两个不同的文件几乎不可能得到相同的Hash结果。 五 查表Hash 查表Hash最有名的例子莫过于CRC系列算法。虽然CRC系列算法本身并不是查表,但是,查表是它的一种最快的实现方式。 六 混合Hash 混合Hash算法利用了以上各种方式。各种常见的Hash算法,比如MD5、Tiger都属于这个范围。 第三部分、最快的Hash算法   接下来,咱们来具体分析一下一个最快的Hash算法。   

    2.7K30编辑于 2022-09-20
  • 来自专栏EffectiveCoding

    Kafka 之压缩算法&Hash算法

    image.png 然后接下来Hash算法Hash算法在Kafka 中被用来作为具体的分区选择,这决定分区的选择是否公平、分配到的各个分区的消息和请求书是够均衡。 Kafka 中使用的Hash算法叫做murmur2,murmurHash是一种比较先进的非加密Hash算法(主要还是用来Kafka这种选择的场景),当前最新的版本是murmur3,它能在有规律的输入时也能保证分布较为均匀 我们经常在一些场景中听到加密Hash 或者 不加密Hash这样的一些词儿,有时候感觉一些Hash散列算法就是加密,其实这方面是存在一些界限的。 准确来说Hash算法是一种消息摘要算法,不是一种加密算法,但是因为Hash算法的单向运算(存在一定程度上的不可逆性),所以经常被用来作为加密算法中的一个重要构成部分,但是完整的加密算法远不止Hash算法 (通常来说,加密算法是可逆的),除了加密算法Hash本身最适合的场景其实是HashMap、Kafka分区选择这种选择的场景。

    2.3K30发布于 2019-07-31
  • 来自专栏IT码农

    PHP中的Hash算法

    PHP的HashTable采用的拉链法来解决冲突, 这个自不用多说, 我今天主要关注的就是PHP的Hash算法, 和这个算法本身透露出来的一些思想. 对于字符串而言这是目前所知道的最好的哈希算法,原因在于该算法的速度非常快,而且分类非常好(冲突小,分布均匀). 算法的核心思想就是: hash(i) = hash(i-1) * 33 + str[i] 在zend_hash.h中,我们可以找到在PHP中的这个算法: static inline ulong (split //, shift) { hash = hash*33 + ord( } return $hash; } 在PHP的hash算法中, 我们可以看出很处细致的不同 Hash算法(都采用初始hash为0), 为什么选5381呢?

    97921编辑于 2022-03-24
  • 来自专栏建帅技术分享

    哈希算法hash)加密解密

    一、哈希算法hash)加密解密介绍 哈希,英文叫做 hash。 哈希函数(hash function)可以把 任意长度的数据(字节串)计算出一个为固定长度的结果数据。 我们习惯把 要计算 的数据称之为 源数据, 计算后的结果数据称之为 哈希值(hash value)或者 摘要(digests)。 加解密算法hash算法 不同点有: 加解密算法 是可逆的,hash算法是不可逆的。 hash算法可以对很大的数据产生比较小的哈希值,而加密算法源数据很大,加密后的数据也会很大 加解密算法 可以分为 对称加密 以及 不对称加密 对称加密 指 加密和解密 使用相同的 密钥 。 hash_jiemi.py # coding=utf-8 """ @Project :pachong-master @File :hash_jiemi.py @Author

    8.3K20编辑于 2022-08-24
  • 来自专栏向治洪

    java解决hash算法冲突

    利用开放地址法的一般形式,线性探查法的探查序列为:         hi=(h(key)+i)%m 0≤i≤m-1 //即di=i 用线性探测法处理冲突,思路清晰,算法简单,但存在下列缺点: ① ② 按上述算法建立起来的哈希表,删除工作非常困难。假如要从哈希表 HT 中删除一个记录,按理应将这个记录所在位置置为空,但我们不能这样做,而只能标上已被删除的标记,否则,将会影响以后的查找。 (2)线性补偿探测法 线性补偿探测法的基本思想是: 将线性探测的步长从 1 改为 Q ,即将上述算法中的 j = (j + 1) % m 改为: j = (j + Q) % m ,而且要求 Q 与

    1.1K90发布于 2018-02-01
  • 来自专栏算法微时光

    djb2 hash算法

    hash function Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。 djb2 hash function 算法实现: // generates a hash value for a sting // same as djb2 hash function //构造哈希函数 f(hash)= hash * 33 + c unsigned int CountMinSketch::hashstr(const char *str) { unsigned long hash = 5381; int c; while (c = *str++) { hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ } 参考 djb2:一个产生简单的随机分布的哈希函数 常见的hash算法及其原理

    1.7K40发布于 2020-04-23
  • 来自专栏计算机视觉战队

    Deep Hash(深度哈希算法

    哈希的简单介绍: 用一个比喻来说明什么是哈希算法:假设有N只小猪,它们的体重各不相同,一开始我们把它们放在一个猪圈里面。如果想寻找其中某只小猪,只能一个一个的找,很耗时间。 现在我们用哈希算法的思想来管理小猪,我们按照小猪的体重来分猪圈。现在如果你想要找其中某一只小猪,先看看他的体重,然后到对应体重的猪圈里面寻找,这样时间就节省了。 上面的比喻中的小猪的体重就相当于Hash_code,每个变量都有一个Hash_codee。如果用哈希算法来查找某一个变量,首先要匹配Hash_code,这样就能快速的查找了。 哈希算法: ? 几种方法的介绍: ? ? ? 深度哈希算法 首先对相似度矩阵进行分解,得到样本的二值码;然后使用CNN进行拟合前面得到的二值码。 ? 代码实现: ?

    3.6K70发布于 2018-04-17
  • 来自专栏五分钟学算法

    重学算法Hash 算法原理及应用漫谈

    ,对hash算法进行一个讲解。 这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。活动开发中经常使用的MD5和SHA都是历史悠久的Hash算法算法得到的Hash值。 整个Hash算法的过程就是把原始任意长度的值空间,映射成固定长度的值空间的过程。 2、Hash的特点 一个优秀的hash算法,需要什么样的要求呢? 一致性hash的基本原理是将输入的值hash后,对结果的hash值进行2^32取模,这里和普通的hash取模算法不一样的点是在一致性hash算法里将取模的结果映射到一个环上。

    1.3K10发布于 2019-12-11
  • 来自专栏HUC思梦的java专栏

    数据分布算法hash+ 一致性 hash + redis cluster 的 hash slot

    讲解分布式数据存储的核心算法,数据分布的算法 hash 算法 -> 一致性 hash 算法(memcached) -> redis cluster 的 hash slot 算法 用不同的算法,就决定了在多个 算法和弊端(大量缓存重建)# ? 的确它的最大弊端就是,增加或者减少节点的时候,基本上所有数据都要重建路由 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡)# ? 这样就负载均衡了 redis cluster 的 hash slot 算法 redis cluster 有固定的 16384 个 hash slot,对每个 key 计算 CRC16 值,然后对 16384 hash slot 移动到其他 master 上去 移动 hash slot 的成本是非常低的 客户端的 api,可以对指定的数据,让他们走同一个 hash slot,通过 hash tag 来实现 ?

    1.5K30发布于 2020-09-03
  • 来自专栏crossoverJie

    一致 Hash 算法分析

    Hash 取模 随机放置就不说了,会带来很多问题。通常最容易想到的方案就是 hash取模了。 可以将传入的 Key 按照 index=hash(key)%N 这样来计算出需要存放的节点。 其中 hash 函数是一个将字符串转换为正整数的哈希映射方法,N 就是节点的数量。 这样可以满足数据的均匀分配,但是这个算法的容错性和扩展性都较差。 比如增加或删除了一个节点时,所有的 Key 都需要重新计算,显然这样成本较高,为此需要一个算法满足分布均匀同时也要有良好的容错性和拓展性。 一致 Hash 算法 一致 Hash 算法是将所有的哈希值构成了一个环,其范围在 0~2^32-1。 为了解决这个问题,一致哈希算法引入了虚拟节点。将每一个节点都进行多次 hash,生成多个节点放置在环上称为虚拟节点: 计算时可以在 IP 后加上编号来生成哈希值。

    29340编辑于 2022-08-19
  • 来自专栏人人都是架构师

    hashlib:Python中常用hash算法

    前言 hashlib库定义了一个API来访问不同的密码散列算法。 其底层由OpenSSL提供,所以OpenSSL库提供的所有算法都可以用,包括: MD5 SHA1 SHA224 SHA256 SHA384 SHA512 当然,这上面列举的只是其支持的一部分。 hashlib.algorithms_guaranteed) print(hashlib.algorithms_available) 运行之后,效果如下: algorithms_available:获取可以运行在python解释器中的hash 算法名称的集合。 algorithms_guaranteed:获取保证在所有平台上此模块支持的hash算法名称的集合。

    36830编辑于 2023-09-19
领券