用代码证明统计概率公式P(AB)=P(A|B)P(B)
时间:2010-12-24 来源:Everlonely
P(A) - probability of event A.
P(AB) - probability of simultaneous events A and B.
P(A|B) - probability of event A given event B.
证明过程:
class Program { static Random R = new Random(); static void Main(string[] args) { List<Sample> ss = new List<Sample>(); for (int i = 0; i < 30; i++) { Sample s = new Sample(); if (R.Next(0, 2) == 0) s.A = true; if (R.Next(0, 2) == 0) s.B = true; ss.Add(s); } foreach (Sample s in ss) { Console.WriteLine(string.Format("A:{0},B:{1}", s.A, s.B)); } //P(AB) probability of simultaneous events A and B. double c_A_And_B = 0; foreach (Sample s in ss) { if (s.A && s.B) c_A_And_B++; } Console.WriteLine("P(AB)={0}", c_A_And_B / 30); //P(A|B) probability of event A given event B. double c_B = 0; double c_A_Given_B = 0; foreach (Sample s in ss) { if (s.B) { c_B++; if (s.A) c_A_Given_B++; } } double p_A_Given_B = c_A_Given_B / c_B; Console.WriteLine("P(A|B)={0}", p_A_Given_B); double p_B = c_B / 30; Console.WriteLine("P(B)={0}", p_B); Console.WriteLine("P(A|B)P(B)={0}", p_A_Given_B * p_B); Console.ReadKey(); } } public class Sample { public bool A { get; set; } public bool B { get; set; } }
一个随机输出结果
A:True,B:False
A:True,B:False
A:False,B:False
A:False,B:True
A:True,B:False
A:False,B:False
A:False,B:False
A:False,B:True
A:False,B:False
A:True,B:False
A:True,B:False
A:False,B:False
A:False,B:True
A:False,B:True
A:False,B:True
A:False,B:True
A:True,B:True
A:True,B:False
A:True,B:False
A:True,B:True
A:False,B:False
A:True,B:False
A:False,B:True
A:False,B:True
A:True,B:False
A:False,B:False
A:False,B:True
A:False,B:True
A:False,B:False
A:True,B:True
P(AB)=0.1
P(A|B)=0.230769230769231
P(B)=0.433333333333333
P(A|B)P(B)=0.1