整数集合的实现
来源:互联网 发布:北京爱亚卡普网络拍卖 编辑:程序博客网 时间:2024/05/23 15:01
问题:很多应用都需要搜索一组数据,比如编译器查找变量名以得到其地址,拼写检查器查找字典,DNS查找域名来获得IP地址。这与如何存储这些数据紧密相关。比如存储一组整数,如果用集合来存储,如何实现整数集合?
我们一般实现有序整数集合,这样就可以使用二分搜索搜索来快速进行搜索。为简单起见,下面的各种方案只集中于算法的关键部分,并没有考虑错误处理、虚构函数释放资源、拷贝构造等问题。
(1)用标准模板库set来实现:通常标准模板库set是使用平衡二叉树来实现的。
(2)用数组实现:适用于事先知道集合大小的情况。使用了一个哨兵元素,放置一个充分大的数(比集合中任何的元素都大)。这样一旦搜索到这个数,表明到达列表末尾,从而可以简化插入代码,提高运行速度。数组的优点就是可以随机访问。
(3)用链表实现:使用递归遍历来进行有序插入。也使用了一个哨兵结点,其值大于所有实际的值。一旦到达哨兵结点,就表示到达链表末尾。
(4)用二叉树实现:这里用二分搜索树来实现,它是有序的二叉树。将集合元素按序写入数组时使用了中序遍历。为简便,这里没有使用平衡二叉树。平衡二叉树的主要优点就是能确保在最坏情况下也有较好的性能。二叉树的插入时间效率最高,为O(logn)。
(5)用位图实现:位图的优点就是使用移位运算,效率非常高。缺点是当n非常大时,位图会变得很大,占用大量的内存空间,这是一种空间换时间的策略。
(6)使用散列表来实现:箱是一种散列表结构,它结合了链表和位向量的优点。所有的箱用一个数组表示,每个箱中的所有整数用一个有序链表存储。整数t被散列到箱bin[1+maxval/bins]中,这里bins为箱的个数,maxval为充分大的数(存放在哨兵位置处)。
关键算法设计思想:线性结构(数组、链表、位图)、树形结构(二叉树、二分搜索树、平衡二叉树)、散列表结构、集合结构、递归、哨兵技术。
- 整数集合的实现
- 整数集合的若干种实现
- 集合的整数表示
- 集合的整数表示
- 集合的整数表示
- 集合的整数表示
- 集合的整数表示
- 底层实现-intset 整数集合
- 用数组实现整数集合
- 用位向量实现集合----适合小整数的排序
- redis之整数集合的实现源码分析
- 【专栏】集合的整数表示
- redis设计与实现(六)整数集合
- 问题:编写一个程序,实现一个整数集合的基本运算: s1+s2 两整数集合的并运算 s1-s2 两整数集合的差运算 s1*s2 两整数集合的交运算 要求:输入整数集合{2 4 1 3 5}和{2 5 1
- 整数集合
- 我的C实践(3):用宏和位运算来实现整数集合
- 结合redis设计与实现的redis源码学习-6-intset(整数集合)
- 生成一个整数集合的所有子集
- 软件测试视频列表(免费视频)
- extjs 动态添加MenuItem
- 精言妙语集锦
- 悬而未决:WIN2003安全策略中如何指定除了自己以外的所有IP地址
- 祈求帮助
- 整数集合的实现
- 转--幸福的两个关键机制
- NSIS安装程序打包制作工具入门
- SQL Server 安装:以前的某个程序安装已在安装计算机上创建挂起的文件操作 的解决办法
- 致加西亚的信 名言佳句
- 折腾arch
- 百度VS谷歌:优秀与伟大之别
- repeater里添加序号的4种方法
- 序列化和反射代码摘取