1. 程式人生 > >10000個球中隨機取出1000個球

10000個球中隨機取出1000個球

前幾天看到一個演算法題,說有10000個球,從中隨機取出1000個,要求高效能?

剛開始我的想法是,迴圈0-1000 每次在0-10000中產生隨機數,如果map中不存在,就放入map中,基數加1,如果存在,不加。這個方式基本能實現,但是效率不高,而且理論上有可能死迴圈。

還有一個方式就是,迴圈1000次,每次產生0-9的隨機數,然後基數*10+隨機數,存入map中。這樣1000次肯定產生不同的球,第二個演算法就是每次概率減少1/1000,最後一個概率只有1/10.而前一種最後一個是1/9001.

週末無聊,學python,順便來一個python實現

import random

map = {}
for i in range(0,1000):
    t = random.randint(i*10,i*10+9)
    map[t]=t

for k in map.iterkeys():
    print k