做了几年开发,一直不理解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算法具体解释的更多相关文章

  1. hash算法

    作者:July.wuliming.pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部分为打造一个最快的Hash ...

  2. Hash算法初见

    hash算法 (hashmap 实现原理)   Hash ,一般翻译做“ 散列” ,也有直接音译为“ 哈希” 的,就是把任意长度的输入(又叫做预映射, pre-image ),通过散列算法,变换成固定 ...

  3. 【数据结构与算法】一致性Hash算法及Java实践

    追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...

  4. hash算法与hashmap

    参考博客: http://zha-zi.iteye.com/blog/1124484 http://www.cnblogs.com/dolphin0520/p/3681042.html(参考了hash ...

  5. [区块链] 密码学中Hash算法(基础)

    在介绍Hash算法之前,先给大家来个数据结构中对hash表(散列表)的简单解释,然后我再逐步深入,讲解一下hash算法. 一.Hash原理——基础篇 1.1 概念 哈希表就是一种以 键-值(key-i ...

  6. 【区块链】【一】Hash 算法【转】

    问题导读1.哈希算法在区块链的作用是什么?2.什么是哈希算法?3.哈希算法是否可逆?4.比特币采用的是什么哈希算法? 作用在学习哈希算法前,我们需要知道哈希在区块链的作用哈希算法的作用如下:区块链通过 ...

  7. Hash算法的讲解

    散列表,又叫哈希表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash ta ...

  8. Hash算法总结(转)

    1. Hash是什么,它的作用先举个例子.我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志.也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人 ...

  9. HashMap中的hash算法总结

    前言 算法一直是我的弱项,然而面试中基本是必考的项目,刚好上次看到一个HashMap的面试题,今天也来学习下 HashMap中的hash算法是如何实现的. 数学知识回顾 << : 左移运算 ...

随机推荐

  1. CSS 文本样式

    1. 文本样式 text <!--文本颜色color --> .text {color:red;} 2. 文本对齐方式    text-align <style> .text ...

  2. kali之EtterCap学习

    EtterCap是一个基于ARP地址欺骗方式的网络嗅探工具,主要适用于交换局域网络.借助于EtterCap嗅探软件,渗透测试人员可以检测网络内明文数据通讯的安全性,及时采取措施,避免敏感的用户名/密码 ...

  3. web知识—协议

    web使用超文本传输协议(HTTP,HyperText Transfer Protocol)进行通信.http在1990年左右出现,现在有0.9/1.0/1.1三个版本.在早期的互联网中的一些协议只能 ...

  4. ABAP调用外部WebService

    TCode:se80 选择 Package,输入我们自己的开发包,后回车 右击 开发包名称,选择菜单 出现创建向导窗体 选择"Service Consumer",点击 继续 选择& ...

  5. 用 OPENSSL 生成不同格式的密钥

    用 OPENSSL 生成不同格式的密钥 密钥 key 值包括 加密算法: RSA/DSA/ECC 加密位数: 1024/2048/4096 密钥口令:加密方式有很多 在使用 DSA/ECC 加密算法时 ...

  6. php课程 13-43 mysql的数据结构是什么

    php课程 13-43 mysql的数据结构是什么 一.总结 一句话总结:cs结构,客户端,服务器 1.常用的比较出名的数据库有哪些? SQL数据库(关系型):1.收费:DB2SqlserverOra ...

  7. 【Codeforces Round #428 (Div. 2) C】Journey

    [Link]:http://codeforces.com/contest/839/problem/C [Description] 给一棵树,每当你到一个点x的时候,你进入x的另外一每一个出度的概率都是 ...

  8. Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程

    MySQL需要升级到5.5.3以上版本才支持Laravel 5.4默认的utf8mb64字符编码.因此就把MySQL升级了一下,期间还是遇到些小问题,记录一下以供参考. 升级准备 备份之前MySql目 ...

  9. Vijos——T 1629 八

    https://vijos.org/p/1629 描述 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的还是8用二进制表示是1000.怎么样,有趣吧.当然题目和这些都没有关系. 某个 ...

  10. action中json的应用

    这篇文章重点介绍action中json数据的返回处理:假设须要看前端代码的一些特效或ajax的json接收,请看上一篇博客:http://blog.csdn.net/yangkai_hudong/ar ...