亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hyper.cpp

?? 包分類算法Hypercuts算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
The code is contructed by Borland C++ v5.02 and C++ BuilderX.
I hope to release a GCC version in a short time.
The file formats of filter database and trace are come from ClassBench.

  There are five parameters to control the construction of decision tree.
  
1) common_filter_extraction (defined in hyper.h)
	The most important optimization skill in HyperCuts. It extracts the common filters in all branches.
	To avoid a long filter list for linear search, we apply the common_bucket_size to restrict its maximal length.
	
	Also, we force to generate cuts on multiple dimensions as the number of filters is large.
	This is because adopting only one-dimensional cuts might incur replication of a huge number of filters with wildcard on that dimension.
	Applying cuts on both dimensions could alleviate such condition.
	  
2) redundant_removal (defined in hyper.h)
	If the categoried filters in different branches are identical, these two branches are merged.
	However, the space corresponding to these filters are augumented.
	In the worst case, the resulted space might be identical to the original space before performing cutting.
	In such a case, we should abort the construction since the phenomenon will result in an infinite loop.
		
	In our experiments, the optimization may cause a performance degradation since the occupied space of
	the resulted filters cannot be reduced fast.
		  
3) cut_threshold (defined in hyper.h)
   If the number of cuts is less than cut_threshold, the construction procedure is stopped.
			
4) spfac (input by argument)
	Space factor, control the maximal number of generated branches.
			  
5) common_bucket_size (input by argument)
	Control the maximal number of filters in bucket. These filters are searched by using linear search.
				
The region compaction is also implemented in the codes; however, it seems not very effective.
				  
	If you have any idea to improve our codes, please let me know! Thank you.
	My email address is: pcwang@csie.nctu.edu.tw
*/

#include "hyper.h"

#define information_2

UINT node_count=0, branch_count=0, filters_count=0, spfac, common_bucket_size;
char *filter_file, *trace_file;

int main(int argc, char * argv[]) {
	int i, j;
	void hyper(filter *);
	filter *filters=NULL, *current;
	original_filter *original_filters;
	
	if ( argc <5) {
	printf("Execution: hyper.exe spfac common_bucket_size filter trace\n\n");
	printf("For example: hyper.exe 1 64 filter.txt filter.txt_trace");
	return 0;
	}
	
	  spfac = atoi(argv[1]);
	  common_bucket_size =atoi(argv[2]);
	  filter_file=argv[3];
	  trace_file=argv[4];
	
	
/*	spfac = 1;
	common_bucket_size =72;
	filter_file="my.rtf";
	trace_file="my_trace.rtf";
*/	
	/*if ( argc > 1 ) {
	spfac = atoi( argv[1] );
	if ( argc > 2)
	common_bucket_size =atoi(argv[2]);
	else
	common_bucket_size =0;
	}
	else {
	spfac = 1;
	common_bucket_size =64;
	}
	*/
#ifdef information_2
	time_t t;
	struct tm * area;
	t = time( NULL );
	area = localtime( & t );
	// printf( "Parameter:  spfac %d, common bucket size %d\n", spfac, common_bucket_size );
	// printf( "Size of each filter: %d, header: %d", sizeof( original_filter ), sizeof( header ) );
	//  printf( ", local time is: %s", asctime( area ) );
#endif
	
	original_filter *transform_filter(int *);
	original_filters=transform_filter(&i);
	
	// Transfer the filter format of ClassBench into a generalized form
	for (j=0; j<i; j++) {
		if (filters==NULL) {
			filters=(filter *)calloc(1, sizeof(filter));
			current=filters;
		}
		else {
			current->next=(filter *)calloc(1, sizeof(filter));
			current=current->next;
		}
		current->start[0]=original_filters[j].sa;
		current->end[0]=original_filters[j].sa+pow(2, 32-original_filters[j].sa_len)-1;
		current->start[1]=original_filters[j].da;
		current->end[1]=original_filters[j].da+pow(2, 32-original_filters[j].da_len)-1;
		current->start[2]=original_filters[j].sp[0];
		current->end[2]=original_filters[j].sp[1];
		current->start[3]=original_filters[j].dp[0];
		current->end[3]=original_filters[j].dp[1];
		
		if (original_filters[j].prot_num > 0)
			current->start[4]=current->end[4]=original_filters[j].prot_num;
		else {
			current->start[4]=0;
			current->end[4]=255;
		}
		
		if (original_filters[j].flags_mask > 0)
			current->start[5]=current->end[5]=original_filters[j].flags;
		else {
			current->start[5]=0;
			current->end[5]=65535;
		}
	}
	
	UINT k=0;
	for (current=filters; current!=NULL; current=current->next) {
		current->id=k;
		k++;
	}
	printf( "Parameter:  spfac %d, common bucket size %d\n", spfac, common_bucket_size );
	//  printf("Original Filters: %d, Current Filters: %d, ", i, k);
	//original_filter的內存空間沒有釋放,釋放它的空間
	//修改時間:08.2.28
	free(original_filters);
	//讀取規則的過程:首先在函數read_filters()從文件中讀取規則庫,數據結構是FilteList,是鏈表形式的,
	//然后在函數transform_filter,將鏈表形式的規則庫轉化為數組形式的,數據結構是original_filter的,返回函數main
	//第三步又將數組形式的規則庫轉化為范圍形式的鏈表規則,數據結構是filter,main函數運行到此處
	//hyper函數運行hypercuts算法
	hyper(filters); 
	
#ifdef information_2
	t = time(NULL);
	area = localtime(&t);
	// printf("Local time is: %s", asctime(area));
#endif
	return 0;
}

