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

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

?? hyper.cpp

?? 包分類算法Hypercuts算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	//	printf("\n*******************************************\n");
	//   printf("Read %d headers\n", i);
	fclose(fd);
    third=clock();
	trace_evaluation(trace, i, root);
	forth=clock();
	duration2=forth-third;

	long int space=0;
	space_node(root,space);
	space=space/(1024*1024);
	printf("規則的個數 初始化時間毫秒     搜索時間毫秒      空間MBytes\n");
	printf("%u       %f          %f           %u\n",original,duration1,duration2/i,(node_count*32+branch_count*4+filters_count*16)/1024);
//	printf("%u       %f          %f           %u\n",original,duration1,duration2/i,space);
}


node *tree_construction(id_list *filters, hyper_rectangle rectangle, UINT depth) {
	UINT id_list_count(id_list *);
	UINT minimal_value(id_list *, UINT), maximal_value(id_list *, UINT);
	id_list *add_id_list(id_list *, filter *);
	id_list *remove_id_list(id_list *, filter *);
	bool id_list_compare(id_list *, id_list *);
	
	UINT filter_count=id_list_count(filters), i;
	cut_calculation *cuts;
	id_list **filter_lists;
	
	node *current_node=(node *)calloc(1, sizeof(node));
	node_count++;

	//沒有給當前節點規定范圍,加入對應域的賦值過程
	//修改時間:3月3日
	for(i=0;i<DIMENSIONS;i++)
	{
		current_node->start[i]=rectangle.start[i];
		current_node->end[i]=rectangle.end[i];
	}
	/*if the number of filters is less than the certain value, the node becomes to a leaf*/
	//   if ((filter_count <= bucket_size) || (depth > 8)){
	if (filter_count <= common_bucket_size) {
		current_node->filters=filters;
		current_node->filter_count=filter_count;
		filters_count+=filter_count;
	//	for(i=0;i<DIMENSIONS;i++)
	//	{
	//		current_node->start[i]=rectangle.start[i];
	//		current_node->end[i]=rectangle.end[i];
	//	}
		return current_node;
	}
	/* find out and remove the filters, which completely cover the rectangle of the current node */
	for (id_list *head=filters; head!=NULL; head=head->next) {
		bool filter_all_cover=true;
		for (i=0; i<DIMENSIONS; i++)
			if ((head->filters->start[i] > rectangle.start[i]) || (head->filters->end[i] < rectangle.end[i]))
				filter_all_cover=false;
			//把通配符的規則加入當前節點
			if (filter_all_cover)
				current_node->filters=add_id_list(current_node->filters, head->filters);
	}
	
	// for (id_list *head=current_node->filters; head!=NULL; head=head->next)
	//從原來的鏈表中將通配符的規則刪掉
    for (head=current_node->filters; head!=NULL; head=head->next)
		filters=remove_id_list(filters, head->filters);
	
	filter_count=id_list_count(filters);
	if (filter_count==0)
		return current_node;
	
	//這句話在此不知道作用是什么,因此隱去
	//修改時間:3月3日
    //	current_node->filters=NULL;
	
#ifdef region_compact
	/* region compaction */
	for (i=0; i<DIMENSIONS; i++) {
		rectangle.start[i]=max(minimal_value(filters, i), rectangle.start[i]);
		rectangle.end[i]=min(maximal_value(filters, i), rectangle.end[i]);
	}
	/* This time, we remove the filters covered the compacted region first to speed up */
	UINT count=0;
	for (id_list *head=filters; (head!=NULL) && (count < common_bucket_size); head=head->next) {
		bool filter_all_cover=true;
		for (i=0; (i<DIMENSIONS); i++)
			if ((head->filters->start[i] > rectangle.start[i]) || (head->filters->end[i] < rectangle.end[i]))
				filter_all_cover=false;
			if (filter_all_cover) {
				count++;
				current_node->filters=add_id_list(current_node->filters, head->filters);
			}
	}
	
	for (id_list *head=current_node->filters; head!=NULL; head=head->next)
		filters=remove_id_list(filters, head->filters);
	
	filter_count=id_list_count(filters);
	if (filter_count==0)
		return current_node;
#endif
	/* The function calculates the optimal cut for all dimensions */
	cut_calculation *cuts_optimization(hyper_rectangle, id_list *);
	cuts=cuts_optimization(rectangle, filters);
	
	UINT total_cuts=1;
	for (i=0; i<DIMENSIONS; i++) {
		current_node->start[i]=rectangle.start[i];
		current_node->end[i]=rectangle.end[i];
		current_node->cut[cuts[i].dimension]=cuts[i].cuts;
		total_cuts*=cuts[i].cuts;
	}
	
	/*if there is no suggested cut, the node will become a leave */
	if (total_cuts <= cut_threshold) {
		current_node->filters=filters;
		filters_count+=filter_count;
		for (i=0; i<DIMENSIONS; i++)
			current_node->cut[i]=1;
		return current_node;
	}
	/*
	if (total_cuts == 1) {
   	current_node->filters=filters;
	filters_count+=filter_count;
	for (i=0; i<DIMENSIONS; i++)
	current_node->cut[i]=1;
	return current_node;
	}
	*/
	current_node->branch=(node **)calloc(total_cuts, sizeof(node));
	filter_lists=(id_list **)calloc(total_cuts, sizeof(id_list));
	current_node->rectangle=(hyper_rectangle *)calloc(total_cuts, sizeof(hyper_rectangle));
	
	/* Calculate the region of the hyper rectangle */
	void rectangle_generation(node *);
	rectangle_generation(current_node);
	
	/* Decide the relevant rectangles of each filter by appending them into the associated link lists*/
	void filter_dispatch(id_list *, node *, id_list **, UINT);
	filter_dispatch(filters, current_node, filter_lists, total_cuts);
	
	/*
	bool rectanglecmp(hyper_rectangle, hyper_rectangle);
	for (i=0; i<total_cuts; i++) {
   	if (rectanglecmp(rectangle, current_node->rectangle[i])) {
	printf("\n %d, %d", current_node->cut[0], current_node->cut[1]);
	for (UINT j=0; j<DIMENSIONS; j++)
	printf("%x,%x, ", current_node->rectangle[i].start[j], current_node->rectangle[i].end[j]);
	}
	}
	*/
#ifdef debug
	printf("\n%d, %d, %d, %d, ", node_count, id_list_count(filters), current_node->filter_count, total_cuts);
	for (i=0; i<DIMENSIONS; i++)
		printf("%x,%x(%d), ", current_node->start[i], current_node->end[i], current_node->cut[i]);
#endif
	
	
	if (current_node->filter_count == filter_count) {
		for (i=0; i<total_cuts; i++)
			current_node->branch[i]=NULL;
		for (i=0; i<DIMENSIONS; i++)
			current_node->cut[i]=1;
		filters_count+=filter_count;
		return current_node;
	}
	for (i=0; i<total_cuts; i++)
		if (filter_lists[i]!=NULL)
			if (id_list_compare(filter_lists[i], current_node->filters))
				filter_lists[i]=NULL;
			
			
#ifdef redundant_removal
			rectangle_list *rectangles=(rectangle_list *)calloc(1, sizeof(rectangle_list)), *tmp;
			rectangles->rectangle=current_node->rectangle[0];
			rectangles->filters=filter_lists[0];
			
			for (i=1; i<total_cuts; i++) {
				bool flag=true;
				for (tmp=rectangles; (tmp!=NULL) && flag; tmp=tmp->next)
					if (id_list_compare(filter_lists[i], tmp->filters)) {
						flag=false;
						for (UINT j=0; j<DIMENSIONS; j++) {
							tmp->rectangle.start[j]=min(current_node->rectangle[i].start[j], tmp->rectangle.start[j]);
							tmp->rectangle.end[j]=max(current_node->rectangle[i].end[j], tmp->rectangle.end[j]);
						}
						//		   	if (rectanglecmp(rectangle, tmp->rectangle))
						//		      	printf("");
					}
					if (flag) {
						for (tmp=rectangles; tmp->next!=NULL; )
							tmp=tmp->next;
						tmp->next=(rectangle_list *)calloc(1, sizeof(rectangle_list));
						tmp->next->rectangle=current_node->rectangle[i];
						tmp->next->filters=filter_lists[i];
					}
			}
			
			for (tmp=rectangles; tmp!=NULL; tmp=tmp->next)
				if (tmp->filters!=NULL) {
					node *temp_node=NULL;
					if (rectanglecmp(rectangle, tmp->rectangle)) {
					/* For the redundant branch removal, if the merge rectangle is equal to the original rectangle, it might result in infinite recursive calls,
						Therefore, we must move these filters into the current node (just like the instruction specified in common_filter_extraction)*/
						current_node->filters=tmp->filters;
						current_node->filter_count=id_list_count(current_node->filters);
						for (i=0; i<total_cuts; i++) {
							if (id_list_compare(filter_lists[i], tmp->filters))
								filter_lists[i]=NULL;
						}
					}
					else {
						temp_node=tree_construction(tmp->filters, tmp->rectangle, depth+1);
						for (i=0; i<total_cuts; i++) {
							if (current_node->branch[i]==NULL)
								if (id_list_compare(filter_lists[i], tmp->filters))
									current_node->branch[i]=temp_node;
						}
					}
				}
#else
				for (i=0; i<total_cuts; i++)
					if (id_list_count(filter_lists[i])>0)
						current_node->branch[i]=tree_construction(filter_lists[i], current_node->rectangle[i], depth+1);
#endif
					branch_count+=total_cuts;
					if (current_node->filter_count > 0)
						branch_count++;
					filters_count+=current_node->filter_count;
					return current_node;
}

