- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2012-04-23 12:37 编辑
yulihua49 发表于 2012-04-23 12:03
好的。
鉴于问题已经解决,这个问题转化成一个考题:
在一个平衡二叉树里,如何实现不等查找:
测试程序如下(不是算法):64位的。- main()
- {
- long a[NUM];
- int i,n;
- T_Tree *val,*root=NULL;
- INT64 now,min,max;
- for(i=0;i<NUM;i++) {
- a[i]=now_usec()+i;
- root=BB_Tree_Add(root,&a[i],sizeof(long),t_cmp,0);
- }
- val=BB_Tree_MIN(root);
- min=val?*(INT64 *)val->Content:-1;
- val=BB_Tree_MAX(root);
- max=val?*(INT64 *)val->Content:-1;
- n=BB_Tree_Count(root,NULL,NULL);
- printf("MIN=%lld,MAX=%lld,n=%d\n",min,max,n);
- printf("at %lld-%lld,time=%ld\ninput VAL:\n",a[0],a[NUM-1],a[NUM-1] - a[0]);
- //debug=1;
- while(1==scanf("%lld",&now)) {
- // val=BB_Tree_Find(root,&now,sizeof(INT64),t_cmp);
- // val=BB_Tree_GT(root,&now,sizeof(INT64),t_cmp);
- // val=BB_Tree_GTEQ(root,&now,sizeof(INT64),t_cmp);
- // val=BB_Tree_LT(root,&now,sizeof(INT64),t_cmp);
- // val=BB_Tree_LTEQ(root,&now,sizeof(INT64),t_cmp);
- min=now_usec();
- for(i=0;i<10000;i++)
- val=BB_Tree_GT(root,&now,sizeof(INT64),t_cmp);
- min=now_usec()-min;
- if(!val) printf("NULL,time=%lld\n",min);
- else printf("val=%lld,time=%lld\n",*(INT64 *)val->Content,min);
- }
- debug=0;
- now=now_usec();
- for(i=0;i<NUM;i++) {
- n=0;
- root=BB_Tree_Del(root,&a[i],sizeof(long),t_cmp,0,&n);
- // printf("a[%d]=%ld tier %ld\n",i,a[i],n);
- }
- printf("Del %d TIMEVAL=%lld\n",NUM,now_usec()-now);
- }
复制代码 |
|