
算法-大数据
拉丁解牛说技术
大道至简、行胜于言。坚持实用至上,擅长结合大厂生产实践案例,持续专注分享互联网金融技术架构实战经验。
展开
-
找到100亿个URL中重复的URL以及搜索词汇的top K 问题
前天去腾讯面试大数据开发,问到的题目,总结一下。题目一、有一个包含100亿个URL的大文件,假设每个URL占用16B,请找出其中所有重复的URL。题目二、某搜索公司一天的用户搜索词汇是海量的百亿数据量,请设计一种求出每天最热top 100 词汇的可行办法。题目一解法: 由于数据量很大,16*100亿B = 1600亿Byte,约等于160G。10亿Byte约等于1G大小...原创 2018-10-16 18:38:41 · 3584 阅读 · 0 评论 -
大白话 强大的布隆过滤器算法-极大降低存储空间
“宁可错杀三千,绝不放过一个”,这是布隆过滤器的失误类型金句。1、什么是布隆过滤器 了解熟悉布隆过滤器,先从了解hash函数开始。最简单说,一个数据经过hash函数计算后,会得到另一个输出值。hash函数能给你的保证就是,相同的输入值,经过计算后,一定得到相同的输出值。但是不给你保证不同的输入值,会得到不同的输出值。梳理一下,hash函数的规则如下: ...原创 2018-10-08 12:44:55 · 4310 阅读 · 0 评论 -
只用2GB内存,在20亿个整数中找到出现次数最多的数
题目: 有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数。限制内存只有2GB。解法: 32位bit,占用4Byte,20亿,就是8GB大小。2GB内存,很明显,我们无法直接加载到内存。所以继续是分而治之的思路,我们可以把这个大文件,hash成20个小文件,这样每个文件,加载到内存,只需要400mb。我们可以先后加载每个小文件,计算...原创 2018-10-16 18:50:58 · 1365 阅读 · 0 评论 -
40亿非负整数中找到没出现的数
题目: 32位无符号整数的范围是0~4294967295,约等于42.9亿个数。现在刚好有一个正好包含有40亿个无符号的文件,所以整个范围中必然有没有出现过的数。内存限制是1G.题目进阶: 如果内存只有10MB,只需要找到一个没出现过的数即可。解题思路: 首先,数据大小,40亿个32位的数,40*4Byte=160亿Byte=16GB....原创 2018-10-16 20:23:00 · 651 阅读 · 0 评论 -
40亿个非负整数中找到出现2次的数和所有数的中位数
题目一:32位无符号整数的范围是0~4294967295,现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数。题目二:内存限制在10MB,如何找到这40亿个整数的中位数。解法思路: 依然bit 数组的思路,不过这次是双倍长度了,因为我们除了要记录这个数字,同时还有记录他出现的次数。但是这个次数要注意一下,看下文: 1、先建立new 一个bi...原创 2018-10-16 20:57:57 · 971 阅读 · 0 评论 -
一致性哈希算法的基本原理-如何解决哈希倾斜问题
在日常工作中,经常有这样的情况,我们需要做hash,散列开数据到不同的区或节点。目标要的结果是要均匀散列,避免某个节点积累大量的数据,出现倾斜情况。比如目前有N台机器,过来的数据key,需要做散列key%N,分发到对应的节点上。一致性哈希算法原理 为了解决hash倾斜难题,一致性算法是这样的,节点和节点形成一个环。比如A->B->C->A,这样一个环。数字hash...原创 2018-10-16 21:11:55 · 3345 阅读 · 0 评论 -
简单理解 倒排索引
最近学习ES看到这个文章:https://es.xiaoleilu.com/052_Mapping_Analysis/35_Inverted_index.html对初步了解es挺好的。 Elasticsearch使用一种叫做倒排索引(inverted index)的结构来做快速的全文搜索。倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组...转载 2018-11-12 16:44:44 · 793 阅读 · 0 评论