* 全種類の品を最低1個は入手している確率の求め方 [#x3bc5c88]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者||
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(普通,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Calc 表計算,faq03,category)|
 |~投稿日|2010-03-28 10:02:16 (日)|
 |~OS||
 |~依存するページ||
 |~バージョン|#listbox3(3.1.1,faq03,version)|
 
 //////////バグ対策(以降マッチさせない)
 
 ** メッセージ [#ndc72f75]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 ネット上のガチャなどでx回の試行でn種類(既知)のアイテムが全種類揃う確率を~
 求めたい場合について教えていただきたいのですが~
 ~
 それぞれのアイテムが出る確率は同じではなくそれぞれ、P1〜Pnで既知であり~
 P1〜Pnの総和は1である場合、x回の試行でn種類全てのアイテムを1個以上~
 入手している確率はどの関数をどう使えばいいのでしょうか?(x≧nです)~
 
 
 ----
 ***答えは書けませんが… [#a5ba4711]
 >Y (2010-03-29 00:35:43 (月))~
 ~
 組み合わせ(nCr)は、COMBINという関数があります。また、重複組み合わせ(nHr)はCONBINAです。順列(nPr)はそのものの関数は見つかりませんでしたが、階乗(n!)のFACTという関数があるので、それを使えばいいということでしょう。~
 ~
 で、実際にどう組み合わせるかなのですが…~
 すみません。もともと確率は不得意な上に、久しくこういう数学の問題はやっていないのでまともに解ける自信がありません。~
 
 //
 ***無題 [#je2d2d19]
 >tani (2010-03-29 09:19:00 (月))~
 ~
 例えば、ある一つのアイテムが0.1の確率で当選する場合、x回の試行で一回でも当たる確率は~
 1 - (1-0.1)^x~
 です。(全部はずす確率を求めるのがコツ)~
 で、上記で求められた確率を全部かけると答えがでるんじゃないでしょうか。~
 ~
 追記:ガチャガチャということは、どれかは絶対あたるということですね。~
 よく考えたら間違ってる気がしてきました。。。ってやっぱ間違ってますね。正解は↓っぽいです。~
 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail.php?qid=1211774567~
 なんかマクロで仮想ガチャガチャ作った方が早いような気がしてきましたw~
 
 //
 ***無題 [#q6c5f79e]
 >tani (2010-03-29 11:22:18 (月))~
 ~
 試しに以下のような仮想ガチャガチャマクロを作ってみましたw~
 (a, b, c, d がアイテムが出る確率です。)~
 出てきた結果は何回目に全て揃ったのかの羅列ですので、分析すると色々わかると思います。例えば、平均をとると、だいたい16回目くらいで一個ずつ揃うということになりました。ループ回数を増やすと精度が増すと思います。~
 参考までに。~
 ~
  Sub Main
   a = 0.1
   b = 0.2
   c = 0.3
   d = 0.4
    
   stest = ""
   counter = 0 
   j = 0
   
   For i = 0 To 10000
     r = Rnd
     Counter = Counter + 1
     If r > d Then
       stest = stest + "d"
     ElseIf r <= d And r > c Then
       stest = stest + "c"
     ElseIf r <= c And r > b Then
       stest = stest + "b"
     Else
       stest = stest + "a"
     End If
  
     If InStr(stest, "a") <> 0 And InStr(stest, "b") <> 0 And InStr(stest, "c") <> 0 And InStr(stest, "d") <> 0 Then
       j = j + 1
       oCell = ThisComponent.getSheets().getByIndex(0).getCellByPosition(0, j)
       oCell.setValue(Counter)
       Counter = 0
       stest = ""
     End If
   Next i
  End Sub
 
 //
 ***レスありがとうございます [#u538ed7e]
 >質問者 (2010-03-29 13:22:50 (月))~
 ~
 Y様、tani様、レスありがとうございます~
 ~
 数多くの関数が提供されているので、ひょっとしたらその中に直接問題を~
 解決できる関数があるのかなと思い上記のような質問をしてしまいました。~
 (ざっとHelpを見た限りでは理解できなかったもので><)~
 どうやらそういう都合いいものはないようで、やるならそれなり工夫して~
 やらねばいけないみたいですね。(それが分かっただけでも進歩です)~
 ~
 tani様が張っていただいたリンク先も目を通しました。~
 確率が全種類で均等の場合の考え方としてはその通りだと思います。~
 納得できる内容でした。ありがとうございます。~
 ただ、やはり求めたいものは、確率が均等ではない場合なので、~
 確率が異なる場合に拡張させるには、壮大な場合わけが必要に思えました。~
 ~
 仮想ガチャでやってみて、その結果を参考にするという発想は有効な気がします。~
 わざわざサンプルまでありがとうございます>w<~
 ~
 計算が複雑になりそうでうまく算出できる気がしなくなってきたので~
 こういった実験結果からのアプローチでもいいような気がしてきました。~
 サンプルに手を加えて(中身を理解してからですが)試してみたいと~
 思います。ぺこり~
 
 //
 ***関数について [#o4e15a51]
 >M.Kamataki (2010-04-05 12:17:48 (月))~
 ~
 今回のご質問のように、アイテムが揃う確率を求める関数はありませんが、x回の試行で成功する確率を求める関数は調べたところ幾つかありました。~
 ~
 完了していますが、付記しておきます。(オンラインヘルプより)~
 ~
 BINOMDIST~
 ~
 二項分布の確率を返します。~
 ~
 構文~
 BINOMDIST(X; 試行回数; SP; C)~
 ~
 成功数 は、試行が成功する回数です。~
 試行回数 は、試行する回数です。~
 確率 は、1 回の試行が成功する確率です。~
 関数形式 に 0 を指定すると、単一事象の確率、関数形式 に 1 を指定すると、累積確率を計算します。~
 ~
 例~
 =BINOMDIST(A1;12;0.5;0) は、(0 から 12 の値が A1 に入力された場合) コインを 12 回ひっくり場合の 表 がちょうど A1 に入力された回数出る確率を示します。~
 =BINOMDIST(A1;12;0.5;1) は、同じ系列の累積確率を示します。たとえば A1 = 4 の場合、系列の累積確率は、表 が 0、1、2、3、または 4 回です (非排他的論理和)。~
 ~
 HYPGEOMDIST~
 ~
 超幾何分布を返します。~
 ~
 構文~
 HYPGEOMDIST(X; 標本数; 成功回数; 母集団数)~
 ~
 X は、無作為標本内で成功する数です。~
 標本数 は、無作為標本の大きさです。~
 成功回数 は、母集団内で成功する数です。~
 母集合数 は、母集合全体の大きさです。~
 ~
 例~
 =HYPGEOMDIST(2;2;90;100) は、0.81 を返します。バターを塗ったトースト 100 枚のうち 90 枚がテーブルから落ち、バターを塗った面が先に床につく場合、バターを塗ったトースト 2 枚をテーブルから落としたときに両方ともバターを塗った面が先に床につく確率密度は 81% です。~
 
 //
 #article