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

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

?? srtree_build.c

?? srtree算法實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
void cal_centroid(double centroid[], node_type *over_node, node_type *extra_node){ int i, j; int total_size; if (extra_node->attribute == LEAF) { 	for (j=0; j < dim; j++) {		centroid[j] = extra_node->a[j];		total_size = 1;			for (i=0; i < M; i++) {			centroid[j] += over_node->ptr[i]->a[j]; 			total_size++;		}	}	centroid[j] = centroid[j] * 1.0 / total_size; } else { 	for (j=0; j < dim; j++) {		centroid[j] = extra_node->centroid[j];		total_size = 1;		for (i=0; i < M; i++) {			centroid[j] += over_node->ptr[i]->centroid[j] * over_node->ptr[i]->total_size;			total_size += over_node->ptr[i]->total_size;		}		centroid[j] = centroid[j] * 1.0 / total_size;	} } return;} /* cal_centroid */void reinsert(node_type *over_node, int over_level, node_type *extra_node, node_type *root) {  node_type *node_found;  node_type **overnode;  double *value;   int *sorted_index;  int i, start, stop;  double centroid[dim];  //printf("h5\n");  value = (double *)malloc(sizeof(double) * M+1);  sorted_index = (int *)malloc(sizeof(int) * M+1);  overnode = (node_type **)malloc((M+1) * sizeof(node_type *));  for (i=0; i<M; i++) {        overnode[i] = over_node->ptr[i];  }  overnode[M] = extra_node;  overnode[M]->parent = over_node;  cal_centroid(centroid, over_node, extra_node);  if (extra_node->attribute == LEAF) {  	for (i=0; i<M+1; i++) {		value[i] = dist_centroid(overnode[i]->a, centroid);		sorted_index[i] = i;	}  } else {  	for (i=0; i<M+1; i++) {		//value[i] = Dist2(overnode[i], over_node);		value[i] = dist_centroid(overnode[i]->centroid, centroid);		sorted_index[i] = i;	}  }  quicksort(sorted_index, value, 0, M);  for (i=0; i<dim; i++) {	over_node->a[i] = overnode[sorted_index[0]]->a[i];	over_node->b[i] = overnode[sorted_index[0]]->b[i];  }  over_node->ptr[0] = overnode[sorted_index[0]];  stop = M+1-reinsert_p;  for (i=1; i<stop; i++) {	over_node->ptr[i] = overnode[sorted_index[i]];	cal_MBR_node_node(over_node->a, over_node->b, over_node, overnode[sorted_index[i]]);  }  for (i=stop; i<M; i++)	over_node->ptr[i] = NULL;  over_node->vacancy = reinsert_p - 1;  adjust_MBR_delete(over_node);  update_centroid_node(over_node);  update_radius_node(over_node);  update_centroid(over_node);  start = M + 1 - reinsert_p;  for (i=start; i<M+1; i++) {	node_found = root;		choose_leaf_level(&node_found, root, 0, overnode[sorted_index[i]], over_level+extra_level); 	/* Test whether the node has room or not */	if(node_found->vacancy!=0) { 		/* have room to insert the entry */		overnode[sorted_index[i]]->parent = node_found;	        node_found->ptr[M - node_found->vacancy] = overnode[sorted_index[i]];        	node_found->vacancy--;	        adjust_MBR(overnode[sorted_index[i]]);  		update_centroid(overnode[sorted_index[i]]);	}	else {		overflow(node_found, over_level, over_level, overnode[sorted_index[i]], root);	}  }          //printf("h6\n");  return;  } /* reinsert */void overflow(node_type *over_node, int over_level, int old_level, node_type*extra_node, node_type *root){  node_type *node1, *node2;  //printf("h3\n");  if (over_level < old_level && over_level != 0) {	reinsert(over_node, over_level, extra_node, root);  }  else {	tree_node_allocate(&node1);	tree_node_allocate(&node2);        split(over_node, extra_node, node1, node2);        adjust_tree(over_node, over_level, old_level, node1, node2, root);	//printf("overflow, go out adjust, extra_node->id %d\n", extra_node->id);  }          //printf("h4\n");    return;  }void insert_node(node_type *root, double *data, int seq_id){  node_type *node_found, *new_node, *data_node;  int level_found;  int i;  /******/  /* I1 */  /******/  //printf("//////////////////////////////////////\n");  node_found = root;  extra_level=0;  tree_node_allocate(&data_node);  for (i=0; i<dim; i++) {	data_node->a[i] = data[i];	data_node->b[i] = data[i];  }  data_node->attribute = LEAF;  level_found = choose_leaf(&node_found, root, 0, data_node);  /* Now, node_found is the pointer to the leaf chosen */  /******/  /* I2 */  /******/    /********************************************************/  /* Add record to leaaf node:                            */  /* If L has room for another entry, install the entry   */  /* Otherwise invoke split() to split the node */  /********************************************************/      /* Make a leaf node */  tree_leaf_node_allocate(&new_node);  for(i=0; i < dim; i++) {        	new_node->a[i]=data[i];       	new_node->b[i]=data[i];  }  tree_node_deallocate(data_node);  new_node->id = seq_id;		//data[dim] is the seq_id     new_node->attribute=LEAF;  new_node->vacancy=M;  new_node->parent=node_found;  new_node->radius = 0.0;		// Ling  new_node->total_size = 0;		// Ling  new_node->ptr = NULL;  new_node->centroid = NULL;  /*  for(i=0; i < M; i++) {     new_node->ptr[i]=NULL;     //new_node->child_radius[i] = 0.0;     //new_node->child_size[i] = 0;  }  */  /* Test whether the node has room or not */  if(node_found->vacancy!=0) { 	//printf("insert new->id %d\n", seq_id);	//printf("h11\n");	/* have room to insert the entry */	node_found->ptr[M - node_found->vacancy] = new_node;      	node_found->vacancy--;     	adjust_MBR(new_node);	update_centroid(new_node);	//update_centroid(new_node, M-node_found->vacancy);	//printf("h12\n");  }  else {	//printf("h13\n");	overflow(node_found, level_found, level_found+1, new_node, root);	//printf("h14\n");  }  //printf("root->radius = %f, vacancy = %d, size = %d\n", root->radius, root->vacancy, root->total_size);  return;} /* insert_node */  /********************//* build_tree():    *//* build the R-tree *//********************/      void build_tree(node_type **root, double **data, int num_data){   int i, j;  /* make tree root node first */  tree_node_allocate(root);  for(i=0; i < dim; i++) { 	(*root)->b[i] = (double)(-1 * INT_MAX);       	(*root)->a[i] = (double)(INT_MAX);  }  (*root)->id = NO_ID;		//NO_ID  (*root)->attribute=ROOT;  (*root)->vacancy=M;     (*root)->parent=NULL;   (*root)->radius=0.0;  (*root)->total_size=0;  for(j=0; j < M; j++) {     	(*root)->ptr[j]=NULL;	//(*root)->child_radius[j]=0.0;	//(*root)->child_size[j]=0; }  /* add data to the tree */  for(i=0; i<num_data; i++) {        #ifdef DEBUG  	if ((i+1)%10==0)		printf("insert data %d\n", i+1);       #endif      	insert_node(*root, data[i], i);  // i is the seq id.       #ifndef DEBUG	free(data[i]);       #endif  } #ifndef DEBUG  free(data); #endif} /*build_tree */int make_data(char *datafile, double ***data){   int num_data;  int i,j;  FILE *fp_position;  fp_position=fopen(datafile,"r");    num_data = no_histogram;  (*data) = (double **)malloc(sizeof(double*) * num_data);  for(i=0; i<num_data; i++)        (*data)[i] = (double *)malloc(sizeof(double) * dim);  for(i=0; i<num_data; i++)	for (j=0; j<dim; j++)		fscanf(fp_position,"%lf",&((*data)[i][j]));  fclose(fp_position);  return(num_data);} /* make_data */void write_leaf_node(node_type *node, FILE *fp){  int i;                  for (i = 0; i<dim; i++)        fprintf(fp, "%f\n", (node->a)[i]);   for (i = 0; i<dim; i++)        fprintf(fp, "%f\n", (node->b)[i]);   fprintf(fp, "%d\n", node->attribute);  fprintf(fp, "%d\n", node->id);  fprintf(fp, "%d\n", node->vacancy);  return;}void write_inter_node(node_type *node, FILE *fp){  int i, count;  for (i = 0; i<dim; i++)	fprintf(fp, "%f\n", (node->a)[i]);  for (i = 0; i<dim; i++)          fprintf(fp, "%f\n", (node->b)[i]);  fprintf(fp, "%d\n", node->attribute);  for (i = 0; i<dim; i++)          fprintf(fp, "%f\n", (node->centroid)[i]);  fprintf(fp, "%d\n", node->vacancy);  fprintf(fp, "%f\n", node->radius);  fprintf(fp, "%d\n", node->total_size);  count = M - node->vacancy;  for (i=0; i<count; i++) {	if (node->ptr[i]->attribute != LEAF)		write_inter_node(node->ptr[i], fp);	else		write_leaf_node(node->ptr[i], fp);  }  return;}  void check_leaf_node(node_type *node, FILE *fp, int level, char point[]){  int i, j;  for (j=0; j < level; j++)                fprintf(fp, "  ");  for (i = 0; i<dim; i++) {        fprintf(fp, "[%.3f] ", (node->a)[i]);  }  fprintf(fp,"\n");  for (j=0; j < level; j++)                fprintf(fp, "  ");  fprintf(fp, "attribute: %d  ", node->attribute);  fprintf(fp, "ID: %d  ", node->id);  fprintf(fp, "vacancy: %d\n", node->vacancy);  point[node->id] = '1';  return;}int within_rectangle(double parent_a[], double parent_b[], double child_a[], double child_b[]){ int i;  for (i=0; i < dim; i++) {	if (child_a[i] < parent_a[i] || child_a[i] > parent_b[i] ||		child_b[i] > parent_b[i]) 		return FALSE;  }  return TRUE;}/*int within_sphere(double parent_centroid[], double parent_radius, double child_centroid[], double child_radius){ int i; double centroid_centroid = 0.0; for (i=0; i < dim; i++) {	centroid_centroid += pow(parent_centroid[i] - child_centroid[i], 2.0); } if (centroid_centroid + child_radius > parent_radius)	return FALSE; else	return TRUE;}*/int within_sphere(double parent_centroid[], double parent_radius, double point[]){ int i=dim; double centroid_centroid = 0.0; while (i--)        centroid_centroid += pow(parent_centroid[i] - point[i], 2.0);  centroid_centroid = sqrt(centroid_centroid); if (centroid_centroid - _EPSILON > parent_radius) {        printf("Error: centroid_centroid = %f, parent_radius = %f\n", centroid_centroid, parent_radius);        fprintf(stderr, "Error: centroid_centroid = %f, parent_radius = %f\n", centroid_centroid, parent_radius);        return FALSE; } else        return TRUE;}void check_inter_node(node_type *node, FILE *fp, int level, char point[], double **data, int total_level){  char local_point[no_histogram];  int i, count;  int j;  memset(local_point, '0', sizeof(local_point));  for (j=0; j < level; j++)                fprintf(fp, "  ");  fprintf(fp, " [a] ");  for (i = 0; i<dim; i++) {        fprintf(fp, "[%.3f,", (node->a)[i]);        fprintf(fp, "%.3f]  ", (node->b)[i]);  }  fprintf(fp, "\n");  for (j=0; j < level; j++)                fprintf(fp, "  ");  fprintf(fp, " [centroid] ");  for (i = 0; i<dim; i++)        fprintf(fp, "%.3f ", (node->centroid)[i]);  fprintf(fp, "\n");  for (j=0; j < level; j++)                fprintf(fp, "  ");  fprintf(fp, "attribute: %d  ", node->attribute);  fprintf(fp, "vacancy: %d  ", node->vacancy);  fprintf(fp, "radius: %.3f  ", node->radius);  fprintf(fp, "size: %d\n", node->total_size);  count = M - node->vacancy;  for (i=0; i<count; i++) {        fprintf(fp, "\n");        if (!within_rectangle(node->a, node->b, node->ptr[i]->a, node->ptr[i]->b)) {                fprintf(fp, "\nError!  Child %d [%p] of [%p] is out of rectangle bound\n", i, node->ptr[i], node);                fprintf(stderr, "\nError!  Child %d [%p] of [%p] is out of rectangle bound\n", i, node->ptr[i], node);        }        for (j=0; j < level+1; j++)                fprintf(fp, "--");        if (node->ptr[i]->attribute != LEAF) {                fprintf(fp, "[%p] NODE level %d\n", node->ptr[i], level+1);                check_inter_node(node->ptr[i], fp, level+1, local_point, data, total_level);        } else {                fprintf(fp, "[%p] LEAF level %d\n", node->ptr[i], level+1);                check_leaf_node(node->ptr[i], fp, level+1, local_point);                if (level+1 != total_level-1) {                        fprintf(fp, "Error!  leaf level = %d, total level = %d, node = %p\n", level+2, total_level, node);                        fprintf(stderr, "Error!  leaf level = %d, total level = %d, node = %p\n", level+2, total_level, node);                }        }  }  for (i=0; i < no_histogram; i++) {        if (local_point[i] == '1') {                within_sphere(node->centroid, node->radius, data[i]);                point[i] = '1';        }  }  return;}void print_node_address(node_type *node, FILE *fp){  int count = M - node->vacancy;  int i;  fprintf(fp, "[%p] : ", node);  for (i=0; i<count; i++)        fprintf(fp, "[%p][%d]%d ", node->ptr[i], node->ptr[i]->id, node->ptr[i]->attribute);  fprintf(fp, "\n");  if (node->ptr[0]->attribute != LEAF)        for (i=0; i < count; i++)                print_node_address(node->ptr[i], fp);  return;}void check_srtree(node_type *root, double **data){  int i;  char point[no_histogram];  int total_level=1;  FILE *fp;  node_type *node;  memset(point, '0', sizeof(point));  node = root;  while (node->attribute != LEAF) {        total_level++;        node = node->ptr[0];  }  if (!(fp=fopen(CHECK_TREE_LOG, "w"))) {        printf("Can't open file, %s\n", CHECK_TREE_LOG);        exit(EXIT_FAILURE);  }  fprintf(fp, "\nTree height: %d\n", total_level);  fprintf(fp, "\nROOT [%p]\n", root);  check_inter_node(root, fp, 0, point, data, total_level);  for (i=0; i < no_histogram; i++) {        if (point[i] == '1') {                within_sphere(root->centroid, root->radius, data[i]);        }  }  fprintf(fp, "\n");  print_node_address(root, fp);  fclose(fp);  return;}void save_srtree(node_type *root, char save_tree_file[]){  FILE *fp;  //fp = fopen(SAVE_SRTREE_FILE, "w");  fp = fopen(save_tree_file, "w");  if (!fp) {	printf("Can't write to %s\n", save_tree_file);	exit(EXIT_FAILURE);  }    write_inter_node(root, fp);  fclose(fp);   return;}void free_tree(node_type *node){  int i;  if (!node) return;  free(node->a);  free(node->b);  if (node->attribute != LEAF)  	free(node->centroid);  for (i=0; i < M-node->vacancy; i++)	free_tree(node->ptr[i]);  free(node);  return;}void destroy(double **data){ int i; for (i=0; i < no_histogram; i++)	free(data[i]); free(data); return;}int main(int argc, char *argv[]){   int num_data;  double **data;  config_type config;  node_type *root;  float  userTime, sysTime;  struct rusage myTime1, myTime2;  ////////////////////////////  if (argc != 2) {	printf("Build SR-tree\n\n");        printf("Usage: %s <config>\n", argv[0]);        exit(EXIT_FAILURE);  }  ////////////////////////////  getrusage(RUSAGE_SELF,&myTime1);  printf("initialize\n");  initialize(&config, argv[1]);     printf("make_data\n");  num_data=make_data(config.datafile, &data);  printf("build_tree\n");  build_tree(&root, data, num_data);  getrusage(RUSAGE_SELF,&myTime2);  ////////////////////////////  #ifdef DEBUG  printf("check_srtree\n");  check_srtree(root, data);  destroy(data);  #endif  printf("save_srtree\n");  save_srtree(root, config.save_tree_file);  printf("free_tree\n");  free_tree(root);  ////////////////////////////  userTime =                ((float) (myTime2.ru_utime.tv_sec  - myTime1.ru_utime.tv_sec)) +                ((float) (myTime2.ru_utime.tv_usec - myTime1.ru_utime.tv_usec)) * 1e-6;   sysTime =                ((float) (myTime2.ru_stime.tv_sec  - myTime1.ru_stime.tv_sec)) +                ((float) (myTime2.ru_stime.tv_usec - myTime1.ru_stime.tv_usec)) * 1e-6;  fprintf(stdout, "User time : %f seconds\n",userTime);  fprintf(stdout, "System time : %f seconds\n",sysTime);  fprintf(stdout, "Total time : %f seconds\n",userTime+sysTime);  return(0);  } /* main */  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91影院在线免费观看| 国产欧美在线观看一区| 亚洲福利视频导航| 成人福利在线看| 国产欧美精品一区二区三区四区| 蜜臀a∨国产成人精品| 欧美日韩国产高清一区二区三区| 亚洲va欧美va人人爽午夜| 欧美酷刑日本凌虐凌虐| 日韩中文欧美在线| 精品国产乱码久久久久久牛牛| 麻豆国产精品官网| 久久久久久久久久久99999| 国内精品久久久久影院薰衣草| 国产欧美精品一区aⅴ影院| 91亚洲国产成人精品一区二区三| 一区二区三区欧美在线观看| 欧美日本在线一区| 国内外成人在线视频| 亚洲乱码国产乱码精品精小说| 欧美日韩在线一区二区| 精品一区二区三区久久久| 中文字幕巨乱亚洲| 91精品国产色综合久久不卡电影 | 欧美videofree性高清杂交| 国产aⅴ综合色| 午夜精品视频一区| 国产日韩欧美麻豆| 欧美午夜精品免费| 成人免费视频国产在线观看| 亚洲高清三级视频| 中文字幕中文在线不卡住| 日韩一级欧美一级| 欧美在线播放高清精品| av中文字幕一区| 国产剧情一区二区| 男人的天堂久久精品| 亚洲一区二区三区小说| 国产欧美日韩综合| 日韩免费性生活视频播放| 在线观看亚洲精品视频| 91亚洲精品乱码久久久久久蜜桃| 国产在线精品国自产拍免费| 蜜桃视频一区二区| 日本色综合中文字幕| 亚洲一区二区欧美日韩| 一二三区精品视频| 亚洲一二三区视频在线观看| 亚洲免费在线看| 亚洲一区二区三区视频在线 | 日韩一区二区在线免费观看| 欧美日韩免费视频| 欧美日韩国产另类一区| 欧美图片一区二区三区| 欧美综合视频在线观看| 欧美最新大片在线看| 8x8x8国产精品| 26uuu欧美| 亚洲三级在线免费| 亚洲国产成人av网| 狠狠v欧美v日韩v亚洲ⅴ| 精品一区二区三区日韩| 成人av网站在线观看| 一本一道波多野结衣一区二区| 91传媒视频在线播放| 欧美老肥妇做.爰bbww| 精品国产sm最大网站| 最新久久zyz资源站| 亚洲成人激情综合网| 波多野洁衣一区| 色8久久人人97超碰香蕉987| 51精品国自产在线| 亚洲欧洲精品一区二区三区 | 久久综合狠狠综合| 一区二区三区在线免费观看 | 国产精华液一区二区三区| 欧美唯美清纯偷拍| 99久久夜色精品国产网站| 久久99国产精品久久99果冻传媒| 免费成人小视频| 成人不卡免费av| 91在线观看污| 国产在线看一区| 成人国产一区二区三区精品| 欧美日韩国产色站一区二区三区| 精品粉嫩超白一线天av| 婷婷国产v国产偷v亚洲高清| 高清不卡在线观看av| 日韩欧美国产电影| 亚洲精品视频免费看| 国产成人精品午夜视频免费| 337p亚洲精品色噜噜狠狠| 亚洲精品高清在线| av高清久久久| 欧美日本精品一区二区三区| 久久亚区不卡日本| 奇米888四色在线精品| 精品污污网站免费看| 综合久久给合久久狠狠狠97色| 粉嫩一区二区三区性色av| 精品国产3级a| 国产美女精品人人做人人爽| 日韩丝袜美女视频| 久久精品国产亚洲aⅴ| 日韩一级完整毛片| 狠狠狠色丁香婷婷综合久久五月| 欧美不卡一区二区三区四区| 美国十次综合导航| 久久免费看少妇高潮| 国产宾馆实践打屁股91| 国产日韩精品视频一区| 91啦中文在线观看| 丝袜a∨在线一区二区三区不卡 | 亚洲一区二区视频在线| 欧美日韩精品一区二区三区四区| 亚洲午夜精品久久久久久久久| 3atv一区二区三区| 国产美女精品在线| 亚洲图片欧美一区| 日韩女优制服丝袜电影| 国产高清不卡一区| 亚洲最大色网站| 精品国产一区二区三区忘忧草 | 男人的j进女人的j一区| 欧美韩国一区二区| 欧美精品一二三区| 国产精品一区二区久激情瑜伽 | 精品日产卡一卡二卡麻豆| 99在线精品观看| 九一久久久久久| 天堂一区二区在线| 1024精品合集| 久久久久久亚洲综合影院红桃| 91老师国产黑色丝袜在线| 国产在线不卡视频| 日韩精品1区2区3区| 亚洲精品精品亚洲| 国产精品国产馆在线真实露脸| 日韩亚洲欧美成人一区| 色噜噜夜夜夜综合网| 成人一二三区视频| 国产一区二区不卡| 欧美bbbbb| 麻豆精品精品国产自在97香蕉| 一区二区三区不卡视频在线观看| 国产视频一区二区在线观看| 久久久噜噜噜久久中文字幕色伊伊| 欧美精品久久99| 99在线视频精品| 国产91丝袜在线播放九色| 久草这里只有精品视频| 老汉av免费一区二区三区 | 亚洲激情成人在线| 亚洲免费观看在线观看| 亚洲国产日产av| 奇米精品一区二区三区四区| 日本免费新一区视频| 久久精品国产精品青草| 黑人精品欧美一区二区蜜桃| 国产经典欧美精品| 国产精品1区二区.| 男女男精品视频| 久久国产精品99久久人人澡| 国产一区欧美日韩| 99国产精品99久久久久久| 色婷婷av一区二区三区gif| 欧美一区二区三区喷汁尤物| 国产日韩欧美精品在线| 亚洲va欧美va国产va天堂影院| 蜜臀久久久99精品久久久久久| av激情成人网| 久久精品免视看| 午夜av一区二区三区| 国产剧情一区二区三区| 在线一区二区视频| 久久午夜羞羞影院免费观看| 亚洲黄色小视频| 国产精品一区在线| 欧美日韩国产系列| 亚洲美女一区二区三区| 国产综合色精品一区二区三区| 欧美午夜精品久久久久久超碰| 精品国产91乱码一区二区三区 | 91福利视频在线| 国产精品毛片久久久久久| 肉丝袜脚交视频一区二区| 91蜜桃婷婷狠狠久久综合9色| 日韩久久精品一区| 亚洲自拍另类综合| aaa亚洲精品| 国产精品五月天| 国产高清精品久久久久| 日韩精品一区二区三区中文不卡| 亚洲二区视频在线| 欧美日韩一区二区三区免费看 | 国产精品66部| 久久嫩草精品久久久精品| 久久se精品一区精品二区| 欧美一区二区三区喷汁尤物| 亚洲一区二区视频|