免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9633 | 回复: 9
打印 上一主题 下一主题

[数据结构] 红黑树还是hash? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-29 18:39 |只看该作者 |倒序浏览
对于数据结构而言,红黑树和hash表二者的插入、删除、查找的时间复杂度都很小,但二者有什么区别?以及应用场景?IP层数据包重组用的hash, socket端口用的hash, vm_area用的红黑树,内核的设计者们都是基于什么来考虑的?stl库对set和map的实现有红黑树和hash 2个版本,于是凌乱了,求大神指导。。。

论坛徽章:
0
2 [报告]
发表于 2012-12-30 17:21 来自手机 |只看该作者
这个,什么叫做复杂度都很小?rb整体是不如hash的,当然垃圾的hash是不考虑了。set能做到有序 ,但是hash就无法了。比如呢要求你的数据集是字典序的,那么hash自然退避

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2012-12-30 18:26 |只看该作者
回复 1# xtlx2000
hash 用起来还是比较省事。bucket 大的时候,合理的选择算法,查找的速度就会更快。


   

论坛徽章:
0
4 [报告]
发表于 2012-12-30 21:26 |只看该作者
回复 3# Godbach


    谢谢斑竹,那么既然hash快且方便,为什么内核中上述部分还用到了红黑树?基于什么的考虑?

论坛徽章:
0
5 [报告]
发表于 2012-12-30 21:48 |只看该作者
回复 2# ztz0223


    为什么红黑树整体不如hash,求解,谢谢

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2012-12-30 22:18 |只看该作者
回复 4# xtlx2000

红黑树查找的复杂度和总的表项有关。而 hash 使用时要考虑总的表项数以及选取的 bucket 数。不同的场合用不同的算法。

   

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
7 [报告]
发表于 2012-12-30 22:19 |只看该作者
2楼解释了,红黑树是排序的,hash是无序的。hash只求等值,红黑则可以判断大小。

论坛徽章:
0
8 [报告]
发表于 2012-12-30 22:35 来自手机 |只看该作者
对数复杂度和常数复杂度能比么?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
9 [报告]
发表于 2012-12-31 16:45 |只看该作者
回复 1# xtlx2000
RB数关键是有大小的概念。
而且像VM这用结果,不好hash啊,除非你的bucket非常大,而且线性地址有大小的概念,所以RB数更适合vm.

   

论坛徽章:
0
10 [报告]
发表于 2013-02-03 18:19 |只看该作者
如果考虑遍历等涉及顺序的问题时还是用红黑树较好。但也不是原则性问题,例如可以将hash表中的结点再串联成链表也未尝不可。选择何种数据结构有时还有主观的成分,其实有些代码在新版本中可能会采用其他的数据结构,这在内核代码中是很常见的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP