0

Python 3.3を使用して、次の質問に答える必要があります。

ディスクがいっぱい入った箱から、箱の中のすべてのディスクが赤または青の場合に、2枚の青いディスクを連続して引く確率を知りたいと思います。任意の数の赤いディスクと任意の数の青いディスクで満たされたボックスのこの確率を計算できる関数を記述します。使用したいテストケース:ボックスに15個の青いディスクと6個の赤いディスクが含まれている場合、50%の確率で2つの青いディスクを続けて描画します。

次に、0からボックス内のディスクの数までのnについて、n個の青いディスクを連続して描画する確率を計算する関数を記述します。

このモデルを使ってみました

import random
def random_pick(some_list, probabilities):
    x = random.uniform(0, 1)
    cumulative_probability = 50.0
    for item, item_probability in zip(some_list, probabilities):
        cumulative_probability += item_probability
        if x < cumulative_probability: break
    return item

私はほぼ完全に失われています。助けてください。

4

3 に答える 3

1

1つの青いディスクを描画する確率は、合計ディスクに対する青いディスクの比率に等しくなります。たとえば、2つの青いディスクと2つの赤いディスクがある場合、青いディスクを描画するのに0.5の変化があります。

2枚目のディスクを描画する場合は、すでに1枚の青を削除しているため、1枚少ない(青)ディスクで確率を計算する必要があります。つまり、現在1つの青2つの赤のディスクがあり、したがって1/3の確率です。この確率は最初の条件に依存するため、2つの確率、つまり1/2*1/3を掛ける必要があります。

一般に:

def prob_blue_inrow(numb, numr, n): 
  p = numb / (numr + numb * 1.0)
  if (n == 1): 
    return p
  else:
    return p *  prob_blue_inrow(numb - 1, numr, n - 1)

print(prob_blue_inrow(15, 6, 2))
于 2013-03-22T03:47:10.147 に答える
1

すべてのケースの列挙は、このケースではCPUに負担がかかりすぎません

>>> from itertools import combinations
>>> sum('r' not in x for x in combinations('b' * 15 + 'r' * 6, 2))
105
>>> sum(1 for x in combinations('b'*15+'r'*6, 2))
210
>>> 105/210.0
0.5

1000個の青と1000個の赤でさえ、1秒未満で列挙できます。ただし、サンプル数を3に増やすと、パフォーマンスが非常に悪くなります:)

于 2013-03-22T04:17:42.833 に答える
0

P(blue) = P(blue 1) * P(blue 2) * ... * P(blue n) 青いディスクが15枚、赤いディスクが6枚ある場合、合計21枚になります。はP(blue 1)15/21=.7143です。現在、20枚のディスクが残っており、そのうち14枚は青色です。したがって、P(blue 2)は14/20=0.7です。0.7143 * 0.7 = 0.5

あなたが引っ張る必要があるどんなに多くのためにこれを繰り返すことができます。

擬似コードの場合:

probabilityOfBlue (numBlueInDeck, numRedInDeck, numBlueToPull)
  if (numBlueToPull > numBlueInDeck or numBlueToPull < 0 or (numBlueInDeck + numRedInDeck) == 0)
    return 0

  probability = 1.0
  i = 0
  while i < numBlueToPull
    probability = probability * (numBlueInDeck/(numBlueInDeck + numRedInDeck))
    numBlueInDeck = numBlueInDeck - 1
    i = i + 1

  return probability
于 2013-03-22T03:41:55.340 に答える