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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? srtree_build.c

?? srtree算法實(shí)現(xiàn)
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
	for (j=0; j<dim; j++) {		parent->a[j] = parent->ptr[0]->a[j];		parent->b[j] = parent->ptr[0]->b[j];	}//printf("stop %d\n", stop);	for (j=1; j<stop; j++) {		cal_MBR_node_node(parent->a, parent->b, parent, parent->ptr[j]);	}  //printf("3\n");     //   if (flag == FALSE) break;         node = parent;          }           return;} /* adjust_MBR_delete */     void swap(int *sorted_index, double *value, int i, int j){   int temp_index;  double temp_value;   temp_value = value[i];    value[i] = value[j];  value[j] = temp_value;    temp_index = sorted_index[i];  sorted_index[i] = sorted_index[j];  sorted_index[j] = temp_index;                  return;   }int partition(int *sorted_index, double *value, int start_index, int end_index){  double pivot_value;    int i, j;          pivot_value = value[start_index];          i = start_index - 1;  j = end_index + 1;                  while (1) {           do {                    j = j - 1;          } while (value[j] > pivot_value);         do {                i = i + 1;        } while (value[i] < pivot_value);        if (i < j)                swap(sorted_index, value, i, j);        else                return(j);          }     }/* I think it is sorted in increasing order */void quicksort(int *sorted_index, double *value, int start_index, int end_index){  int pivot;  if (start_index < end_index) {        pivot = partition(sorted_index, value, start_index, end_index);        quicksort(sorted_index, value, start_index, pivot);        quicksort(sorted_index, value, pivot+1, end_index);  }   return;}/* Sort an array in increasing order according to a set of centroid along the axis */void sort_entries_centroid(int *sorted_index, node_type **overnode, int axis_sort){  double *value;  int i;  value = (double *)malloc(sizeof(double) * M+1);  if (overnode[0]->attribute == LEAF) {  	for (i=0; i<= M; i++) {		sorted_index[i] = i;		value[i] = (double)overnode[i]->a[axis_sort];	}  } else {  	for (i=0; i<= M; i++) {		sorted_index[i] = i;		value[i] = (double)overnode[i]->centroid[axis_sort];	}  }  quicksort(sorted_index, value, 0, M);  free(value);  return;} /* sort_entries_centroid */void sort_entries(int *sorted_index, node_type **overnode, int axis_sort){  int i, start, end;  double *value;  value = (double *)malloc(sizeof(double) * M+1);  for (i=0; i<M+1; i++) {	sorted_index[i] = i;	value[i] = (double)overnode[i]->a[axis_sort];  }  quicksort(sorted_index, value, 0, M);  i = 0;  while (i<M) {	if (value[i] == value[i+1]) {		start = i;		while (i < M && value[i] == value[i+1]) {			value[i] = (double)overnode[sorted_index[i]]->b[axis_sort];			i ++;		}		value[i] = (double)overnode[sorted_index[i]]->b[axis_sort];		end = i;			if ((end - start) > 1) {			quicksort(sorted_index, value, start, end);		}		else {			if (value[end] < value[start]) {				swap(sorted_index, value, start, end);			}		}	}	i++;  }  free(value);  return;} /* sort_entries *//* Choose the split axis by maximizing the variance */int ChooseSplitAxisByVariance(node_type **overnode){  int axis_chosen;  double max_variance = -1.0;  double mean;  double variance;  int i, j;  if (overnode[0]->attribute == LEAF) {  	for (i=0; i<dim; i++) {		mean = 0.0;		for (j=0; j <= M; j++) 			mean += overnode[j]->a[i];		mean /= M;		variance = 0.0;		for (j=0; j <= M; j++) 			variance += pow(overnode[j]->a[i] - mean, 2.0);		if (max_variance < variance)			axis_chosen = i;  	}  } else {  	for (i=0; i<dim; i++) {		mean = 0.0;		for (j=0; j <= M; j++) 			mean += overnode[j]->centroid[i];		mean /= M;		variance = 0.0;		for (j=0; j <= M; j++) 			variance += pow(overnode[j]->centroid[i] - mean, 2.0);		if (max_variance < variance)			axis_chosen = i;	}  }  return(axis_chosen);} /* ChooseSplitAxisByVariance */int ChooseSplitAxis(node_type **overnode){  int axis_chosen, *sorted_index;  node_type *group1, *group2;  double new_margin_value, min_margin_value;  int i, j, k, l, stop, cut;  sorted_index = (int *)malloc(sizeof(int) * M+1);  tree_node_allocate(&group1);  tree_node_allocate(&group2);  for (i=0; i<dim; i++) {	sort_entries(sorted_index, overnode, i);   // sort the entries by axis i	new_margin_value = 0.0;	stop = M - 2*m + 1;	for (k=0; k<stop; k++) {        	for (l=0; l<dim; l++) {                	group1->a[l] = overnode[sorted_index[0]]->a[l];	                group1->b[l] = overnode[sorted_index[0]]->b[l];        	        group2->a[l] = overnode[sorted_index[M]]->a[l];                	group2->b[l] = overnode[sorted_index[M]]->b[l];        	}        		j = 0;		cut = m + k;		while (j < M+1) {			if (j < cut) {				cal_MBR_node_node(group1->a, group1->b, group1, overnode[sorted_index[j]]);			}			else {				cal_MBR_node_node(group2->a, group2->b, group2, overnode[sorted_index[j]]);			}			j++;		}		for (l=0; l<dim; l++) {			new_margin_value = new_margin_value + group1->b[l] - group1->a[l];			new_margin_value = new_margin_value + group2->b[l] - group2->a[l];		}	}	if (i == 0) {                axis_chosen = i;                min_margin_value = new_margin_value;	}	else {		if (new_margin_value < min_margin_value) {			axis_chosen = i;			min_margin_value = new_margin_value;		}	}	  }  tree_node_deallocate(group1);  tree_node_deallocate(group2);  free(sorted_index);  return(axis_chosen);} /* ChooseSplitAxis *//* Find the splitting index by minimizing the sum of variances on each side of the split */void ChooseSplitIndexByVariance(node_type **overnode, int axis_chosen, node_type *group1_chosen, node_type *group2_chosen){  int split_index, *sorted_index;  int i, j, k, stop, cut;  double mean1;  double mean2;  double sum_variance;  double min_variance = FLT_MAX;                          sorted_index = (int *)malloc(sizeof(int) * M+1);  // sort the entries by the centroid along the chosen axis  sort_entries_centroid(sorted_index, overnode, axis_chosen);     stop = M - 2*m + 1;  if (overnode[0]->attribute == LEAF) {  	for (k=0; k <= stop; k++) {		cut = m + k;		mean1 = 0.0;		mean2 = 0.0;		sum_variance = 0.0;		for (j=0; j < cut; j++)			mean1 += overnode[sorted_index[j]]->a[axis_chosen];		for (; j <= M; j++)			mean2 += overnode[sorted_index[j]]->a[axis_chosen];		mean1 /= cut;		mean2 /= M + 1 - cut;		for (j=0; j < cut; j++) 			sum_variance += pow(overnode[sorted_index[j]]->a[axis_chosen] - mean1, 2.0);		for (; j <= M; j++)			sum_variance += pow(overnode[sorted_index[j]]->a[axis_chosen] - mean2, 2.0);		if (min_variance > sum_variance) {			min_variance = sum_variance;			split_index = cut;			}	}  } else {  	for (k=0; k <= stop; k++) {		cut = m + k;		mean1 = 0.0;		mean2 = 0.0;		sum_variance = 0.0;		for (j=0; j < cut; j++)			mean1 += overnode[sorted_index[j]]->centroid[axis_chosen];		for (; j <= M; j++)			mean2 += overnode[sorted_index[j]]->centroid[axis_chosen];			mean1 /= cut;		mean2 /= M + 1 - cut;		for (j=0; j < cut; j++) 			sum_variance += pow(overnode[sorted_index[j]]->centroid[axis_chosen] - mean1, 2.0);		for (; j <= M; j++)			sum_variance += pow(overnode[sorted_index[j]]->centroid[axis_chosen] - mean2, 2.0);		if (min_variance > sum_variance) {			min_variance = sum_variance;			split_index = cut;			}	}  }  for (i=0; i<dim; i++) {	group1_chosen->a[i] = overnode[sorted_index[0]]->a[i];	group1_chosen->b[i] = overnode[sorted_index[0]]->b[i];	group2_chosen->a[i] = overnode[sorted_index[M]]->a[i];	group2_chosen->b[i] = overnode[sorted_index[M]]->b[i];  }  cut = split_index;  for (j=0; j<M+1; j++) {	if (j < cut) {                		group1_chosen->ptr[j] = overnode[sorted_index[j]];		overnode[sorted_index[j]]->parent = group1_chosen;		cal_MBR_node_node(group1_chosen->a, group1_chosen->b, group1_chosen, overnode[sorted_index[j]]);	}	else {		group2_chosen->ptr[j-cut] = overnode[sorted_index[j]];                overnode[sorted_index[j]]->parent = group2_chosen;                cal_MBR_node_node(group2_chosen->a, group2_chosen->b, group2_chosen, overnode[sorted_index[j]]);	}  }         group1_chosen->vacancy = M - cut;  group2_chosen->vacancy = cut - 1;	// M - (M+1 - cut);  update_centroid_node(group1_chosen);  update_radius_node(group1_chosen);  update_centroid_node(group2_chosen);  update_radius_node(group2_chosen);  free(sorted_index);  return;        } /* ChooseSplitIndexByVariance */void ChooseSplitIndex(node_type **overnode, int axis_chosen, node_type *group1_chosen, node_type *group2_chosen){  int split_index, *sorted_index;  node_type *group1, *group2;    double new_overlap_value, min_overlap_value;  double vol_at_index, new_vol;  int i, j, k, stop, cut;                            sorted_index = (int *)malloc(sizeof(int) * M+1);  tree_node_allocate(&group1);  tree_node_allocate(&group2);    sort_entries(sorted_index, overnode, axis_chosen);   // sort the entries by the axis, axis_chosen  new_overlap_value = 0.0;    stop = M - 2*m + 1;  for (k=0; k<=stop; k++) {	for (i=0; i<dim; i++) {		group1->a[i] = overnode[sorted_index[0]]->a[i];		group1->b[i] = overnode[sorted_index[0]]->b[i];		group2->a[i] = overnode[sorted_index[M]]->a[i];		group2->b[i] = overnode[sorted_index[M]]->b[i];	}	cut = m + k; 	for (j=0; j<M+1; j++) {  		if (j < cut) {  			cal_MBR_node_node(group1->a, group1->b, group1, overnode[sorted_index[j]]);                        		}		else {                        				cal_MBR_node_node(group2->a, group2->b, group2, overnode[sorted_index[j]]);  		}	}	new_overlap_value = cal_overlap(group1, group2);         	if (k == 0) {   		split_index = k;		min_overlap_value = new_overlap_value;		vol_at_index = cal_vol(group1->a, group1->b) + cal_vol(group2->a, group2->b);  	}	else {                   		if (new_overlap_value < min_overlap_value) {			split_index = k;			min_overlap_value = new_overlap_value;			vol_at_index = cal_vol(group1->a, group1->b) + cal_vol(group2->a, group2->b);		}		else {			new_vol = cal_vol(group1->a, group1->b) + cal_vol(group2->a, group2->b);			if (new_vol < vol_at_index) {				split_index = k;			}		}  	}  }	  for (i=0; i<dim; i++) {	group1_chosen->a[i] = overnode[sorted_index[0]]->a[i];	group1_chosen->b[i] = overnode[sorted_index[0]]->b[i];	group2_chosen->a[i] = overnode[sorted_index[M]]->a[i];	group2_chosen->b[i] = overnode[sorted_index[M]]->b[i];  }  cut = m + split_index;  for (j=0; j<M+1; j++) {	if (j < cut) {                		group1_chosen->ptr[j] = overnode[sorted_index[j]];		overnode[sorted_index[j]]->parent = group1_chosen;		cal_MBR_node_node(group1_chosen->a, group1_chosen->b, group1_chosen, overnode[sorted_index[j]]);	}	else {		group2_chosen->ptr[j-cut] = overnode[sorted_index[j]];                overnode[sorted_index[j]]->parent = group2_chosen;                cal_MBR_node_node(group2_chosen->a, group2_chosen->b, group2_chosen, overnode[sorted_index[j]]);	}  }         group1_chosen->vacancy = M - cut;  group2_chosen->vacancy = cut - 1;	// M - (M+1 - cut);  tree_node_deallocate(group1);  tree_node_deallocate(group2);  free(sorted_index);                         return;        } /* ChooseSplitIndex() */void split(node_type *splitting_node, node_type *extra_node, node_type *node1, node_type *node2) {  node_type **overnode;  int axis_chosen;  int i;  overnode = (node_type **)malloc((M+1) * sizeof(node_type *));  for (i=0; i<M; i++) {        overnode[i] = splitting_node->ptr[i];  }  overnode[M] = extra_node;  for(i=0; i < M; i++) {        node1->ptr[i]=NULL;        node2->ptr[i]=NULL;  }  //axis_chosen = ChooseSplitAxis(overnode);  axis_chosen = ChooseSplitAxisByVariance(overnode);  //ChooseSplitIndex(overnode, axis_chosen, node1, node2);  ChooseSplitIndexByVariance(overnode, axis_chosen, node1, node2);  node1->attribute = NODE;  node1->parent = splitting_node->parent;  node1->id = NO_ID;  node2->attribute = NODE;  node2->parent = splitting_node->parent;  node2->id = NO_ID;  free(overnode);  return;} /* split() */void adjust_tree(node_type *splitting_node, int over_level, int old_level, node_type *node1, node_type *node2, node_type *root) {  int split_child_no = 0;  node_type *split_parent;  int i, j;  if(splitting_node->attribute == ROOT) { 	/* The splitting node is the root */	node1->parent = root;	node2->parent = root;	root->ptr[0] = node1;	root->ptr[1] = node2;	for (j=2; j<M; j++) 		root->ptr[j] = NULL;	root->parent = NULL;	root->vacancy=M-2;	root->attribute=ROOT;	cal_MBR_node_node(root->a, root->b, node1, node2);	update_centroid_node(root);	update_radius_node(root);	extra_level++;	//printf("grow!!!!!!!!!!!!\n");  }  else { 	/* The splitted is an intermediate node */	split_parent = splitting_node->parent;        for(i=0; i < M; i++) {		if(split_parent->ptr[i] == splitting_node) { 			split_child_no = i;	             	break;		}        }	tree_node_deallocate(splitting_node);		/* insert first node */	split_parent->ptr[split_child_no] = node1;	node1->parent = split_parent;	adjust_MBR_delete(node1);	/* insert second node */		if(split_parent->vacancy != 0) { 		/* no need to split again */           	split_parent->ptr[M - split_parent->vacancy] = node2;		node2->parent = split_parent;		split_parent->vacancy--;		//cal_MBR_node_node(split_parent->a, split_parent->b, node1, split_parent);		cal_MBR_node_node(split_parent->a, split_parent->b, node2, split_parent);		adjust_MBR(split_parent);		update_centroid(node2);	}       	else { 		update_centroid(node1);		// Ling		/* need to split again */		overflow(split_parent, over_level-1, old_level, node2, root);	}  }  return;} /* adjust_tree */void choose_leaf_level(node_type **node_found, node_type *current_node, int current_level, node_type *inserted_node, int desired_level) {   int child_chosen;  if (current_level == desired_level) {        *node_found = current_node;        return;  }    //printf("current_level %d desired_level %d\n", current_level, desired_level);  //printf("current_node->ptr[0]->ptr[0] %d\n", current_node->ptr[0]->ptr[0]);  //if (current_node->ptr[0]->ptr[0]->attribute != LEAF) {  if (inserted_node->attribute != LEAF) {    	child_chosen = nearest_centroid(current_node, inserted_node->centroid);        //child_chosen = least_area_enlarge(current_node, inserted_node);  }  else {  	child_chosen = nearest_centroid(current_node, inserted_node->a);        //child_chosen = least_overlap_enlarge(current_node, inserted_node);  }  current_node = current_node->ptr[child_chosen];  //printf("current_level %d desired_level %d\n", current_level, desired_level);  choose_leaf_level(node_found, current_node, current_level+1, inserted_node, desired_level);    return;                        } /* choose_leaf_level */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线精品视频一区二区三四| 午夜精品影院在线观看| 国产精品久久午夜| 亚洲欧洲国产日韩| 亚洲免费毛片网站| 午夜欧美大尺度福利影院在线看 | 成人欧美一区二区三区视频网页 | 亚洲狠狠爱一区二区三区| 亚洲欧美日韩精品久久久久| 亚洲超碰97人人做人人爱| 午夜精品久久一牛影视| 国产一区二区三区在线看麻豆| 成人性色生活片免费看爆迷你毛片| 97se亚洲国产综合自在线| 欧美欧美午夜aⅴ在线观看| 日韩免费高清电影| 国产精品免费观看视频| 性欧美疯狂xxxxbbbb| 国产一区二区0| 91丨porny丨国产| 67194成人在线观看| 欧美r级电影在线观看| 国产三级一区二区三区| 一区二区三区丝袜| 久久99国产精品尤物| 色婷婷综合中文久久一本| 91精品国产福利在线观看| 欧美成人精品高清在线播放| 中文字幕一区在线| 蜜臀久久99精品久久久久宅男| 成人爽a毛片一区二区免费| 欧美日韩精品一区二区| 亚洲国产精品成人综合| 亚洲一卡二卡三卡四卡 | 色欧美乱欧美15图片| 欧美成人乱码一区二区三区| 亚洲嫩草精品久久| 精品中文字幕一区二区小辣椒| 99久久综合99久久综合网站| 宅男在线国产精品| 国产精品伦一区| 日本视频免费一区| 91蝌蚪porny成人天涯| 精品成人免费观看| 五月天国产精品| 91丨九色porny丨蝌蚪| 久久久久久久综合日本| 天天综合色天天| 91黄视频在线| 中文字幕免费观看一区| 免费久久精品视频| 在线视频综合导航| 日韩理论片网站| 国产伦精品一区二区三区免费| 欧美日韩免费观看一区二区三区| 国产精品久久久久久亚洲毛片| 久久99精品久久久久婷婷| 欧美午夜精品理论片a级按摩| 国产精品色眯眯| 国产裸体歌舞团一区二区| 欧美一级生活片| 亚洲成人午夜影院| 一本色道久久综合亚洲91| 欧美成人女星排行榜| 日韩中文字幕1| 色噜噜久久综合| 国产精品免费视频一区| 国产不卡视频在线播放| 精品裸体舞一区二区三区| 天天综合网天天综合色| 在线亚洲人成电影网站色www| 国产精品久久久久久久久免费丝袜| 国内精品久久久久影院薰衣草| 欧美一区二区三区免费视频| 亚洲男女毛片无遮挡| 成人午夜又粗又硬又大| 久久久国产午夜精品| 韩国av一区二区三区在线观看| 日韩女优av电影在线观看| 男男视频亚洲欧美| 日韩一级二级三级精品视频| 丝袜美腿成人在线| 欧美一区二区三区免费视频| 日韩在线a电影| 欧美精品日日鲁夜夜添| 亚洲va欧美va人人爽| 欧美日韩精品高清| 日韩精品免费专区| 日韩视频中午一区| 极品少妇一区二区三区精品视频 | 欧美aaaaa成人免费观看视频| 欧美老年两性高潮| 日韩激情视频在线观看| 这里只有精品视频在线观看| 日韩av一级片| 精品久久久久久最新网址| 国产自产v一区二区三区c| www一区二区| 成人性生交大片免费看中文 | 久久精品72免费观看| 91精品国产黑色紧身裤美女| 午夜精品久久一牛影视| 欧美狂野另类xxxxoooo| 日韩 欧美一区二区三区| 91精品国产欧美日韩| 久色婷婷小香蕉久久| 日韩欧美国产午夜精品| 麻豆国产精品官网| 国产日韩欧美一区二区三区乱码| 国产精品亚洲第一| 亚洲国产精品黑人久久久| eeuss国产一区二区三区| 亚洲色图制服丝袜| 精品视频在线免费观看| 日本午夜一区二区| 久久久亚洲精品一区二区三区| 久久99国产精品麻豆| 国产亚洲欧美日韩俺去了| 成人av网站免费| 亚洲精品久久久蜜桃| 欧美日韩国产123区| 麻豆国产欧美日韩综合精品二区| 26uuu久久天堂性欧美| 波多野结衣精品在线| 亚洲国产日韩精品| 91精品免费在线| 成人午夜激情片| 1000部国产精品成人观看| 欧洲日韩一区二区三区| 亚洲成精国产精品女| 亚洲精品一区二区三区精华液| 国产盗摄一区二区三区| 日韩伦理av电影| 在线成人免费观看| 美女精品一区二区| 中文字幕制服丝袜一区二区三区| 欧美在线|欧美| 久久精品国产免费看久久精品| 久久久久国产精品免费免费搜索| 成人精品视频一区| 午夜亚洲国产au精品一区二区| 国产欧美精品一区二区色综合 | 美国一区二区三区在线播放| 欧美国产一区视频在线观看| 日本高清无吗v一区| 国产成人在线视频网站| 午夜成人免费视频| 国产精品久久久久久户外露出 | 欧美高清在线一区二区| 欧美日韩一区三区| 国产精品一区一区| 日韩精品91亚洲二区在线观看| 中文字幕中文在线不卡住| 日韩欧美一区二区视频| 在线视频你懂得一区二区三区| 国产精品综合久久| 婷婷国产v国产偷v亚洲高清| 亚洲日本一区二区三区| 国产亚洲综合色| 日韩午夜在线影院| 欧美视频一区二区三区在线观看 | 国产精品欧美极品| 精品免费视频.| 9191精品国产综合久久久久久| 极品少妇xxxx精品少妇偷拍| 久久99精品国产麻豆不卡| 亚洲国产精品t66y| 欧美精品一区二区三区蜜桃视频| 91日韩精品一区| 成人av在线资源网| 国产剧情一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲综合精品久久| 中文字幕亚洲精品在线观看| 久久久久亚洲蜜桃| 精品国偷自产国产一区| 欧美精品久久久久久久久老牛影院| 不卡一区二区在线| 国产成人av一区二区三区在线 | 麻豆91在线播放| 午夜精品视频在线观看| 亚洲一区二区在线播放相泽| 亚洲欧美日韩国产成人精品影院| 国产精品美女久久久久久2018| 久久久精品蜜桃| 久久久99久久| 久久久精品免费网站| 亚洲国产精品黑人久久久| 国产精品萝li| 亚洲综合一二三区| 日本中文字幕一区| 激情六月婷婷久久| 成人免费观看视频| 在线视频你懂得一区二区三区| 91传媒视频在线播放| 欧美日韩一区二区三区四区| 制服丝袜一区二区三区| 精品成人免费观看| 国产精品欧美一区二区三区| 亚洲日本在线天堂|