HASH算法具体解释
做了几年开发,一直不理解HASH算法的原理。今天偶从百度知道上看到一个牛人神一样的理解:
这个问题有点难度。不是非常好说清楚。 我来做一个比喻吧。 我们有非常多的小猪,每一个的体重都不一样,假设体重分布比較平均(我们考虑到公斤级别),我们依照体重来分,划分成100个小猪圈。
然后把每一个小猪,依照体重赶进各自的猪圈里。记录档案。 好了。假设我们要找某个小猪怎么办呢?我们须要每一个猪圈。每一个小猪的比对吗?
当然不须要了。 我们先看看要找的这个小猪的体重,然后就找到了相应的猪圈了。
在这个猪圈里的小猪的数量就相对非常少了。
我们在这个猪圈里就能够相对快的找到我们要找到的那个小猪了。 相应于hash算法。
就是依照hashcode分配不同的猪圈。将hashcode同样的猪放到一个猪圈里。
查找的时候。先找到hashcode相应的猪圈。然后在逐个比較里面的小猪。 所以问题的关键就是建造多少个猪圈比較合适。 假设每一个小猪的体重所有不同(考虑到毫克级别),每一个都建一个猪圈,那么我们能够最高速度的找到这头猪。 缺点就是。建造那么多猪圈的费用有点太高了。 假设我们依照10公斤级别进行划分。那么建造的猪圈仅仅有几个吧,那么每一个圈里的小猪就非常多了。我们尽管能够非常快的找到猪圈。但从这个猪圈里逐个确定那头小猪也是非常累的。 所以,好的hashcode。能够依据实际情况,依据详细的需求。在时间成本(很多其它的猪圈。更快的速度)和空间本(更少的猪圈。更低的空间需求)之间平衡。
样例非常贴切、也非常浅显易懂,但不够全面。
Hash。一般翻译做“散列”,也有直接音译为“哈希”的,就是把随意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这样的转换是一种压缩映射。也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成同样的输出,而不可能从散列值来唯一的确定输入值。
简单的说就是一种将随意长度的消息压缩到某一固定长度的消息摘要的函数。
HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做HASH值.也能够说,hash就是找到一种数据内容和数据存放地址之间的映射关系
比如字符串 hello的哈希算法
char* value = "hello"; int key = (((((((27*(int)'h'+27)* (int)'e') + 27) * (int)'l') + 27) *(int)'l' +27) * 27 ) + (int)'o' ;。
下边再来说一下HASH表(哈希表),哈希表作为一种数据结构。有着查询快、操作easy等特性,这点能够差别于数组和链表,数组的特点是:寻址easy。插入和删除困难。而链表的特点是:寻址困难,插入和删除easy。哈希表弥补了二者的不足,哈希表有多种不同的实现方法,为了让大家更easy理解,这里具体介绍下一种比較经常使用的方法:拉链法。我们能够理解为用一个线性数组来做寻址。数组中的元素为一个链表结构。用作元素集合(插入、删除等),这样便能够做到了寻址、插入、删除的高速操作,以下用一张图表示下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1MjUxODkwMzQ3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
文章仅仅是做一个简单的介绍。让大家更easy理解什么是哈希算法,算是抛砖引玉吧。假设有不正确的地方,欢迎大家指正。
HASH算法具体解释的更多相关文章
- hash算法
作者:July.wuliming.pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部分为打造一个最快的Hash ...
- Hash算法初见
hash算法 (hashmap 实现原理) Hash ,一般翻译做“ 散列” ,也有直接音译为“ 哈希” 的,就是把任意长度的输入(又叫做预映射, pre-image ),通过散列算法,变换成固定 ...
- 【数据结构与算法】一致性Hash算法及Java实践
追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...
- hash算法与hashmap
参考博客: http://zha-zi.iteye.com/blog/1124484 http://www.cnblogs.com/dolphin0520/p/3681042.html(参考了hash ...
- [区块链] 密码学中Hash算法(基础)
在介绍Hash算法之前,先给大家来个数据结构中对hash表(散列表)的简单解释,然后我再逐步深入,讲解一下hash算法. 一.Hash原理——基础篇 1.1 概念 哈希表就是一种以 键-值(key-i ...
- 【区块链】【一】Hash 算法【转】
问题导读1.哈希算法在区块链的作用是什么?2.什么是哈希算法?3.哈希算法是否可逆?4.比特币采用的是什么哈希算法? 作用在学习哈希算法前,我们需要知道哈希在区块链的作用哈希算法的作用如下:区块链通过 ...
- Hash算法的讲解
散列表,又叫哈希表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash ta ...
- Hash算法总结(转)
1. Hash是什么,它的作用先举个例子.我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志.也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人 ...
- HashMap中的hash算法总结
前言 算法一直是我的弱项,然而面试中基本是必考的项目,刚好上次看到一个HashMap的面试题,今天也来学习下 HashMap中的hash算法是如何实现的. 数学知识回顾 << : 左移运算 ...
随机推荐
- 今日SGU 5.8
SGU 109 题意:一个n*n的矩形,起点在1,1然后每次给你一个操作,走ki步,然后你可以删除任意一个点这次步走不到的,删了就不能再走了,然后问构造这种操作,使得最后删除n*n-1个点 剩下一个点 ...
- mysql 不能启动的两种错误提示及解决方法
在linux系统中安装mysql服务器详细步骤并解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw ...
- 用硬件卡克隆Linux集群
650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...
- 杠杆(leverage)就是支付保证金借钱进行交易,以小博大
杠杆(leverage)就是支付保证金借钱进行交易,以小博大: 比如你自己有100块,在向券商借100块,这就是杠杆交易了,杠杆简单地说来就是一个乘号,使用这个工具,可以放大投资的结果,无论最终的结果 ...
- SPOJ 3899. Finding Fractions 连分数
连分数乱搞,我反正是一眼没看出结果 某巨巨把这题讲解的比较详细 : http://blog.csdn.net/gogdizzy/article/details/8727386 令k = [a/b] 然 ...
- LoadRunner IP欺骗使用
- 【Codeforces Round #455 (Div. 2) C】 Python Indentation
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一个for循环之后. 下一个写代码的地方一是从(x+1,y+1)开始的 然后如果写完了一个simple statement 下次就有 ...
- ArcGIS Engine 线段绘制
转自ArcGIS Engine 线段绘制研究 基本步骤 构建形状 1. 创建 IPoint IPoint m_Point = new PointClass(); m_Point.PutCoords(x ...
- fromCharCode vs chr
fromCharCode vs chr echo off set "fn=%*" set php=d:/www/php5/php.exe cls echo. %php% %fn% ...
- 获取input file 选中的图片,并在一个div的img里面赋值src实现预览
代码如下利用html5实现:几乎兼容所有主流浏览器,当然IE必须是IE 6以上 [jquery代码] $(function() { $("#file_upload").change ...