document.write('
从n个数中随机选出一个数的概率为1/n,然后在剩下的n-1个数中再随机找出一个数的概率也为1/n(第一次没选中这个数的概率为(n-1)/n,第二次选中这个数的概率为1/(n-1),因此,随机选出第二个数的概率为((n-1)/n)*(1/(n-1))=1/n),依次类推,在剩下的k个数中随机选出一个元素的概率都为1/n。因此,这种方法的思路为:首先从有n个元素的数组中随机选出一个元素,然后把这个选中的数字与数组第一个元素交换,接着从数组后面的n-1个数字中随机选出1个数字与数组第二个元素交换,依次类推,直到选出m个数字为止,数组前m个数字就是随机选出来的m个数字,且它们被选中的概率相等。实现代码如下:
    import random
    def getRandomM(a,n,m):
    if a==None or n<=0 or n<m:
    print "参数不合理"
    return
    i=0
    while i<m:
    j=random.randint(i,n-1)#// 获取i到n-1间的随机数
    #随机选出的元素放到数组的前面
    tmp=a[i]
    a[i]=a[j]
    a[j]=tmp
    i+=1
    
 
    if __name__=="__main__":
    a=[1,2,3,4,5,6,7,8,9,10]
    n=10
    m=6
    getRandomM(a,n,m)
    i=0
    while i<m:
    print a[i],
    i+=1
    程序的运行结果为:
    1    8    9    7    2    4
    算法性能分析:

    这种方法的时间复杂度为O(m)。 

');