【转】二叉树 VS hashtable
hash_table和二叉搜索树都经常被用来构建符号表(或者字典)以及相关的结构,并且他们都表现出了很高的效率。最近也在不同的程序中使用了这两种数据结构,实现完毕后思考一下,对两者做了一个简单的比较:
1) 二叉搜索树是基于比较的原则实现,而hash_table则采用关键字索引的原则实现的。
2) hash_table的索引结构使得对元素的插入和查找独立于表结构大小,是一个常量时间,具有非常高的效率。但是二叉搜索树的结构也使得插入和查找的效率很高。
3) 由2)看似乎hash_table是符号表的最佳构建方式,但是hash_table也有自己的局限性。实际上hash_table是利用空间在换取时间,hash_table中可能使得一些空间被浪费掉(没有hash到该元素),并且表结构大小一开始就是固定的。另外对于hash函数的选择可能使得出现较多的冲突,影响了效率。不过,hash_table在时间和空间的平衡上还是比较突出的。
4) hash_table的另外一个局限性就是,不利于支持扩展的操作,例如排序。二叉搜索树中的中序遍历就可以得到全部元素的有序序列,而hash_table则不是很容易支持这种操作。再比如选择操作,在二叉搜索树中寻找第k大元素很容易实现,但在hash_table中则要求重新排序得到。
因此在具体应用的时候可以实际情况实际选择:)。
转自:k_eckel:Candidate for Master's Degree,School of Computer,Wuhan University,430079.
【转】二叉树 VS hashtable的更多相关文章
- 必问的Java集合框架面试题
Arraylist 与 LinkedList 异同 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 底层数据结构: Arraylist 底层使用 ...
- 这几道Java集合框架面试题几乎必问
Arraylist 与 LinkedList 异同 补充:数据结构基础之双向链表 ArrayList 与 Vector 区别 HashMap的底层实现 JDK1.8之前 JDK1.8之后 HashMa ...
- 【转】Java学习---集合框架那些事
[原文]https://www.toutiao.com/i6593220692525711885/ Arraylist 与 LinkedList 异同 1. 是否保证线程安全: ArrayList 和 ...
- BAT面试必备——Java 集合类
本文首发于我的个人博客:尾尾部落 1. Iterator接口 Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法.它的一个子接 ...
- Java并发容器,底层原理深入分析
ConcurrentHashMap ConcurrentHashMap底层具体实现 JDK 1.7底层实现 将数据分为一段一段的存储,然后给每一段数据配一把锁, 当一个线程占用锁访问其中一个段数据时, ...
- Java集合框架常见面试题
点击关注公众号及时获取笔主最新更新文章,并可免费领取本文档配套的<Java面试突击>以及Java工程师必备学习资源. 剖析面试最常见问题之Java基础知识 说说List,Set,Map三者 ...
- java 美团面试常见问题总
一 基础篇 1. System.out.println(3|9)输出什么? 2. 说一下转发(Forward)和重定向(Redirect)的区别 3. 在浏览器中输入url地址到显示主页的过程,整个过 ...
- 这几道Java集合框架面试题在面试中几乎必问
Arraylist 与 LinkedList 异同 1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylis ...
- 基于JDK1.8,Java容器源码分析
容器源码分析 如果没有特别说明,以下源码分析基于 JDK 1.8. 在 IDEA 中 double shift 调出 Search EveryWhere,查找源码文件,找到之后就可以阅读源码. Lis ...
随机推荐
- NPOI的测试代码
NPOI\testcases\main\testcases vs10.csproj 需要注意,重新引用一下NPOI类库 需要注意的是,测试项目,使用了NUnit 找到测试项目下的SS文件夹,再定位到U ...
- linux 用grep匹配横线
file的内容如下: ADSFADSFSDFASDFJKJK----------------------------------------ADSFADSFSDFASDFJKJK----------- ...
- mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
原因:没有使用管理员权限 解决方法:使用管理员权限打开cmd,然后运行mysqld -install,服务安装成功
- 1682. Crazy Professor(并查集)
1628 加了些数论知识 先看下剩余类的概念 一个整数被正整数n除后,余数有n种情形:0,1,2,3,…,n-1,它们彼此对模n不同余.这表明,每个整数恰与这n个整数中某一个对模n同余.这样一来,按 ...
- bzoj列表2
之前发过一次了,这里的题较水,没什么好讲的 bzoj1088 直接穷举前两位即可,话说程序员的扫雷是白玩的? bzoj1083 裸的最小生成树(最小生成树=最小瓶颈树),SCOI大丈夫(话说网上二分是 ...
- ASP.NE的缓存技术提高Web站点的性能
一:我们为什么要使用缓存? 先来理解一下asp.net缓存技术的基本原理:把访问频繁的数据以及需要花大量的时间来加载的数据缓存在内存中,那么用户在下次请求同样的数据时,直接将内存中的数据返回给用户,从 ...
- HAOI2011 problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 1047 Solved: 434[Submit][ ...
- window国际化文案
越来越多的程序支持多语言切换,或者能自动适应当前系统语言,让自己开发的程序支持多语言不仅可以让自己的程序被国人使用,也能让外国程序爱好者使用.VC开发多语言程序有多种方法,或读取配置文件,或使用不同资 ...
- 服务器上的iptables
服务器上的iptables 防火墙设置脚本规则 完整脚本如下: 复制代码代码示例: #!/bin/bash# by www.jbxue.comiptab="/sbin/iptables&qu ...
- uboot里读sd卡内容
1. sd卡升级命令 mmcinit 0 fatload mmc 0:1 0 uzImage.bin 80000 fatload mmc 0:1 1000000 initrd.gz 580000 bo ...