您的位置:首页 > 其它

大数定理的验证

2017-08-08 15:59 113 查看

法一:

void NUM::times()
{
//赋值
NUM num[200];
int total_num[5000];
int count = 0;
for (int i = 0; i < 200; i++)
{
for (int j = 0; j < 25; j++)
{
total_num[count] = num[i].data[j];
count++;
}
}
//去重
int final_num[5000][2];
count = 0;
for (int i = 0; i < 5000; i++)
final_num[i][1] = 0;
for (int i = 0; i < 5000; i++)
{
if (total_num[i] != -1)
{
for (int j = i + 1; j < 5000; j++)
{
if (total_num[i] == total_num[j])
{
total_num[j] = -1;
final_num[count][0] = total_num[i];
final_num[count][1] += 1;
}
}
count++;
}
}
//和data数组关联
int data_often[25];
int m = count;
count = 0;
for (int i = 0; i < 25; i++)
{
for (int j = 0; j < m; j++)
{
if (data[i] == final_num[j][0])
{
data_often[count] = final_num[j][1];
count++;
}
}
}
//计算概率与数学期望
double EX = 0;
double pp = 0;
for (int i = 0; i < count; i++)
{
//数学期望
EX += (double)((data[i] * data_often[i]) / 5000 );
pp += data[i];
}
pp /= count;
//概率
cout << double((pp / EX)) << endl;
}


法二:

#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;

class NUM
{
private:
int data[25];
public:
NUM()
{
int count=0;
while(count!=25)
{
int flag=1;
int num=10000*rand()/(RAND_MAX+1.0);
for(int i=0;i<count;i++)
{
if(data[i]==num)
flag=0;
}
if(flag)
{
data[count]=num;
count++;
}
}
}
void process()
{
for(int i=0;i<25;i++)
{
for(int j=i+1;j<25;j++)
{
if(data[i]>data[j])
{
int temp;
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
}
}
void times()
{
const int kk=500;
NUM result[kk];
int dataP[25];
int count=0;
for(int p=0;p<25;p++)
{
for(int i=0;i<kk;i++)
{
int flag=0;
for(int j=0;j<25;j++)
{
for(int k=0;k<25;k++)
{
if(result[i].data[j]==this->data[k])
flag=1;
}
}
if(flag)
{
count++;
}
}
dataP[p]=count;
count=0;
}
double EX=0,num=0;
for(int i=0;i<25;i++)
{
EX+=(double(dataP[i])/5000.0)*data[i];
num+=dataP[i];
}

cout<<EX/num<<endl;

for(int i=0;i<25;i++)
{
cout<<dataP[i]<<'\t';
if((i+1)%5==0)
cout<<endl;
}
}
void print()
{
for(int i=0;i<25;i++)
{
cout<<data[i]<<'\t';
if((i+1)%5==0)
cout<<endl;
}
}
};

int main()
{

NUM test;
test.process();
test.times();
test.print();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: