当n很大,m很小
直接对范围n取随机数,但考虑到随机结果不能重复,还要利用hash表检测取出来的结果是否存在,若已存在则继续取随机直到不存在
import random
def sample(m, n):
c=dict()
for i in range(m):
v=random.randrange(n)
while c.get(v) is not None:
v=random.randrange(n)
c[v]=1
print(v)
当n、m值很接近
这种情况(尤其是n、m都很大)直接用随机数效率很差,可采用概率算法
假设还需要抽取M个元素,则余下所有n个元素中i被抽到概率是
import random
def sample(m, n):
for i in range(n):
if random.randrange(n-i)<m:
print(i)
m=m-1