10000球中ランダムに1000球を取り出します


先日アルゴリズムの問題を見て、10000個のボールがあると言って、中からランダムに1000個を取り出して、高性能を要求しますか?
 
 
最初の私の考えは、ループ0-1000は毎回0-10000で乱数を発生し、mapに存在しない場合はmapに入れ、基数に1を加え、存在する場合は加算しない.この方式は基本的に実現できるが,効率は高くなく,理論的には死循環する可能性がある.
 
もう1つの方法は、1000回サイクルし、毎回0-9の乱数を生成し、基数*10+の乱数をmapに格納することです.このように1000回肯定的に異なるボールを生成し、2番目のアルゴリズムは確率が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