自己想的一个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

posted @ 2011-07-29 21:22  欢哥哥  阅读(232)  评论(1)    收藏  举报