Hash,通常翻译成哈希算法,中文也称为散列,即通过一种变换,将非规则的原始数据映射到固定尺度上,从而便于筛选和对比。
很像一个字典,每一个字的读音、笔画 比较复杂,但是都能够通过页码索引到,这个页码就是我们针对原始数据的映射结果,或者说散列值。
举个例子,给定一段文字,让你统计出里面里面出现频率最高的10个字。
一. 哈希函数选择
选择映射方法,这里我们假设对候选的1000个字进行编号,每一个数字对应一个编号:
“你” -> 125
“变” -> 778
“夜” -> 536
“计” -> 98
通过这种编号方式,对原始文件进行遍历,我们能够得到对应的编码,记录每一个编码的次数,就能够对你需要的Top10进行描述。
二. 分布式哈希
上述方法有一个好处,当你需要处理的问题过于庞大时,怎么能够更快处理呢?
对于服务器端Server,假设我们每个小时都能收到来自用户的上千万条请求,那么如何统计这里面的 Top10 呢?
看上去这是一个很棘手的问题,但实际上很好解决,构建分布式算法,将1000万条请求分配给1000台机器去做,每台机器处理1万条数据,这样处理过程看上就变得简单多了,在每台机器处理完之后,只需要对这10000个结果进行二次统计即可。
从概率的角度来分析,往往我们不需要每台机器都去处理 Top10,也许每台都处理 Top1,实际结果总是对的,这也是分布式加速的方案(我们不需要100%精确,只要保证大概的准确率就能满足要求)。
好了,那就大家准备一个自己遇到的问题,实现一下吧。