UINT optimal_cut(id_list *filters, UINT dimension, UINT maximal_cut, UINT start, UINT end) {
	bool range_cover(UINT, UINT, UINT, UINT);
	UINT id_list_count(id_list *), range_calculation(UINT, UINT, UINT);
	UINT i, j;
	UINT range, max_length, mean_length, empty_bucket, *tmp_array, prev_max_length=id_list_count(filters), prev_mean_length=id_list_count(filters); //, prev_empty_bucket=0;
	UINT region_start, region_end, count=0, best_cut=2;
	
	for (i=2; i<=maximal_cut; i*=2) {
		tmp_array=(UINT *)calloc(i, sizeof(UINT));
		range=range_calculation(start, end, i);
		region_start=start;
		region_end=start+range-1;
		
		for (j=0; j<i; j++) {
			for (id_list *head=filters; head != NULL; head=head->next) {
				if (range_cover(region_start, region_end, head->filters->start[dimension], head->filters->end[dimension]))
					tmp_array[j]++;
			}
			region_start=region_end+1;
			region_end=min(region_start+range-1, end);
		}
		
		mean_length=max_length=tmp_array[0];
		empty_bucket=0;
		for (j=1; j<i; j++) {
			if (tmp_array[j]==0)
				empty_bucket++;
			if (tmp_array[j]>max_length)
				max_length=tmp_array[j];
			mean_length+=tmp_array[j];
		}
		mean_length/=i;
		free(tmp_array);
#define threshold 40
		if (((prev_max_length-max_length)*threshold/prev_max_length) >= spfac)
			//      	best_cut=i;
			if (((prev_mean_length-mean_length)*threshold/prev_mean_length) >= spfac)
				best_cut=i;
			//		if ((empty_bucket*threshold/i) <= spfac)
			//      	best_cut=i;
	}
	return best_cut;
}

