符号表实现(Symbol Table Implementations)
2015-08-14 11:20
309 查看
符号表的实现有很多方式,下面介绍其中的几种。
有序(已排序)数组实现
这种情况我们就有了排序好的关键字和相应的值。
其它一些实现方法:
乱序(未排序)数组实现
这种情况,不需要改变数组,操作就在这个数组上执行。在最坏的情况下插入,搜索,删除时间复杂度为O(n)。有序(已排序)数组实现
这种情况我们就有了排序好的关键字和相应的值。
通过关键字在数组中存储
keys[i]为第i位大的key(关键字)
values[i]就是第i位大key对应的值
由于元素是按顺序存储在数组中的,找某个元素就可以用简单的二分搜索。最差的情况,搜索时间复杂度为O(log n),插入和删除时间复杂度为O(n)。keys[i]为第i位大的key(关键字)
values[i]就是第i位大key对应的值
乱序的链表实现
只需要有两个元素的链表就行了。搜索,插入,删除的时间复杂度都是O(n)。有序链表实现
这种方式下,当我们插入元素时,要保持原素的关键字为有序的(比如大小顺序)。即使链表已经排序好了,最坏情况下的插入,删除,搜索操作时间都要O(n)。其它一些实现方法:
二叉树实现
平衡二叉树实现
三元搜索实现
散列表实现
平衡二叉树实现
三元搜索实现
散列表实现
各种符号表实现方式的比较
Implementation | Search | Insert | Delete |
Unordered array | n | n | n |
Ordered Array | log n | n | n |
Unordered List | n | n | n |
Ordered List | n | n | n |
Binary Search Trees (O(log n) on average) | log n | log n | log n |
Balanced Binary Search Tree | log n | log n | log n |
Ternary Search | log n | log n | log n |
Hashing (O(1) on average | 1 | 1 | 1 |
相关文章推荐
- ectouch第二讲之 文件结构
- hdu 1753 大明A+B(大数)
- 线程池;java的线程池的实现原理;适用于频繁互动(如电商网站)
- 特殊约束From To
- 虚拟存储和进程空间
- 使用cocoadPod updating local specs repositories 卡住
- 付出就是成功的根源
- android使用socket实现实时视频
- 查看发行版本信息
- C++11的线程库(二)
- android:inputType参数类型说明
- Clock Skew , Clock Uncertainty和 Period
- [转]Android Studio 1.3.1环境搭建
- html5 touch引发的一个应用以及营销
- 一个简单示例来演示用PHP访问表单变量
- dlopen failed: empty/missing DT_HASH in "libx.so" (built with --hash-style=gnu?)
- python hadoop 在streaming中获取文件名的方法
- Oracle 导入dmp文件命令
- 华为校招上机笔试试题(B卷)——java实现
- 如何改变NSPopover的背景颜色(包括小三角部分)?