//函數p_node()打印樹的結構到文件node.txt中
//修改時間:3月3日
void  p_node(struct node *nodes,int level)
{
	struct node *cnodes;
	FILE * fp;
	int i=0,totalcuts=1;
	id_list *fs;
	
	if (!nodes)
		return ;
	if(nodes)
	{   
		fp=fopen("node.txt","a");
		totalcuts=1;
		fprintf(fp,"level:%d \n",level++);
		fprintf(fp,"filter count:%d \n",nodes->filter_count);
		if(nodes->rectangle)
			fprintf(fp,"rectangle:%u %u %u %u\n",nodes->rectangle->start[0],nodes->rectangle->end[0],nodes->rectangle->start[1],nodes->rectangle->end[1]);
		for(i=0;i<2;i++)
		{
			fprintf(fp,"region:%u %u %u\n",nodes->start[i],nodes->end[i],nodes->cut[i]);
			totalcuts=totalcuts*nodes->cut[i];
		}
		for(fs=nodes->filters;fs;fs=fs->next)
			fprintf(fp,"%d\t",fs->id);
		fprintf(fp,"totalcuts:%d\n",totalcuts);
		fclose(fp);
		cnodes=nodes;
		for(i=0;i<totalcuts;i++)
		{   
			nodes=cnodes->branch[i];
			p_node(nodes,level);
		}
	}
	
}

//函數sapce_node()打印樹的結構到文件node.txt中
//修改時間:3月3日
void space_node(struct node *nodes,long int &space)
{
	struct node *cnodes;
	int i=0,totalcuts=1;
	struct id_list *list,*L;
	struct filter *fs,*F;
	int count_l=0,count_f=0;
	if (!nodes)
	 	return;
	else 
	{   
		space=space+sizeof(node);
		totalcuts=1;
	
		count_l=0;
		count_f=0;
		for(list=nodes->filters;list;)
		{  
			count_l++;
			for(fs=list->filters;fs;)
			{
			count_f++;	F=fs;fs=fs->next;
			//free(F);
			}
			L=list;
			list=list->next;
		//	free(L); 
		}
		space=space+sizeof(id_list)*count_l+sizeof(filter)*count_f;
		if(nodes->rectangle)
		space=space+sizeof(hyper_rectangle);
		for(i=0;i<DIMENSIONS;i++)
		{
			totalcuts=totalcuts*nodes->cut[i];
		}
		cnodes=nodes;
		if(nodes->branch)
		{for(i=0;i<totalcuts&&totalcuts!=1;i++)
		{   
			if(nodes=cnodes->branch[i])
			space_node(nodes,space);
			else{ space=space+sizeof(node *); }
		}}
	//	free(nodes->branch);
	//	free(nodes);
	}
	
}

//返回數據包中數據包頭的個數
int count_f(const char *filename)
{	
	char ch ;
    FILE *fp;
	int count=0;	
	
	fp=fopen(filename, "r");
	if (!fp) 
	{
		printf("filename error!\n");
		return 0;
	}
	
	ch='\0';
	
	//讀取文件,直到讀到文件末尾,文件類型是文本文件
	while (ch!=EOF)
	{   
		ch=fgetc(fp);
		if(ch=='\n') count++;//buffer讀取到下一條規則的開始處@,buffer最后一位賦值'0'	
	}
	fclose (fp);
//	printf("%d\n",count);
	return count;	
}
// The function repeatedly divide the filters into different groups according to different criterion.
void hyper(filter *filters) {
	UINT i;
	node *root, *tree_construction(id_list *, hyper_rectangle, UINT);
	//   filter *current;
	UINT filter_count(filter *), original=filter_count(filters);
	id_list *filter_lists=NULL, *add_id_list(id_list *head, filter *filters);
	
	clock_t first,second,third,forth; 
	double duration1=0,duration2=0; 
	
	first = clock(); 
	//add_id_list()函數的作用是將新規則filters對一個新的類型是id_list的內存進行賦值,然后加入到head的末尾
	for (filter *head=filters; head!=NULL; head=head->next)
		filter_lists=add_id_list(filter_lists, head);
	
	UINT id_list_count(id_list *);
	
	//為了計算初始化的時間,將這句輸出語句隱去
	//修改時間:08.2.28
	//	printf("id list count: %d", id_list_count(filter_lists));
	//初始化
	hyper_rectangle rectangle;
	for (i=0; i<DIMENSIONS; i++) {
		rectangle.start[i]=0;
		rectangle.end[i]=0xffffffff;
	}
	root=tree_construction(filter_lists, rectangle, 1);
	//本函數運行在此之前為建樹過程
	second = clock(); 
	duration1 = (double)(second-first); 
	int level=0;
	#ifdef DEBUG 
	p_node(root,level);
	#endif
    //空間是怎么計算?
	//	printf("Node count: %d, branch count: %d, filter count: %d (Storage: %d Kbytes)\n", node_count, branch_count, filters_count, (node_count*32+branch_count*4+filters_count*16)/1024);
	//函數space_node()返回樹的空間,以byte計算
	
	//	UINT decision_tree_depth(node *, UINT);
	//   printf(", depth: %d", decision_tree_depth(root, 1));

	/******************************************************************************/
	/* Read the trace file generated by trace_generator.*/
	void trace_evaluation(header *, UINT, node *);
	//  struct stat statbuf;
	FILE *fd;
    int count_head=count_f(trace_file);
//	printf("%d\n",count_head);
	fd=fopen(trace_file, "rt");
	//先計算下有多少數據包,再分 配空間
     
	header *trace=NULL;
	if(count_head) trace=(header *)calloc(count_head, sizeof(header));
	i=0;
	UINT temp;
	while (fscanf(fd, "%d %d %d %d %d %d %d", &trace[i].value[0], &trace[i].value[1], &trace[i].value[2],
		&trace[i].value[3], &trace[i].value[4], &trace[i].value[5], &temp) != EOF)
		i++;
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国三级中文字幕hd久久精品| 成人国产免费视频| 美国精品在线观看| 国产一区二区免费视频| 成人免费视频一区二区| 色婷婷一区二区三区四区| 4438x亚洲最大成人网| 26uuu国产在线精品一区二区| 蜜臀久久久久久久| 国产麻豆日韩欧美久久| av一本久道久久综合久久鬼色| 色网综合在线观看| 日韩午夜在线播放| 国产精品久久久久影院亚瑟| 亚洲成av人在线观看| 精品一区二区三区在线观看国产 | 日韩美一区二区三区| 国产欧美日韩另类一区| 亚洲午夜一区二区| 激情成人综合网| 在线观看av一区| 久久久久久**毛片大全| 一区二区三区日韩精品| 精品一区二区三区免费| 色婷婷久久久综合中文字幕| 欧美一区二区三区四区在线观看| 国产精品国产三级国产aⅴ无密码| 五月天欧美精品| www.在线成人| 欧美www视频| 亚洲黄色小视频| 国产精品一二一区| 欧美三级在线播放| 国产精品女同一区二区三区| 日韩黄色免费电影| 91影院在线免费观看| 欧美精品一区二区精品网| 狠狠色丁香婷综合久久| 成人精品视频.| 91精品国产综合久久精品图片 | 国产福利一区二区| 欧美高清激情brazzers| 亚洲另类中文字| 国产激情视频一区二区三区欧美| 日韩亚洲欧美在线观看| 亚洲黄色免费网站| 99国产精品久久久久久久久久| 欧美成人a视频| 天天av天天翘天天综合网色鬼国产| 国产a级毛片一区| 欧美成人乱码一区二区三区| 亚洲大片在线观看| 色婷婷综合中文久久一本| 欧美激情资源网| 国产综合久久久久久鬼色| 欧美二区三区91| 亚洲18影院在线观看| 色8久久精品久久久久久蜜 | 91福利在线播放| 国产精品国产三级国产普通话三级| 国产综合色视频| 欧美大黄免费观看| 日韩电影在线免费观看| 欧美日韩国产影片| 尤物av一区二区| 91免费观看国产| 国产精品乱码人人做人人爱| 国产91精品在线观看| 2020日本不卡一区二区视频| 麻豆91在线播放免费| 91精品福利在线一区二区三区| 一区二区欧美国产| 欧美在线视频全部完| 亚洲欧美国产三级| 91在线播放网址| 一级女性全黄久久生活片免费| 色综合久久久网| 一区二区三区高清不卡| 色婷婷av久久久久久久| 亚洲精品中文在线影院| 在线精品视频一区二区| 一区二区三区在线播放| 欧美性一区二区| 亚洲成av人片在线观看无码| 欧美精品亚洲二区| 日本不卡的三区四区五区| 日韩情涩欧美日韩视频| 日本女人一区二区三区| 日韩欧美一二三区| 美女一区二区三区在线观看| 欧美变态口味重另类| 国产成人一级电影| 欧美v日韩v国产v| 国产精品1区二区.| 国产精品久久综合| 99re热这里只有精品免费视频 | 欧美日韩久久久| 肉肉av福利一精品导航| 欧美一区二区在线视频| 欧美aa在线视频| 九九精品一区二区| www激情久久| 99久久精品免费看国产免费软件| 亚洲欧美国产77777| 欧美三级电影一区| 青青草国产精品97视觉盛宴| 久久蜜桃av一区二区天堂| 丁香另类激情小说| 亚洲麻豆国产自偷在线| 欧美精品1区2区3区| 另类欧美日韩国产在线| 国产网站一区二区| 在线视频国产一区| 日韩电影免费一区| 欧美国产欧美亚州国产日韩mv天天看完整| 99久久精品免费| 午夜久久久久久久久久一区二区| 日韩你懂的在线观看| 国产91在线观看丝袜| 一级特黄大欧美久久久| 欧美精品一区二区蜜臀亚洲| 日本高清视频一区二区| 欧美a级理论片| 成人免费在线播放视频| 7777精品伊人久久久大香线蕉经典版下载| 久久99最新地址| 亚洲精品欧美专区| 精品美女在线播放| 色诱视频网站一区| 国产一区二区三区电影在线观看 | 色婷婷一区二区| 毛片一区二区三区| 1区2区3区欧美| 精品成人a区在线观看| 97久久精品人人做人人爽50路| 久久99精品国产| 一区二区欧美精品| 国产欧美精品一区二区色综合| 欧美日韩一区高清| 成人国产电影网| 韩国女主播一区| 亚洲一区二区欧美激情| 国产免费观看久久| 日韩一区国产二区欧美三区| 91丨九色丨国产丨porny| 精品中文字幕一区二区小辣椒| 亚洲最色的网站| 欧美激情在线看| 日韩三级免费观看| 精品国产伦一区二区三区观看体验 | 久久精品欧美日韩| 69久久夜色精品国产69蝌蚪网| av一区二区三区四区| 激情六月婷婷久久| 日日骚欧美日韩| 亚洲精品国产成人久久av盗摄 | 97se亚洲国产综合自在线| 麻豆一区二区在线| 亚洲午夜激情网站| 17c精品麻豆一区二区免费| 久久综合九色综合97婷婷| 欧美日韩成人激情| 欧美色综合天天久久综合精品| 不卡的看片网站| 国产精品88av| 蜜桃久久精品一区二区| 天堂成人免费av电影一区| 亚洲国产成人va在线观看天堂| 中文字幕一区二区三区在线观看| 中文无字幕一区二区三区| 精品国产sm最大网站免费看| 日韩一区国产二区欧美三区| 欧美美女一区二区三区| 欧美三级电影在线观看| 欧美在线视频你懂得| 91黄视频在线观看| 91国产福利在线| 91美女片黄在线观看| 一本到三区不卡视频| 91在线免费视频观看| av在线不卡免费看| 成人av在线看| 99re热这里只有精品免费视频| 91在线云播放| 在线观看网站黄不卡| 欧美亚洲国产bt| 欧美肥妇free| 91精品国产免费| 精品日产卡一卡二卡麻豆| 日韩免费视频线观看| 2021久久国产精品不只是精品| 国产三级一区二区三区| 久久久久久久久久电影| 国产精品水嫩水嫩| 国产精品另类一区| 一区二区三区蜜桃| 婷婷综合久久一区二区三区| 日本不卡视频一二三区| 国模套图日韩精品一区二区| 国产成人亚洲综合a∨婷婷图片|