zoukankan      html  css  js  c++  java
  • 条件概率的计算

    条件概率:

    条件概率是指事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为:P(A|B),读作“在B条件下A的概率”。

    设A,B 是两个事件,且A不是不可能事件,则称
      
    为在事件A发生的条件下,事件B发生的条件概率。一般地,
      
    ,且它满足以下三条件:
    (1)非负性;(2)规范性;(3)可列可加性。
     
    --------------------------来自百度
     
    按照公式可求得条件概率的值。
    例题:UVA - 11181 Probability|Given
    题目大意:
    给出n个人去商场的概率,问在有m个人去商场的条件下,第i个人是这m个人之一的概率。
    题目分析:
    直接利用公式暴力枚举求值即可
    (即算出n个人里面有m个人去商场的概率pa,n个人里面有m个人去商场且其中一个是第I个人的概率pb,c=pb/pa)
    给出代码:
      1 #include <cstdio>
      2 #include <iostream>
      3 #include <string>
      4 #include <set>
      5 #include <cmath>
      6 #include <algorithm>
      7 #include <cstring>
      8 #include <vector>
      9 #include <string>
     10 using namespace std;
     11 int n,m;
     12 int mark[30+10];
     13 double num[20+10];
     14 double num1[20+10];
     15 double dfs(int now,int cnt,int flag=-1)
     16 {
     17     //  cout<<now<<endl;
     18     if(cnt==m)
     19     {
     20         double ps=1;
     21         for(int i=0; i<n; i++)
     22         {
     23             if(mark[i])
     24                 ps*=num[i];
     25             else
     26                 ps*=(1-num[i]);
     27         }
     28         return ps;
     29     }
     30     if(now==n-1)
     31     {
     32         if(cnt==m)
     33         {
     34             double ps=1;
     35             for(int i=0; i<n; i++)
     36             {
     37                 if(mark[i])
     38                     ps*=num[i];
     39                 else
     40                     ps*=(1-num[i]);
     41             }
     42             return ps;
     43         }
     44         else
     45             return 0;
     46     }
     47     else
     48     {
     49         double pa=0;
     50         for(int i=now+1; i<n; i++)
     51         {
     52             if(flag==-1||i!=flag)
     53             {
     54                 mark[i]=1;
     55                 pa+=dfs(i,cnt+1);
     56                 mark[i]=0;
     57             }
     58             else
     59             {
     60                 pa+=dfs(i,cnt);
     61             }
     62             //  pa+=dfs(i,cnt);
     63         }
     64         return pa;
     65     }
     66 }
     67 int main()
     68 {
     69     //cout<<a.length()<<endl;
     70   //  freopen("D:\output.txt", "w", stdout);
     71     int kase=0;
     72     while(cin>>n>>m)
     73     {
     74         if(n==0&&m==0)
     75             break;
     76         for(int i=0; i<n; i++)
     77             scanf("%lf",&num[i]);
     78         double pa=0;
     79         for(int i=0; i<n; i++)
     80         {
     81             mark[i]=1;
     82             pa+=dfs(i,1);
     83             mark[i]=0;
     84             //     pa+=dfs(i,0);
     85         }
     86     //    cout<<pa<<endl;
     87         printf("Case %d:
    ",++kase);
     88         if(m>=2)
     89         {
     90             int h=n;
     91             n=n-1;
     92             m=m-1;
     93             for(int i=0; i<h; i++)
     94                 num1[i]=num[i];
     95             for(int i=0; i<h; i++)
     96             {
     97                 int cnt=0;
     98                 for(int j=0; j<h; j++)
     99                 {
    100                     if(i!=j)
    101                         num[cnt++]=num1[j];
    102                 }
    103                 double pb=0;
    104                 for(int j=0; j<n; j++)
    105                 {
    106                     mark[j]=1;
    107                     pb+=dfs(j,1);
    108                     mark[j]=0;
    109                 }
    110                 pb=pb*num1[i];
    111                 //cout<<pb/pa<<endl;
    112                 printf("%.6lf
    ",pb/pa);
    113             }
    114         }
    115         else if(m==1)
    116         {
    117             //double
    118             for(int i=0;i<n;i++)
    119             {
    120                 double pb=1;
    121                 for(int j=0;j<n;j++)
    122                 {
    123                     if(j==i)
    124                         pb*=num[j];
    125                     else
    126                         pb*=(1-num[j]);
    127                 }
    128              //   cout<<pb<<"   *"<<endl;
    129                printf("%.6lf
    ",pb/pa);
    130             }
    131         }
    132         else if(m==0)
    133         {
    134            // cout<<"***"<<endl;
    135             for(int i=0;i<n;i++)
    136                 printf("%.6lf
    ",0.0);
    137         }
    138     }
    139     return 0;
    140 }
    141 /*
    142 7 1
    143 0.48
    144 0.19
    145 0.33
    146 0.64
    147 0.74
    148 0.46
    149 0.6
    150 */
    View Code

    说实话这题代码我写的不怎么好==

  • 相关阅读:
    MongoDB 基础
    类加载流程,类加载机制及自定义类加载器详解
    Object中有哪些方法及其作用
    Intellij IDEA 导入Maven项目
    用IDEA开发Spring程序
    深入浅出 Java 8 Lambda 表达式
    UUID.randomUUID()简单介绍
    json字符串转成 json对象 json对象转换成java对象
    字符串转 Boolean 的正确方式
    获取JSON中所有的KEY
  • 原文地址:https://www.cnblogs.com/DLKKILL/p/7246774.html
Copyright © 2011-2022 走看看