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算法是如何实现的. 数学知识回顾 << : 左移运算 ...
随机推荐
- Java表单设计器orbeon点滴
包含表单设计器和运行展现 一个完整的应用 页面部分都是使用XML和XHTML进行服务端的组合出来的,具体逻辑有些复杂 设计器缺少一个最常用的:repeat,如果需要只能手动编写代码(参考官方文档步骤有 ...
- Onsctl 配置ONS服务(10G)
Onsctl Onsctl这个命令是用来管理ONS(Oracle Notification Service)是OracleClustser实现FAN Event Push模型的基础. 在RAC环境下. ...
- 爬虫爬数据时,post数据乱码解决的方法
近期在写一个爬虫,目标站点是:http://zx.bjmemc.com.cn/.可能是为了防止被爬取数据,它给自身数据加了密. 用谷歌自带的抓包工具也不能捕获到数据. 于是下了Fiddler. ...
- 给Linux设置SSH登录邮件提醒
给Linux设置SSH登录邮件提醒 心血来潮,用 last 命令查看了登录记录,不看不知道,一看就有问题.竟然有两个陌生的IP ,一个是美国欧莱雅的,一个是北京联通的.真是郁闷,密码简单了真不行 后来 ...
- ubuntu-文件管理、编辑
1.创建单层文件夹 mkdir test 如果你想要创建多层文件夹,这时候你需要添加一个参数-p mkdir -p t1/t2/t3 如果你不加-p的话,它会提示说找不到目录 2.分屏查看内容 mor ...
- actionMode - 在屏幕中的显示位置设置
actionMode 默认的显示位置是在屏幕上方的,如果想要移到下方,可以添加如下属性 在AndroidManifest.xml 的activity中,做如下修改 <activity andro ...
- Spring中提供的集合工具类util CollectionUtils
转自:https://blog.csdn.net/fangwenzheng88/article/details/78457850 CollectionUtils类 /* * Copyright 200 ...
- 关于Webpack详述系列文章 (第一篇)
WebPack官网地址(https://webpack-china.org/) 1. 什么是WebPack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript ...
- vue打包添加样式兼容前缀
在ios8 版本上的h5对flex的支持不太好,需要有兼容的写法. vue-cli自带了postCss autoprefixer 进行兼容处理,配置如下 在vue-loader.config.js中开 ...
- Vue 消息无缝滚动
vue实现消息向上无缝滚动效果 <ul class="new-list" :class="{anim:animate}" @mouseenter=&quo ...