做了几年开发,一直不理解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. Linux 时区的修改

    Linux 时区的修改 1. CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件 ``` [root@centos7 ...

  2. 数据库事务及其EF中如何处理事务

    一.基础知识 1)         使用事务级别ReadUnCommited 会产生脏读现像,意味着读取到的为UnCommited(未提交)的数据.怎么理解呢?在使用该隔离级别的事务开始后.更新了数据 ...

  3. 辛星跟您玩转vim第三节之程序猿特须要的移动方式

    前面第二节我首先值得一提的是,我的vim教程pdf版本号已经写完了.大家能够去下载,这里是csdn的下载地址:csdn下载.假设左边的下载地址挂掉了.也能够自行在浏览器以下输入例如以下地址进行下载:h ...

  4. OSI模型与TCP/IP协议族

    OSI模型与TCP/IP协议族 年之后,TCP/IP协议族逐渐成为占主导的商用体系结构,广泛应用于Internet中,并通过广泛的測试.而OSI模型从来没有被全然实现过. 一.OSI模型: OSI与I ...

  5. UDP 打洞示例 包含 服务器 客户端

    客户端示例: #include "Net.h" #include "../p2pInfo.h" int main() { CUdp  udp; if (0!=u ...

  6. 2.vector数组

    创建vector数组 vector<,,,, }; 尾部插入 ; i < ; i++) { myint.push_back(i); } 读取头部和尾部 cout << myin ...

  7. Day4上午解题报告

    预计分数:50 +0+0=50 实际分数:50+0+10=60 毒瘤出题人,T3不给暴力分 (*  ̄︿ ̄) T1 https://www.luogu.org/problem/show?pid=T155 ...

  8. Android线程间通讯的几种方式

    1.runOnUiThread(Runnable)              在子线程中直接使用该方法,可以更新UI runOnUiThread(new Runnable(){//更新UI       ...

  9. 11. Linux——LCD驱动程序

    由上一节 得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 4) 使能LC ...

  10. 上传excel数据到数据库中

    上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../up ...