Q13.2
来源:互联网 发布:好弹幕软件下载 编辑:程序博客网 时间:2024/05/21 10:52
f转载自http://hawstein.com/posts/13.2.html
对比哈希表和STL map。哈希表是怎么实现的?如果输入数据规模不大, 我们可以使用什么数据结构来代替哈希表。
解答
对比哈希表和STL map
在哈希表中,实值的存储位置由其键值对应的哈希函数值决定。因此, 存储在哈希表中的值是无序的。在哈希表中插入元素和查找元素的时间复杂度都是O(1)。 (假设冲突很少)。实现一个哈希表,冲突处理是必须要考虑的。
对于STL中的map,键/值对在其中是根据键进行排序的。它使用一根红黑树来保存数据, 因此插入和查找元素的时间复杂度都是O(logn)。而且不需要处理冲突问题。 STL中的map适合以下情况使用:
查找最小元素
查找最大元素
有序地输出元素
查找某个元素,或是当元素找不到时,查找比它大的最小元素
哈希表是怎么实现的
首先需要一个好的哈希函数来确保哈希值是均匀分布的。比如:对大质数取模
其次需要一个好的冲突解决方法:链表法(chaining,表中元素比较密集时用此法), 探测法(probing,开放地址法,表中元素比较稀疏时用此法)。
动态地增加或减少哈希表的大小。比如,(表中元素数量)/(表大小)大于一个阈值时, 就增加哈希表的大小。我们新建一个大的哈希表,然后将旧表中的元素值, 通过新的哈希函数映射到新表。
如果输入数据规模不大,我们可以使用什么数据结构来代替哈希表。
你可以使用STL map来代替哈希表,尽管插入和查找元素的时间复杂度是O(logn), 但由于输入数据的规模不大,因此这点时间差别可以忽略不计。
0 0
- Q13.2
- Q13.1
- Q13.5
- Q13.7
- Q13:Large sum
- Q13.6 C++名字隐藏
- Leetcode Q13: Roman to Integer
- Q13--树的子结构
- Q13.cocoapod_卡在“analyzing_depengcies”问题解决
- Q13--二叉树的镜像
- Q13.4深拷贝和浅拷贝的区别
- Q13:在O(1)时间删除链表结点
- [剑指offer]Q13:O(1)时间删除链表的结点
- Q13.3 关于虚表指针、虚函数表、虚函数表中虚函数地址
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 Q13-15 C++实现
- Show me the code之Python练习册 Q13 获取网络图片
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业四 Q13-20 MATLAB实现
- TPC-H系列---7---TPC-H的22条查询语句分析(Q13--Q15)
- 并查集
- 四种操作xml的方式: SAX, DOM, JDOM , DOM4J的比较
- Rating - HDU 4870 期望dp
- 杭电1021大神教的
- Android的webview加载本地html、本apk内html和远程URL
- Q13.2
- OpenGL ES Programming Guide for iOS 使用OpenGL ES和GLKit绘图
- XmlHelper
- poj1611 The Suspects
- snprintf函数
- 杭电1406先前写的一个错误,因为没有注意给的a,B不一定是A》B所以错误,先确定A,B大小才可以
- hdu 4864 Task(贪心)
- JDBC连接工具类
- 双机热备、事物和长事物