cut_calculation *cuts_optimization(hyper_rectangle rectangle, id_list *filters) {
	UINT log2(UINT);
	UINT id_list_count(id_list *);
	UINT distinct_field_in_rectangle(id_list *, UINT, hyper_rectangle);
	UINT filter_count=id_list_count(filters), maximal_cut, i;
	int cut_sort( const void *, const void *);
	cut_calculation *cuts=(cut_calculation *)calloc(DIMENSIONS, sizeof(cut_calculation));
	float mean=0.0;
	//計算兩維域上規則的不同范圍的個數
	for (i=0; i<DIMENSIONS; i++) {
		cuts[i].dimension=i;
		cuts[i].distinct_field=distinct_field_in_rectangle(filters, i, rectangle);
	}
	//但是為什么要處以4呢?
	cuts[0].normalized_count=cuts[0].distinct_field/4;
	cuts[1].normalized_count=cuts[1].distinct_field/4;
	
	for (i=0; i<DIMENSIONS; i++)
		mean+=cuts[i].normalized_count;
	//計算不同值的個數的平均值
	mean/=DIMENSIONS;
	//對每一維的cut按照不同范圍的值的個數的大小進行排序,順序是從小到大
	qsort((void *)cuts, DIMENSIONS, sizeof(cut_calculation), cut_sort);
	//maximal_cut是1左移i位第一次大于 f(N)的值 sqrt(x):計算x的平方根
	maximal_cut=log2(sqrt((double)filter_count)*spfac);
	bool flag=false;
	if (maximal_cut >= 2)
		flag=true;
	float temp_count=0.0;
	UINT rouding(float);
	//float pow(float x, float y), 計算x的y次冪,返回冪指數的結果。
	for (i=0; i<DIMENSIONS; i++)
		if ((cuts[i].normalized_count > mean) || (flag))
			temp_count+=cuts[i].normalized_count;
	for (i=0; i<DIMENSIONS; i++)
	if ((cuts[i].normalized_count > mean) || (flag))
				cuts[i].maximal_cuts=pow(2.0, rouding((float)cuts[i].normalized_count*(float)maximal_cut/temp_count));
	else
				cuts[i].maximal_cuts=2;
			
	for (i=0; i<DIMENSIONS; i++)
		if ((cuts[i].normalized_count > mean) || (flag))
					cuts[i].cuts=min(cuts[i].maximal_cuts, optimal_cut(filters, cuts[i].dimension, cuts[i].maximal_cuts, rectangle.start[cuts[i].dimension], rectangle.end[cuts[i].dimension]));
		else  cuts[i].cuts=1;
				
	return cuts;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品国产91久久久久久 | 成人综合婷婷国产精品久久免费| 国模娜娜一区二区三区| 国产一二精品视频| 久久99久久99| 91丝袜国产在线播放| 欧美午夜免费电影| 精品久久久久99| 国产精品网站在线播放| 一区二区三区欧美亚洲| 自拍av一区二区三区| 亚洲精品成人悠悠色影视| 亚洲一区二区视频在线观看| 美女诱惑一区二区| 97国产精品videossex| 亚洲欧美综合网| 日欧美一区二区| 成人app网站| 日韩欧美另类在线| 亚洲aaa精品| 99re视频精品| 精品久久久久一区二区国产| 日韩理论在线观看| 久草精品在线观看| 欧美日韩高清影院| 亚洲婷婷在线视频| 国产成人在线视频免费播放| 欧美日韩免费不卡视频一区二区三区| 欧美国产1区2区| 极品瑜伽女神91| 欧美日韩国产另类不卡| 亚洲欧美中日韩| 国产电影精品久久禁18| 精品久久久久久久一区二区蜜臀| 一区二区三区四区乱视频| 成人晚上爱看视频| 国产日韩欧美一区二区三区乱码 | 综合久久久久久| 日韩国产一二三区| 99精品视频一区| 久久久久久久久97黄色工厂| 天天影视网天天综合色在线播放| 91亚洲精品久久久蜜桃网站| 中文字幕的久久| 不卡一区二区在线| 色综合久久88色综合天天6| 国产精品卡一卡二| 久久疯狂做爰流白浆xx| 欧美性生活一区| 亚洲精品免费在线播放| 91天堂素人约啪| 久久精品亚洲国产奇米99| 久久精品99久久久| 91精品国产aⅴ一区二区| 亚洲风情在线资源站| 黄色日韩网站视频| 久久精品亚洲一区二区三区浴池| 国产酒店精品激情| 中文字幕精品在线不卡| 粉嫩绯色av一区二区在线观看| 日本一区二区免费在线| 国产99久久久精品| 亚洲四区在线观看| 欧美性一级生活| 日日摸夜夜添夜夜添亚洲女人| 欧美伦理影视网| 久草中文综合在线| 国产清纯在线一区二区www| 欧美一区二区三区视频在线| 精品一区二区影视| 国产精品久久久久天堂| 色素色在线综合| 视频在线观看一区二区三区| 日韩久久精品一区| 国产成人福利片| 亚洲免费在线观看视频| 欧美日韩你懂得| 国产精品69毛片高清亚洲| 18成人在线观看| 88在线观看91蜜桃国自产| 久久激五月天综合精品| 国产精品网站在线播放| 欧美主播一区二区三区| 国产一区二区网址| 亚洲人成网站色在线观看 | 毛片不卡一区二区| 国产精品丝袜91| 欧美久久婷婷综合色| 国产美女视频一区| 一区二区三区精品在线观看| 精品国产制服丝袜高跟| 欧美在线观看一二区| 精品一区二区三区免费视频| 亚洲视频一区二区免费在线观看| 欧美老年两性高潮| 成人黄色网址在线观看| 奇米精品一区二区三区四区 | 99国产精品久久久久| 五月天欧美精品| 中文字幕av一区二区三区高| 欧美日韩在线播| 99视频在线观看一区三区| 麻豆视频观看网址久久| 自拍偷拍欧美激情| 久久久久久久一区| 56国语精品自产拍在线观看| 不卡一区二区三区四区| 久久99精品久久久久婷婷| 国产精品久久久久精k8| 欧美精品视频www在线观看| 成人午夜激情视频| 久久精品国产精品青草| 偷拍亚洲欧洲综合| 一区二区三区四区av| 国产嫩草影院久久久久| 欧美成人精精品一区二区频| 日本韩国欧美在线| www.亚洲激情.com| 久久精品国产一区二区三| 午夜精品久久久久久久久| 亚洲精品精品亚洲| 国产精品久久久久久久久久免费看 | 高清久久久久久| 国产在线精品一区二区三区不卡| 日本三级韩国三级欧美三级| 亚洲成人高清在线| 亚洲成人av电影| 亚洲高清在线视频| 亚洲国产日日夜夜| 亚洲午夜精品在线| 一区二区三区日韩| 亚洲图片有声小说| 午夜不卡av在线| 日韩精品成人一区二区在线| 婷婷国产在线综合| 日产精品久久久久久久性色| 日韩影视精彩在线| 性做久久久久久免费观看欧美| 亚洲国产成人porn| 午夜精品影院在线观看| 日本欧美一区二区在线观看| 麻豆一区二区99久久久久| 老司机午夜精品99久久| 狠狠色狠狠色综合系列| 国产成人啪午夜精品网站男同| 国产精品影视在线| 成人app下载| 欧美色国产精品| 制服丝袜中文字幕亚洲| 亚洲精品在线免费观看视频| 天堂影院一区二区| 久久精品国产久精国产| 国产成人av福利| 一本久道久久综合中文字幕| 欧美日韩国产系列| 91福利资源站| 777色狠狠一区二区三区| 91精品欧美综合在线观看最新 | 成人性生交大片免费看中文 | 欧美不卡一区二区| 国产亚洲一区字幕| 久久精品人人做人人爽人人| 国产精品第四页| 亚洲一区二区精品久久av| 蜜臀av一区二区在线免费观看| 久久国产夜色精品鲁鲁99| 久色婷婷小香蕉久久| 99久久精品国产一区二区三区| 欧美性一区二区| 日韩精品一区二| 亚洲欧美日韩一区| 奇米综合一区二区三区精品视频| 成人av在线播放网址| 欧美三级在线看| 国产香蕉久久精品综合网| 亚洲成人你懂的| kk眼镜猥琐国模调教系列一区二区| 欧美精品在线视频| 国产精品久久久久影院色老大| 天天av天天翘天天综合网色鬼国产| 国产一区二区三区日韩| 在线一区二区三区| 日本一区二区三区四区| 日韩专区欧美专区| 97久久人人超碰| 精品久久久久久最新网址| 亚洲一区二区三区在线播放| 国产精品18久久久久久久网站| 欧美一区二区三区在线视频| 亚洲免费观看高清完整版在线观看熊 | 亚洲精品日韩一| 97久久精品人人澡人人爽| 国产午夜精品久久| 国产一区二区视频在线| 日韩午夜激情电影| 久久精品噜噜噜成人88aⅴ| 91精品国产麻豆国产自产在线 | 亚洲第一狼人社区| 欧美午夜理伦三级在线观看| 亚洲自拍都市欧美小说|