为什么我的眼里常含泪水?因为我有一个算法不会。为了节约点眼泪,今天我们就来介绍著名的Flajolet-Martin算法,尽管这是一种始于上世纪80年代中期的算法,但是今天这个时代再来探讨它似乎更有意义,因为它是一种真正的“大数据”算法。
大数据时代,我们所面对的将是海量数据。所以进行任何一个看似微不足道的操作之前,都应该慎重地考察一下它的执行代价。假设你有一个很大的数据集,非常非常大,以至于不能全部存入内存。并且这个数据集中可能包含有重复的数据。如果想知道这个数据集中有多少个不同的(也就是不重复的)元素,最straightforward的方法似乎就是去‘直接数一数’,但这样做其实并不实际。
我们都知道对无序数据进行排序,时间复杂度为O(n*log(n)),然后扫描一遍这