⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 computehurst.cpp

📁 该代码为原创
💻 CPP
字号:
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include "ComputeHurst.h"

void SubFree(subseq *subseqhead, int subseqnum)
{
	subseq *onesubseq;
	subseq *freesubseq;
	onesubseq=subseqhead;
	while(onesubseq!=NULL)
	{
		freesubseq=onesubseq;
		onesubseq=onesubseq->next;
		free(freesubseq);
	}
}

double Mean(subseq *subseqhead, int subseqnum)
{
	double mean=0;
	double add=0;
	subseq *onesubseq;
	for(onesubseq=subseqhead;onesubseq!=NULL;onesubseq=onesubseq->next)
	{
		add+=onesubseq->mean;
	}
	mean=add/subseqnum;

	return mean;
}

double Variance(subseq *subseqhead, int subseqnum)
{
	double var=0;
	double add=0;
	double mean=0;
	mean=Mean(subseqhead,subseqnum);
	printf("m':%d\tsubmean:%lf\n",subseqnum,mean);
	subseq *onesubseq;
	for(onesubseq=subseqhead;onesubseq!=NULL;onesubseq=onesubseq->next)
	{
		add+=onesubseq->mean*onesubseq->mean;
		//add+=(onesubseq->mean-mean)*(onesubseq->mean-mean);
	}
	var=add/subseqnum-mean*mean;
	/*if(subseqnum==73233)
	{
		printf("%lf\n",var);
	}*/
	SubFree(subseqhead,subseqnum);
	
	return var;
}

data *SubMean(data *computedata,int m, subseq *onesubseq, int start)
{
	double add=0;


	for(int i=0;i<=m-1;i++)
	{
		add+=computedata->datavalue;
		computedata=computedata->next;
	}
	/*if(m==3&&(start==0||start==1))
	{
		printf("add:%d\n", add);
	}*/
	onesubseq->mean=((double)add)/m;
	/*if(m==3&&(start==0||start==1))
	{
		printf("mean:%lf\n", onesubseq->mean);
	}*/
	/*if(m==2)
	{
		printf("mean:%d\n", onesubseq->mean);
	}*/
	return computedata;
}

double VtPlot(data *computedata, int m, int subseqnum)
{
	int i=0;
	double logvar;
	subseq *subseqhead;
	subseq *onesubseq;
	onesubseq=(subseq *)malloc(sizeof(subseq));
	subseqhead=onesubseq;
	while(i<=subseqnum-1)
	{
		if(i!=0)
		{
			onesubseq->next=(subseq *)malloc(sizeof(subseq));
			onesubseq=onesubseq->next;
		}
		computedata=SubMean(computedata,m,onesubseq,i);
		i++;
	}
	onesubseq->next=NULL;
	/*int p=0;
	for(onesubseq=subseqhead;onesubseq!=NULL;onesubseq=onesubseq->next)
	{
		printf("m:%d\tline:%d\toutm:%lf\n",m,p,onesubseq->mean);
		p++;
	}*/
	logvar=log10(Variance(subseqhead,subseqnum));
	return logvar;
} 

void main()
{
	FILE *fp1, *fp2, *fp3;
	int datanum;
	int subseqnum;
	int m[44]={2,3,4,5,8,10,13,16,20,25,31,40,50,63,80,100,125,158,200,251,316,398,501,631,794,1000,1258,1585,1995,2512,3162,3981,5012,6309,7943,10000,12589,15849,19953,25119,31623,39811,50119,63096};
	data *totaldata, *arpdata, *tcpdata, *udpdata;
	data *totaldatahead, *arpdatahead, *tcpdatahead, *udpdatahead;
	double logvartotal[46];
	double logvararp[46];
	double logvartcp[46];
	double logvarudp[46];
	double logm[46];

	if((fp1=fopen("window0.1.dat","r"))==NULL)
	{
		printf("打不开文件\n");
	}

	totaldata=(data *)malloc(sizeof(data));
	totaldatahead=totaldata;
	arpdata=(data *)malloc(sizeof(data));
	arpdatahead=arpdata;
	tcpdata=(data *)malloc(sizeof(data));
	tcpdatahead=tcpdata;
	udpdata=(data *)malloc(sizeof(data));
	udpdatahead=udpdata;
	int i=0;
	while(!feof(fp1))
	{
		if(i!=0)
		{
			totaldata->next=(data *)malloc(sizeof(data));
			totaldata=totaldata->next;
			arpdata->next=(data *)malloc(sizeof(data));
			arpdata=arpdata->next;
			tcpdata->next=(data *)malloc(sizeof(data));
			tcpdata=tcpdata->next;
			udpdata->next=(data *)malloc(sizeof(data));
			udpdata=udpdata->next;
		}
		fscanf(fp1,"averagebps:%lf\tarppercent:%lf\ttcppercent:%lf\tudppercent:%lf\n",&totaldata->datavalue,&arpdata->datavalue,&tcpdata->datavalue,&udpdata->datavalue);
		//printf("averagebps:%lf\tarppercent:%lf\ttcppercent:%lf\tudppercent:%lf\n",totaldata->datavalue,arpdata->datavalue,tcpdata->datavalue,udpdata->datavalue);
		//fscanf(fp1, "TOTAL:%d\tARP:%d\tTCP:%d\tUDP:%d\n",&totaldata->datavalue,&arpdata->datavalue,&tcpdata->datavalue,&udpdata->datavalue);
		//printf("line:%d\tTOTAL:%d\tARP:%d\tTCP:%d\tUDP:%d\n",i,totaldata->datavalue,arpdata->datavalue,tcpdata->datavalue,udpdata->datavalue);
		i++;
	}
	totaldata->next=NULL;
	arpdata->next=NULL;
	tcpdata->next=NULL;
	udpdata->next=NULL;
	fclose(fp1);
	datanum=i;
	
	for(int j=0; j<=33; j++)
	{
		subseqnum=datanum/m[j];
		logvartotal[j]=VtPlot(totaldatahead,m[j],subseqnum);
		logvararp[j]=VtPlot(arpdatahead,m[j],subseqnum);
		logvartcp[j]=VtPlot(tcpdatahead,m[j],subseqnum);
		logvarudp[j]=VtPlot(udpdatahead,m[j],subseqnum);
		logm[j]=log10((double)m[j]);
	}

	if((fp2=fopen("logV.txt","w"))==NULL)
	{
		printf("打不开文件\n");
	}
	if((fp3=fopen("logM.txt","w"))==NULL)
	{
		printf("打不开文件\n");
	}

	/*for(int p=0; p<=43; p++)
	{
		fprintf(fp2,"%lf\t",logvartotal[p]);
		fprintf(fp2,"%lf\t",logvararp[p]);
		fprintf(fp2,"%lf\t",logvartcp[p]);
		fprintf(fp2,"%lf\n",logvarudp[p]);
	}*/
	for(int q=0; q<=43; q++)
	{
		fprintf(fp3,"%lf,",logm[q]);
	}
	/*for(int p=0; p<=43; p++)
	{
		fprintf(fp2,"%lf,",logvartotal[p]);
	}
	for(int p=0; p<=43; p++)
	{
		fprintf(fp2,"%lf,",logvararp[p]);
	}
	/*for(int p=0; p<=43; p++)
	{
		fprintf(fp2,"%lf,",logvartcp[p]);
	}*/
	for(int p=0; p<=43; p++)
	{
		fprintf(fp2,"%lf,",logvarudp[p]);
	}
	fflush(fp3);
	fflush(fp2);
	fclose(fp2);
	fclose(fp3);
	printf("OK!");
	int y;
	scanf("%d",&y);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -