免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yulihua49
打印 上一主题 下一主题

二叉树不等查找的算法谁清楚?前些日子发表CSTL的大侠说说看 [复制链接]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
51 [报告]
发表于 2012-04-20 20:12 |只看该作者
本帖最后由 yulihua49 于 2012-04-20 20:14 编辑
walleeee 发表于 2012-04-20 20:10
回复 49# yulihua49

最终是要搞一个内存数据库。这些是它的核心组件。
持久化由关系数据库构成,本地内存是cache。

论坛徽章:
0
52 [报告]
发表于 2012-04-20 20:14 |只看该作者
回复 51# yulihua49


随便你吧。内存数据库前面挺火的,很久没关注。

你到时总结出来,开新帖就好,其他没什么了

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
53 [报告]
发表于 2012-04-20 20:18 |只看该作者
_Rayx 发表于 2012-04-20 15:03
回复 38# yulihua49

你那个思路可以,跟我想的差不多,下周可以有结果了,你感兴趣的话,下周来关注这个帖子。
我很奇怪,之前人们对此没有需求吗?为什么见不到相关的算法、文献和程序?

论坛徽章:
0
54 [报告]
发表于 2012-04-20 21:27 |只看该作者
回复 53# yulihua49


    应该是有的,这个就是基本的数据结构啊。

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
55 [报告]
发表于 2012-04-21 08:18 |只看该作者
map有lower bound

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
56 [报告]
发表于 2012-04-23 12:03 |只看该作者
本帖最后由 yulihua49 于 2012-04-23 12:21 编辑
selfrun 发表于 2012-04-21 08:18
map有lower bound

好的。
鉴于问题已经解决,这个问题转化成一个考题:
在一个平衡二叉树里,如何实现不等查找:
以[O(log2(N))]的代价,找到大于指定值的最小节点。
建议直接用递归做。

测试结果已经有了:
查找一个65535节点的平衡树,耗时<0.3微秒。

MIN=3544227908739109,MAX=3544227908885454,n=65535
at 3544227908739109-3544227908885454,time=146345
input VAL:
3544227908739109
val=3544227908739166,time=2626   //10000次的微秒数
3544227908885450
val=3544227908885452,time=2610
q
Del 65535 TIMEVAL=34704

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
57 [报告]
发表于 2012-04-23 12:15 |只看该作者
本帖最后由 yulihua49 于 2012-04-23 12:37 编辑
yulihua49 发表于 2012-04-23 12:03
好的。
鉴于问题已经解决,这个问题转化成一个考题:
在一个平衡二叉树里,如何实现不等查找:

测试程序如下(不是算法):64位的。
  1. main()
  2. {
  3. long a[NUM];
  4. int i,n;
  5. T_Tree *val,*root=NULL;
  6. INT64 now,min,max;

  7.         for(i=0;i<NUM;i++) {
  8.                 a[i]=now_usec()+i;
  9.                 root=BB_Tree_Add(root,&a[i],sizeof(long),t_cmp,0);
  10.         }
  11.         val=BB_Tree_MIN(root);
  12.         min=val?*(INT64 *)val->Content:-1;
  13.         val=BB_Tree_MAX(root);
  14.         max=val?*(INT64 *)val->Content:-1;
  15.         n=BB_Tree_Count(root,NULL,NULL);
  16. printf("MIN=%lld,MAX=%lld,n=%d\n",min,max,n);
  17. printf("at %lld-%lld,time=%ld\ninput VAL:\n",a[0],a[NUM-1],a[NUM-1] - a[0]);
  18. //debug=1;
  19.         while(1==scanf("%lld",&now)) {
  20. //              val=BB_Tree_Find(root,&now,sizeof(INT64),t_cmp);
  21. //              val=BB_Tree_GT(root,&now,sizeof(INT64),t_cmp);
  22. //              val=BB_Tree_GTEQ(root,&now,sizeof(INT64),t_cmp);
  23. //              val=BB_Tree_LT(root,&now,sizeof(INT64),t_cmp);
  24. //              val=BB_Tree_LTEQ(root,&now,sizeof(INT64),t_cmp);
  25.         min=now_usec();
  26.         for(i=0;i<10000;i++)
  27.                 val=BB_Tree_GT(root,&now,sizeof(INT64),t_cmp);
  28.         min=now_usec()-min;
  29.                 if(!val) printf("NULL,time=%lld\n",min);
  30.                 else printf("val=%lld,time=%lld\n",*(INT64 *)val->Content,min);
  31.         }
  32. debug=0;
  33. now=now_usec();
  34.         for(i=0;i<NUM;i++) {
  35.                 n=0;
  36.                 root=BB_Tree_Del(root,&a[i],sizeof(long),t_cmp,0,&n);
  37. //              printf("a[%d]=%ld tier %ld\n",i,a[i],n);
  38.         }
  39.         printf("Del %d TIMEVAL=%lld\n",NUM,now_usec()-now);
  40. }
复制代码

论坛徽章:
0
58 [报告]
发表于 2012-04-23 12:37 |只看该作者
回复 56# yulihua49


你不觉得你很有意思么?

在一个平衡二叉树里,如何实现不等查找:
以[O(log2(N))]的代价,找到大于指定值的最小节点。
建议直接用递归做。


你这个说了等于说了什么?我觉得你什么也没说。

就算朴素的,最普通的平衡二叉查找树找“大于指定值的最小节点”,难道不是log(n)时间么?

况且,你不加平衡,不知道你是漏加还是什么原因,你“建议直接用递归做”,我不知道你是怎么做得log(n),说来听听?

论坛徽章:
0
59 [报告]
发表于 2012-04-23 12:38 |只看该作者
回复 57# yulihua49


你觉得你这个代码是给人欣赏的么?

你自己愿意看么?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
60 [报告]
发表于 2012-04-23 12:39 |只看该作者
本帖最后由 yulihua49 于 2012-04-23 12:42 编辑
walleeee 发表于 2012-04-23 12:37
回复 56# yulihua49

是啊是啊。
怎么查,给出程序来,就是那个普通的。
讨论到这,包括另一个帖子,也没人拿出一个像样的程序,网上查的也没有。
就算是STL里有,就另外那个帖子的说法,效率也很可怜。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP