1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. #define N 1000//采样点的个数
  6. #define M 5//分组
  7.  
  8. #define SIZE 10000
  9.  
  10. typedef struct
  11. {
  12. int element;
  13. int count;
  14. }ATTRIBUTE;
  15.  
  16. int main()
  17. {
  18. ATTRIBUTE attr[];
  19. int secmom=;//真实二阶矩
  20. int data;//接收读取之后的值
  21. int i=,j,k;//循环控制变量
  22. int count_tmp=;//临时计数变量
  23. //int n=5;//采样点的个数
  24. double secmom_estima=;
  25. ATTRIBUTE sample[];
  26. int tmp;
  27. int a[];
  28. int loc[N];//采样位置保存在数组里
  29. int sample_group[M][N];
  30. //FILE *fp =fopen("./stream_for_ams.txt","r");
  31.  
  32. FILE *fp =fopen("./stream_sample_ams.txt","r");
  33.  
  34. srand(time());
  35. for(j=;j<N;j++)
  36. {
  37. loc[j]=rand()%SIZE;//获取随机采样位置
  38. }
  39.  
  40. for(j=;j<N;j++)//随机位置排序
  41. {
  42. for(k=j+;k<N;k++)
  43. {
  44. if(loc[j] > loc[k])
  45. {
  46. tmp = loc[k];
  47. loc[k]=loc[j];
  48. loc[j]=tmp;
  49. }
  50. }
  51. }
  52.  
  53. if(fp == NULL)//文件读取失败
  54. {
  55. printf("file can't open!\n");
  56. exit();
  57. }
  58. while(!feof(fp))
  59. {
  60. fscanf(fp,"%d",&data);
  61. a[i]=data;//存数据
  62. /***************采样*****************/
  63. for(j=;j<N;j++)
  64. {
  65. if(loc[j] == i)
  66. {
  67. sample[j].element=data;
  68. sample[j].count=;
  69. }
  70. if(sample[j].element == data)
  71. {
  72. sample[j].count+=;
  73. }
  74. }
  75.  
  76. /*****************真实***********************/
  77. for(j=;j<count_tmp;j++)
  78. {
  79. if(attr[j].element == data)//如果该数据被存过则count+1
  80. {
  81. attr[j].count +=;
  82. break;//扫描比对成功退出循环
  83. }
  84. }
  85. if( j == count_tmp)//如果没有该数据第一次出现
  86. {
  87. attr[count_tmp].element=data;//记录
  88. attr[count_tmp].count=;
  89. count_tmp++;//记录第一次出现的数
  90. }
  91. printf("%.2lf%%\r", i * 100.0/ SIZE);
  92. i++;
  93. }
  94.  
  95. /******************组合估计二阶矩***********************/
  96. for(i=;i<M;i++)//分组M
  97. {
  98. for(j=;j<N;j++)//每组N个随机位置
  99. {
  100. loc[j]=rand()%SIZE;//获取随机采样位置
  101. }
  102. for(j=;j<N;j++)//随机位置排序
  103. {
  104. for(k=j+;k<N;k++)
  105. {
  106. if(loc[j] > loc[k])
  107. {
  108. tmp = loc[k];
  109. loc[k]=loc[j];
  110. loc[j]=tmp;
  111. }
  112. }
  113. }
  114. for(j=;j<N;j++)
  115. {
  116. if(loc[j] == i)
  117. {
  118. sample_group[i][j]=
  119. sample[j].count=;
  120. }
  121. if(sample[j].element == data)
  122. {
  123. sample[j].count+=;
  124. }
  125. }
  126.  
  127. }
  128.  
  129. /************估计无组合估计二阶矩**********************/
  130. for(j=;j<N;j++)
  131. {
  132. secmom_estima+=SIZE*(2.0*sample[j].count-);
  133. }
  134. printf("无组合估计二阶矩:%.2lf\n",secmom_estima/N);
  135.  
  136. /***********真实二阶矩*************/
  137. for(j=;j<count_tmp;j++)
  138. {
  139. //printf("%d\t%d\n",attr[j].element,attr[j].count);
  140. secmom+=attr[j].count*attr[j].count;
  141. }
  142. printf("独立数%d\n",count_tmp);
  143. printf("真实二阶矩为:%d\n",secmom);
  144.  
  145. system("pause");
  146. return ;
  147. }

AMS算法的更多相关文章

  1. 数据结构与算法之PHP排序算法(归并排序)

    一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...

  2. Android进程调度之adj算法

    copy from : http://gityuan.com/2016/08/07/android-adj/ 一.概述 提到进程调度,可能大家首先想到的是Linux cpu调度算法,进程优先级之类概念 ...

  3. Python机器学习笔记:奇异值分解(SVD)算法

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 奇异值分解(Singu ...

  4. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  5. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  6. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  7. 红黑树——算法导论(15)

    1. 什么是红黑树 (1) 简介     上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...

  8. 散列表(hash table)——算法导论(13)

    1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...

  9. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

随机推荐

  1. 使用html5进行视频播放

    一直以来网页大多是使用 flash 来播放视频.在目前唱衰 flash 的环境下,HTML5 为我们带来了一个网页内视频播放的解决方案—— <video>标签. 在HTML5 中,可以通过 ...

  2. Android 中RelativeLayout各个属性的含义

    转载博客:http://blog.csdn.net/softkexin/article/details/5933589 android:layout_above="@id/xxx" ...

  3. 82、TensorFlow教你如何构造卷积层

    ''' Created on 2017年4月22日 @author: weizhen ''' import tensorflow as tf #通过tf.get_variable的方式创建过滤器的权重 ...

  4. spss乱码问题解决

    spss乱码问题解决 方法1:网友kuangsir6提供 选择字体为:DFKai-SB 格式(我并没有找到这个格式) 方法是 SPSS(PASW)---Edit---Options---Viewer- ...

  5. eclipse中选取一列快捷键

    eclipse中选取一列 比如选中下面的1 4 1   2   3 4   5   6 快捷键 alt+shift+拖动鼠标

  6. 2019杭电多校第四场hdu6623 Minimal Power of Prime

    Minimal Power of Prime 题目传送门 解题思路 先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为 ...

  7. PAT甲级——A1152 GoogleRecruitment【20】

    In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the p ...

  8. 点读系列《Jenkins用户文档》

    Jenkins用户手册官网地址:点击打开 开源 CI&CD 软件 自动化各种任务, build test deploy 支持各种运行方式 Jenkins入门 入门指南 需要java和docke ...

  9. SSO 实现博客系统的单点登录

    https://blog.csdn.net/qq1350048638/article/details/78933375 https://blog.csdn.net/yejingtao703/artic ...

  10. SQL中to_char方法的应用

    1.取得当前日期是本月的第几周 SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; ----------------- ...