2016-04-05 15 views
0

を所定の範囲[最小、最大]のために乱数発生器を作成します彼は範囲[min、max]で同じ確率を持っていますか?で乱数を生成する乱数発生器<code>int generateRandom(int min, int max)</code>を作成する方法を同じ確率で0または1を生成するランダム発生器、与えられた0/1ランダムジェネレータ

この機能は、時間効率を向上させるためにそれを最適化する方法を、任意の最小値と最大値で複数回呼び出すことでしょうか?

答えて

-2

は、私はちょうどあなたが最適化しようとしているものを明確にすることはできますか?ここで、コードの少なくとも3層がある: 1:アプリのいくつかの種類、呼び出し項目2: 2:INT generateRandom(INT分、INT max)は、呼び出し項目3: 3:0又は1を生成するいくつかのランダムな発生 2を非常に速く走らせるか、3を非常に速く走らせようとしていますか?ここ

+0

を戻しますこれは答えではなく、コメントでなければなりません。さらに、私はコードのレイヤーがここでも重要ではないと考えています。ちょうど1ビットを返す関数だけで、任意の2つの任意の数の間に本当に乱数を生成する方法を理解しようとしています。 –

+0

が正しい。まったく。 – skydoor

1

Pythonの溶液

import math 
import random 

def power_two(n): 
    return int(math.log(n, 2)) 

def generate_random(min_, max_): 
    p2 = power_two(max_ - min_) + 1 
    while True: 
     n = 0 
     for i in xrange(p2): 
      n <<= 1 
      if random.randint(0, 1): 
       n += 1 
     if n <= max_ - min_: 
      return n + min_ 

最初に、それは、それはビットにより数ビットを生成し、それはpower_twoで必要どのように多くのビットを計算し、それが0 <= n <= max - min範囲内にある場合にのみ、それはn + min_

+1

'最大= 6'と'分= 0 'を想定し、あなたのソリューションは、簡単にいえ固定、1に最上位ビットをセットすることはありません。私は、アルゴリズムの実装が実装よりも理にかなっていると思うだろう。 – Voo

+0

@Vooここで説明を追加し、1つのエラーでオフに固定しました –