zoukankan      html  css  js  c++  java
  • Hash算法原理

    引自:http://zhidao.baidu.com/link?url=QDq4V0J-uP0HKtWo1gF6DLD-yWb0OiwoSUe8brpWphvthqXtQSnnAktjDR36noYnf_84mI2n4OeLq_xF_2PXsa
    这个问题有点难度,不是很好说清楚。 我来做一个比喻吧。
    我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分成100个小猪圈。
    然后把每个小猪,按照体重赶进各自的猪圈里,记录档案。 好了,如果我们要找某个小猪怎么办呢?我们需要每个猪圈,每个小猪的比对吗?
    当然不需要了。 我们先看看要找的这个小猪的体重,然后就找到了对应的猪圈了。
    在这个猪圈里的小猪的数量就相对很少了。
    我们在这个猪圈里就可以相对快的找到我们要找到的那个小猪了。 对应于hash算法。
    就是按照hashcode分配不同的猪圈,将hashcode相同的猪放到一个猪圈里。
    查找的时候,先找到hashcode对应的猪圈,然后在逐个比较里面的小猪。 所以问题的关键就是建造多少个猪圈比较合适。 如果每个小猪的体重全部不同(考虑到毫克级别),每个都建一个猪圈,那么我们可以最快速度的找到这头猪。缺点就是,建造那么多猪圈的费用有点太高了。 如果我们按照10公斤级别进行划分,那么建造的猪圈只有几个吧,那么每个圈里的小猪就很多了。我们虽然可以很快的找到猪圈,但从这个猪圈里逐个确定那头小猪也是很累的。 所以,好的hashcode,可以根据实际情况,根据具体的需求,在时间成本(更多的猪圈,更快的速度)和空间本(更少的猪圈,更低的空间需求)之间平衡。

    摘抄这个为了方便理解hadoop分布式
  • 相关阅读:
    20年美亚杯WRITE UP
    博客搬迁
    前端工程化1-模块
    移动端(h5)工具函数--视口适配(viewport)
    Understanding ES6 Modules(译)
    手写http请求并发、重试、超时函数
    两道编程题引发的思考
    前端基础走查(六):异步任务和事件循环
    vue 本地图片批量下载以及压缩成zip文件下载
    mybatis generator逆向工程
  • 原文地址:https://www.cnblogs.com/nearpengju123/p/4225846.html
Copyright © 2011-2022 走看看