海量数据处理,思路有hash、bitmap、merge、堆、Top K(BFPRT算法)、trie树、布隆过滤器。
hash:对很多数据进行hash,然后取余一个正整数n,可以分成n份不同的数据组,每份数据组中数据通过hash算法得到相同的下标,所以相同的数据一定会分在同一数据组中。
bitmap:为操作,如果为每个数据分配n个bit,那么每个数据可最多有2^n种情况,在很多数据的情况下,bitmap总长可设为很大并间隔n位分给一格数据。
merge:一个很大数据量数据排序,分成不同数据组,每组内进行排序,不同组之间进行merge排序。
堆排序:数据量大,而只需要知道最大或最小的几个,可以用堆排序。
Top K:https://blog.csdn.net/laojiu_/article/details/54986553 速度很快(类似快排选一个基准,不过这个基准选取方式为:n个数据5个一组,每个排序得到组内中位数,各组之间中位数排序得到组间中位数,该中位数为基准,大于该值一边,小于的另一边,则最终左边和右边都至少有3/10的数据量,递归下去最后得到想要的位置)。
trie数(字典树):用于去重字符串。字典树每个树枝(两个节点之间连线)一个字符,从根节点到叶子节点构成了不同的路径,每个路径唯一地表示了一个字符串。
布隆过滤器:使用了bitmap和hash,一个数据散列出n个特征点,一个很长的bitmap存储这些特征点,用此bitmap上的特征点去验证其它数据是否相同。布隆过滤器存在误差,因为hash可能会冲突,而且布隆过滤器有时会在一个bitmap上加上多个数据的特征点,会增加失误的可能性。
来源:https://www.cnblogs.com/cjj-ggboy/p/12405422.html