一、 方法论(Ref:july's blog)
blog中有些关于hash、trie等数据结构和算法的链接,有时间可以巩固一下。
-- 无论是这些海量数据处理面试题也好,还是算法也好,面试时,70~80%的人不是倒在这两方面,而是倒在基础之上(诸如语言,数据库,操作系统,网络协议等等),所以,无论任何时候,基础最重要,没了基础,便什么都不是--
1. 分而治之/hash映射 + hash统计 + 堆/快速/归并排序;
要点:1) 核心是hash映射(hash取模)
2) 注意他所用的最小/最大堆方法:返回Topk时,以k个元素建堆,防止空间溢出。
2. 双层桶划分、Bloom filter/Bitmap;
要点:1)鸽舍原理
2)bit-map
3)基数排序
4) Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。
3. Trie树/数据库/倒排索引;
要点:1)Trie树:适用于数据量大、重复多、数据种类小可以放到内存。(前缀树)
2)数据库:适用于大数据量的增删改查
3)倒排索引:词项-文档(频率)映射,适于关键字查询。反向索引、正向索引之分。
4. 外排序;
要点:1)参见编程珠玑chap1。
2)多路归并排序+磁盘排序(sorting algorithm中的外部排序)
5. 分布式处理之Hadoop/Mapreduce。