hashing

2024-02-01 00:58
文章标签 hashing

本文主要是介绍hashing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hashing定义了一种将 字符组成的 字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。通过一个简单的例子对此进行说明,比如,在数据库中存储一些人名,排列方式可能是下面这样:

Abernathy, Sara

Epperdingle, Roscoe

Moore, Wilfred

Smith, David

  所有名字均按字母排序......

  可以利用这些名字本身来作为数据库的索引值。数据库搜索算法首先会逐个字符的进行名字的搜索,直到找到为止。但是如果利用散列法对每个名字进行了转换,就可能为数据库中的每一个名字产生一个四位的索引值,其中位数长度取决于数据库中到底有多少个人名,象下面这样:

7864 Abernathy, Sara

9802 Epperdingle, Roscoe

1990 Moore, Wilfred

8822 Smith, David

  等等......

  这样,下次搜索名字时,就先搜索哈希并对数据库中的每个值进行一一对应。通常来讲,寻找四位的数字比寻找未知长度的字符串要来得快得多。毕竟寻找数字时每一位只有10种可能,而名字的长度未定,且每一位都有26种可能。

  散列算法,也称为哈希函数——哈希的英文意思为“无用信息”,因此哈希函数一词的由来可能是因为最终形成的哈希表里面是各种看起来毫无意义的描述值的混合。除用来快速搜索数据外,散列法还用来完成签名的加密解密工作,这种签名可以用来对收发消息时的用户签名进行鉴权。先用哈希函数对数据签名进行转换,然后将数字签名本身和转换后的信息摘要分别独立的发送给接收人。通过利用和发送人一样的哈希函数,接收人可以从数字签名获得一个信息摘要,然后将此摘要同传送过来的摘要进行比较,这两个值相等则表示数字签名有效。

  利用哈希函数对数据库中的原始值建立索引,以后每获取一次数据时都要利用哈希函数进行重新转换。因此,哈希函数始终是单向操作。没有必要通过分析哈希值来试图逆推哈希函数。实际上,一个典型的哈希函数是不可能逆推出来的。好的哈希函数还应该避免对于不同输入产生相同的哈希值的情况发生。如果产生了哈希值相同的情况,称为冲突。可接受的哈希函数应该将冲突情况的可能性降到非常小。

  下面列出了一些相对简单的哈希函数:

  1)余数法:先估计整个哈希表中的表项目数目大小。然后用这个估计值作为除数去除每个原始值,得到商和余数。用余数作为哈希值。因为这种方法产生冲突的可能性相当大,因此任何搜索算法都应该能够判断冲突是否发生并提出取代算法。

  2)折叠法:这种方法是针对原始值为数字时使用,将原始值分为若干部分,然后将各部分叠加,得到的最后四个数字(或者取其他位数的数字都可以)来作为哈希值。

  3)基数转换法:当原始值是数字时,可以将原始值的数制基数转为一个不同的数字。例如,可以将十进制的原始值转为十六进制的哈希值。为了使哈希值的长度相同,可以省略高位数字。

  4)数据重排法:这种方法只是简单的将原始值中的数据打乱排序。比如可以将第三位到第六位的数字逆序排列,然后利用重排后的数字作为哈希值。

  哈希函数并不通用,比如在数据库中用能够获得很好效果的哈希函数,用在密码学或错误校验方面就未必可行。在密码学领域有几个著名的哈希函数。这些函数包括MD2、MD4以及MD5,利用散列法将数字签名转换成的哈希值称为信息摘要(message-digest),另外还有安全散列算法(SHA),这是一种标准算法,能够生成更大的(60bit)的信息摘要,有点儿类似于MD4算法。

这篇关于hashing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665595

相关文章

白话解析:一致性hash算法 consistent hashing

以下内容转载自: 朱双印博客| 白话解析:一致性哈希算法 consistent hashing 原文地址:http://www.zsythink.net/archives/1182   在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的

一致性hash算法 - consistent hashing

1、   情景分析 前一篇博文分析了HashMap源码,HashMap在许多场景中作为存储数据的不二选择。   但是否使用HashMap就能解决所有在空间和时间的均衡问题??   下面考虑使用HashMap的二个极端情景:   原来有 N 台Server,所有数据通过一种 hash 算法(以hash(key)%N为例)映射到 N 台Server 中。   情景一:其中的 M 台服务器失效,那

php中Password Hashing加密方法详解

说到php的加密方式,很多人第一个想到的应该是MD5和sha1这种形式的加密方式。其实php中的加密方式不仅仅只有这一种,之前在博客中提到的php的RSA加密解密算法php的RSA加密解密算法,就是一种比较常见的加密方式。 这篇文章要讲的是php5.5版本新加的一种加密方式Password Hashing。 这种加密方式主要用到了4个php函数:password_hash、password_v

【PAT】1078. Hashing (25)

题目描述 The task of this problem is simple: insert a sequence of distinct positive integers into a hash table, and output the positions of the input numbers. The hash function is defined to be “H(key) =

读Ludo Hashing: Compact, Fast, and Dynamic Key-value Lookups for Practical Network Systems论文笔记

一种新的键值查找设计,在已知的紧凑型查找解决方案(包括Cuckoo)中,其空间最小(对于l位值,每个键值项为3.76 + 1.05l位)和Bloomier完美哈希。支持快速查找,快速更新和并发写入/读取。与现有的动态解决方案相比,Ludo Hashing实际上节省了40%至80%以上的内存成本。它仅花费几个GB的内存即可存储10亿个键值项目,并实现了高查找吞吐量:在具有多个线程的单个节点上,每秒超

1078 Hashing (25 分)

Hashing 其中平方探测的k通常小于等于m/2 版本1 //1.判断给定的table size是否为素数,不是的话寻找大于该数最小的素数作为替代//2.平方探测#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5;int H[maxn]={0};bool isPrime(int x){if(x<=1)

关于双重散列(double hashing)和Brent 改进算法(Brent’s improvement)的一道例题

当我们用两个哈希函数的时候,探测的效率得到了提升,并且在一定程度上避免了聚集。 给出两个哈希函数 h1,h2 满足 h1,h2:K——> {0,1,...,m-1} Double hashing:设定h(k,i) = (h1(k) + ih2(k)) mod m    其中(i = 0,1,2,...,m-1);m为表长 h2(k)的选择:每个值k的探测顺序必须达到所有位置0, . . .

一致性hash算法 - consistent hashing .

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object

Online_Video Moment Localization via Deep Cross-modal Hashing论文阅读2

膨胀卷积 Dilated Convolution是在标准卷积的Convolution map的基础上注入空洞,以此来增加感受野(reception field)。因此,Dilated Convolution在Standard Convolution的基础上又多了一个超参数(hyper-parameter)称之为膨胀率(dilation rate),该超参数指的是kerne的间隔数量。 论文相

Online_Video Moment Localization via Deep Cross-modal Hashing论文阅读1

这里写目录标题 各类标志局部特征与全局特征Bi-TCN 待补充 各类标志 未修剪的视频集合 代表第k个视频。 对于第k个视频有多少个查询。 对于一个视频的查询集。 由人员标定的,第k个视频,针对查询集的所有目标片段。 第j个目标片段的开始时间和结束时间。 训练好的跨模态哈希网络的出的候选时刻集。 由C3D产生的第k个视频的局部特征集合,Rx是 VEN: