AMS算法
#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算法的更多相关文章
- 数据结构与算法之PHP排序算法(归并排序)
一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...
- Android进程调度之adj算法
copy from : http://gityuan.com/2016/08/07/android-adj/ 一.概述 提到进程调度,可能大家首先想到的是Linux cpu调度算法,进程优先级之类概念 ...
- Python机器学习笔记:奇异值分解(SVD)算法
完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 奇异值分解(Singu ...
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 红黑树——算法导论(15)
1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- 虚拟dom与diff算法 分析
好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM
随机推荐
- sequel 远程连接 MySQL 连接错误Can't connect to MySQL server on (61)
Mac sequel Pro链接时报错Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (61). PS. win版Navicat 报错Can’t conn ...
- Mac启动时:boot task failed:fsck-safe处理办法
mac系统启动到一半,然后突然关机,查看启动信息发现:boot task failed:fsck-safe 处理方法,clover启动的时候按空格,然后选择sigle mode. 进入使用命令:fsc ...
- python 去除字符串两端字符串
转载:http://blog.sina.com.cn/s/blog_940224600100w8l0.html Python中的strip用于去除字符串的首位字符,同理,lstrip用于去除左边的字符 ...
- HTML-参考手册: HTML 音频/视频
ylbtech-HTML-参考手册: HTML 音频/视频 1.返回顶部 1. HTML 音频/视频 DOM 参考手册 HTML5 DOM 为 <audio> 和 <video> ...
- C++——迭代器
除了每个容器定义的迭代器外,iterator库内还定义了其他的迭代器. 1.插入迭代器:向容器中插入元素 1.1 back_inserter 1.2 front_inserter 1.3 insert ...
- 在dos中编译java文件
首先Dos中 编译java文件是:javac (所有)类名.java 运行java文件是:java 包名.类名 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中 ...
- 【JavaSE】运行时类型信息(RTTI、反射)
运行时类型信息使得你可以在程序运行时发现和使用类型信息.--<Think in java 4th> **** 通常我们在面向对象的程序设计中我们经常使用多态特性使得大部分代码尽可能地少了解 ...
- Python之元组、列表and 字典
序列: 元组和字符串都是不可变的哦 你看,数据空间不一样了 元组的话,你可以联想到C里面的结构体变量啊,为了包容不同的数据类型: 也可以这样取值哦: 列表:列表是可修改的哦~ 不然数据大了再另外开辟空 ...
- PyCharm与git/GitHub取消关联
如果你从github 上down下的个项目,用pycharm 打开的时候,选择了git管理,导致你只要做了修改,就会有颜失标记,即使没有强迫症,看着也很难受啊 聪敏的我赶快找度娘,总结如下解决方法 在 ...
- C#5.0 异步编程 Async和Await--介绍
C#5.0引入async和await关键字实现方法的异步调用. 直接进入正题. async只是一个标识符,并没有实际的用途,只是用于表明某个方法是异步方法,在方法前面加上async 表示该方法为一个异 ...