#include<stdio.h>
#include<stdlib.h>
#include<time.h> #define N 1000//采样点的个数
#define M 5//分组 #define SIZE 10000 typedef struct
{
int element;
int count;
}ATTRIBUTE; int main()
{
ATTRIBUTE attr[];
int secmom=;//真实二阶矩
int data;//接收读取之后的值
int i=,j,k;//循环控制变量
int count_tmp=;//临时计数变量
//int n=5;//采样点的个数
double secmom_estima=;
ATTRIBUTE sample[];
int tmp;
int a[];
int loc[N];//采样位置保存在数组里
int sample_group[M][N];
//FILE *fp =fopen("./stream_for_ams.txt","r"); FILE *fp =fopen("./stream_sample_ams.txt","r"); srand(time());
for(j=;j<N;j++)
{
loc[j]=rand()%SIZE;//获取随机采样位置
} for(j=;j<N;j++)//随机位置排序
{
for(k=j+;k<N;k++)
{
if(loc[j] > loc[k])
{
tmp = loc[k];
loc[k]=loc[j];
loc[j]=tmp;
}
}
} if(fp == NULL)//文件读取失败
{
printf("file can't open!\n");
exit();
}
while(!feof(fp))
{
fscanf(fp,"%d",&data);
a[i]=data;//存数据
/***************采样*****************/
for(j=;j<N;j++)
{
if(loc[j] == i)
{
sample[j].element=data;
sample[j].count=;
}
if(sample[j].element == data)
{
sample[j].count+=;
}
} /*****************真实***********************/
for(j=;j<count_tmp;j++)
{
if(attr[j].element == data)//如果该数据被存过则count+1
{
attr[j].count +=;
break;//扫描比对成功退出循环
}
}
if( j == count_tmp)//如果没有该数据第一次出现
{
attr[count_tmp].element=data;//记录
attr[count_tmp].count=;
count_tmp++;//记录第一次出现的数
}
printf("%.2lf%%\r", i * 100.0/ SIZE);
i++;
} /******************组合估计二阶矩***********************/
for(i=;i<M;i++)//分组M
{
for(j=;j<N;j++)//每组N个随机位置
{
loc[j]=rand()%SIZE;//获取随机采样位置
}
for(j=;j<N;j++)//随机位置排序
{
for(k=j+;k<N;k++)
{
if(loc[j] > loc[k])
{
tmp = loc[k];
loc[k]=loc[j];
loc[j]=tmp;
}
}
}
for(j=;j<N;j++)
{
if(loc[j] == i)
{
sample_group[i][j]=
sample[j].count=;
}
if(sample[j].element == data)
{
sample[j].count+=;
}
} } /************估计无组合估计二阶矩**********************/
for(j=;j<N;j++)
{
secmom_estima+=SIZE*(2.0*sample[j].count-);
}
printf("无组合估计二阶矩:%.2lf\n",secmom_estima/N); /***********真实二阶矩*************/
for(j=;j<count_tmp;j++)
{
//printf("%d\t%d\n",attr[j].element,attr[j].count);
secmom+=attr[j].count*attr[j].count;
}
printf("独立数%d\n",count_tmp);
printf("真实二阶矩为:%d\n",secmom); system("pause");
return ;
}

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. 使用ui给定的字体,通过css引入字体库

    @font-face { font-family: 'LCDMonoNormal'; src: url('../../assets/fonts/LCDM2N__.eot'); src: url('.. ...

  2. Spring系列.@EnableRedisHttpSession原理简析

    在集群系统中,经常会需要将Session进行共享.不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重 ...

  3. Java Freemarker生成word

    Java Freemarker生成word freeMaker 简介: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代 ...

  4. cannot find module node-sass

    解决方法: npm install --save-dev node-sass

  5. upc组队赛12 Cardboard Container【枚举】

    Cardboard Container Problem Description fidget spinners are so 2017; this years' rage are fidget cub ...

  6. _cdecl 与 _stdcall 区别

    前段时间编程时遇到过这么一个问题,我写了一个DLL,把里面的一个函数导出来,然后再定义一个签名与其匹配的函数指针,动态地把这个DLL加载起来(LoadLibrary),得到函数指针后,一调用,结果报错 ...

  7. Cocos2d-x 发布 Android

    Cocos2d-x 发布 Android 前置需求: Android NDK Android SDK OR Eclipse ADT Bundle Android AVD target installe ...

  8. FrameWork内核解析之布局加载与资源系统(三)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将继续从以下两个内容来介绍布局加载与资源系统: [ LayoutM ...

  9. 关于JDK,tomcat,eclipse的配置

    1.下载安装JDK 在自定义安装路径时,jdk和之后的jre文件夹是属于平行结构,我的安装路径为:D:\jdk\jdk1.6.0_43和D:\jdk\jre6 然后是对环境变量的配置, 计算机→属性→ ...

  10. JS综合面试题1

    function foo(){ getName = function () { alert(1); }; return this; } Foo.getName = function(){ alert( ...