码迷,mamicode.com
首页 > 编程语言 > 详细

水库采样算法

时间:2017-05-11 00:18:10      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:算法   sample   system   sam   can   time   printf   rand   --   


//水库采样 用较小的开销来估计一个较大的数据流
1
#include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 int main() 5 { 6 int count=0; 7 long long int sum_all=0; 8 long int sum=0; 9 int i=0; 10 int data;//取数据 11 int length=500;//水库大小 12 int *set=(int *)malloc(length*sizeof(int));//定义一个集合 13 int index=0;//下标 14 int randIndex=0;//随机下标 15 double randNum=0;//随机数 16 FILE *fp=fopen("stream_sample.txt","r"); 17 srand(time(0));//以time(0)为种子 18 if(!fp) 19 { 20 printf("file open failed !\n"); 21 system("pasue"); 22 return -1; 23 } 24 while(!feof(fp)) 25 { 26 fscanf(fp,"%d",&data);//取文本中的数据 27 sum_all+=data;//所有数据之和 28 //打印所有数据 29 //printf("%d\t",data); 30 if(index<length)//水库填充时 31 { 32 set[index]=data; 33 index++; 34 } 35 else//水库被填充满时 36 { 37 randNum=(rand()%(index+1)); 38 if(randNum<length) 39 { 40 randIndex=rand()%length; 41 set[randIndex]=data; 42 } 43 index++; 44 } 45 46 } 47 printf("\n-----------------------------------------\n"); 48 printf("一共有%d个数据\n",index); 49 printf("\n-----------------------------------------\n"); 50 printf("水库中的数"); 51 for(i=0;i<length;i++) 52 { 53 printf("%d\t",set[i]); 54 } 55 printf("\n"); 56 57 printf("\n-----------------------------------------\n"); 58 59 printf("\n-----------------------------------------\n"); 60 for(i=0;i<length;i++) 61 { 62 sum+=set[i];//水库中的叠加 63 } 64 printf("%lf\t%lf",(double)sum/length,(double)sum_all/(index-1)); 65 printf("\n"); 66 67 fclose(fp); 68 system("pause"); 69 return 0; 70 }

只是简单理解,代码还有许多不足之处

水库采样算法

标签:算法   sample   system   sam   can   time   printf   rand   --   

原文地址:http://www.cnblogs.com/SimonKly/p/6838805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!