自己想的一个O(N)的抽样算法
问题:若要在N行里sample m个样品,有何算法
1、O(N+m*lgm):生成m个不重复的随机数(大小1~N),然后排序,读取N行时判断行数是否等于m[i],等于的话就i++,但要做不重复的对比,其实复杂度比给出的更高,并且在m/N接近1时,随机数更容易碰撞,在做不重复的对比上消耗更大。
2、O(N):有一个函数,是非常精确地会以m/N的概率返回真,对某一行,以这个函数来判断这一行是否被抽样
函数:得到一个随机数(大小1~N),若此数小于等于m,则返回真
则需要得到的随机数是全遍历1~N,才会有精确地有m/N的概率返回真
这个随机数用LFSR来实现的话,将能全遍历1~N
浙公网安备 33010602011771号