關於這段的代碼dom
static void T12() { var dic = new String[] { "H", "T" }; var total =1000000; var count=0; var k = 5; var n = 30; var rnd=new Random(Environment.TickCount); var parser = new PoissonParser(); for (int i = 0; i < total; i++) { var sb = new StringBuilder(); for (int index = 0; index < n; index++) { sb.Append(dic[rnd.Next(2)]); } sb.Append("T"); var str = sb.ToString(); //Console.WriteLine(str); var info=parser.Do(str, i, k); count += info.Count; //Console.WriteLine(info); } Console.WriteLine("Total:{0},Count:{1},Rate:{2}", total, count,(double) count / (double)total); }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { public class Poisson { } public class ParserInfo { public int TrialId { get; set; } public List<int> Ei; public int n; public int Count { get { return Ei.Count; //下面對應這題目中實驗出現k個連續正面的機率,注意多個Ei再一次實驗中同事出現 //也算1次出現 // return Ei.Count>0? 1: 0; } } public ParserInfo() { Ei = new List<int>(); } public override string ToString() { var sb = new StringBuilder(); sb.Append("TrialId:" + TrialId +"----"); foreach (var i in Ei) { sb.Append("E" + i+","); } return sb.ToString().Trim(",".ToCharArray()); } } public class PoissonParser { public PoissonParser() { } public ParserInfo Do(string serial, int trialId, int k) { var info = new ParserInfo(); info.TrialId = trialId; info.n=serial.Length-1; var queue=new Queue<int>(); for (int i = 0; i < serial.Length; i++) { var c = serial[i]; if (c == 'H') { if (queue.Count == k) { queue.Dequeue(); } queue.Enqueue(i); } else if (c == 'T') { if (queue.Count == k) { info.Ei.Add(queue.Dequeue()+1); } queue.Clear(); } } return info; } } }
題目只要求出現HH這樣的字符序列那麼此次實驗(n個投擲算一個實驗)就算出現了,至於HHHHT,HHHHT,HHTHH,都是而且記1次,ide
而後跟總的實驗次數相除獲得機率,好比記了x次,總的有y*n 那麼就是x/yui
全部題目的實際機率是求P(Ln>=k)出現的機率spa
拿n=5,k=2來講,下面圖片列出32種可能,而出現HH片斷有19次,HHTHH咱們統計時按一次來,全部E1 交 E4是不爲空的。HHTHH出現3d
表示E1,E4同時發生了。code
根據第9版p20也定義,無不相容事件,若是 EF=空 那麼E與F互不相容 ,另外P(空)=0orm
明顯當k,n選擇適當參數時咱們會發現Ei Ej 有不爲空的狀況blog
考慮k=2,n=5的狀況,Ei定義參考課文事件
那麼一次實驗中HHTHH 的序列就是E1與E4同時出現了圖片
clc syms r format long n=5; k=2; p=1/2; s=0; for r=1: n-k+1 c1=0; if n-r*k >= r c1=nchoosek((n-r*k),r); end c2=0; if(n-r*k >= r-1) c2=nchoosek(n-r*k,r-1); end s=s + (-1)^(r+1) *( c1 + (1/p)*c2 ) * p^(k*r)*(1-p)^r; end
書上的實驗指的是flips, 一次實驗(n次投擲)的結果,因爲Ei 嗯 Ej 可能同時出現,全部他們不是互不相容的
4b能夠這樣描述,E表示第一枚正面朝上,F表示第二枚正面操做, 如今求A有一枚正面朝上的機率。這樣描述就跟上面的遊程
同樣。即P(A)=P(E 並 F)。 而且一次實驗中E,F可能同時出現。
有4種狀況 HH,HT,TH,TT, P(A)=3/4, P(E)=1/2 P(F)=1/2 , P(EF)=1/4 ,按公式(2.4節命題4.4) ,1/2 +1/2 -1/4=3/4;