2010年3月27日土曜日

おみくじ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Q:10種類のおみくじ(それぞれ無限大数入っている)で、10種類、全てを引くのに要する回数の期待値は?

 ガチャガチャでも、野球カードでも何でもいいです。10種類のcharacterがあって、全て揃うには、いくら注ぎ込まなければならないか?ということです。
 そして、N種類の場合は?

import sys
import random

def isCompleted(xs):
  b = True
  for x in xs:
    b = b and x
    if not b:
      return False
  return True

def experiment(N):
  count = 0
  xs = [False for x in range(N)]
  while not isCompleted(xs):
    xs[random.randint(0, N - 1)] = True
    count += 1
  return count

assert not isCompleted([False])
assert isCompleted([True, True])
assert not isCompleted([True, False])

N = 10
print experiment(N)

sum = 0.0
trial = int(sys.argv[1])
for i in range (trial):
  sum += experiment(N)
print sum / trial
実行結果
[nori@shinano]~/Desktop/study/python% python lotto.py 10000
46
29.1639
よさげ。ただ収束が非常に遅い。

2 件のコメント:

spbackgammon さんのコメント...

有限個の場合は?

nori さんのコメント...

そうねぇ、気が向いたら。