相关疑难解决方法(0)

哈希表如何工作?

我正在寻找哈希表如何工作的解释 - 用像我这样的傻瓜的简单英语!

例如,我知道它需要密钥,计算哈希值(我正在寻找解释如何)然后执行某种模数来计算它存储在存储值的数组中的位置,但这就是我的知识停止的地方.

任何人都可以澄清这个过程吗?

编辑:我没有具体询问如何计算哈希码,而是概述哈希表的工作原理.

hash hashtable modulo data-structures

477
推荐指数
11
解决办法
27万
查看次数

如何查找C++ std :: map中是否存在给定键

我正在尝试检查给定的密钥是否在地图中,有些不能这样做:

typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here
Run Code Online (Sandbox Code Playgroud)

那么如何打印p中的内容呢?

c++ dictionary stl

412
推荐指数
9
解决办法
50万
查看次数

.NET数据结构:ArrayList,List,HashTable,Dictionary,SortedList,SortedDictionary - 速度,内存以及何时使用?

.NET有很多复杂的数据结构.不幸的是,它们中的一些非常相似,我不总是确定何时使用一个以及何时使用另一个.我的大多数C#和Visual Basic书籍都在一定程度上谈论它们,但它们从未真正涉及任何真实的细节.

Array,ArrayList,List,Hashtable,Dictionary,SortedList和SortedDictionary之间有什么区别?

哪些是可枚举的(IList - 可以做'foreach'循环)?哪些使用键/值对(IDict)?

内存占用情况如何?插入速度?检索速度?

还有其他值得一提的数据结构吗?

我还在寻找有关内存使用和速度的更多细节(Big-O表示法).

.net c# vb.net arrays data-structures

209
推荐指数
8
解决办法
15万
查看次数

HashMap得到/放置复杂性

我们习惯说HashMap get/put操作是O(1).但是它取决于哈希实现.默认对象哈希实际上是JVM堆中的内部地址.我们是否确定声称get/putO(1)是否足够好?

可用内存是另一个问题.据我所知,从javadocs,HashMap load factor应该是0.75.如果我们在JVM中没有足够的内存且load factor超出限制怎么办?

所以,看起来O(1)似乎不能保证.它有意义还是我错过了什么?

java complexity-theory hashmap data-structures

117
推荐指数
5
解决办法
13万
查看次数

为什么通过键O(1)访问字典的元素,即使哈希函数可能不是O(1)?

我看到你如何通过密钥访问你的收藏.但是,哈希函数本身在幕后有很多操作,不是吗?

假设你有一个很好的哈希函数非常有效,它仍然可能需要很多操作.

这可以解释一下吗?

c# big-o dictionary hashtable

70
推荐指数
5
解决办法
1万
查看次数

哈希如何有o(1)搜索时间?

当我们使用a HashTable来存储数据时,据说搜索需要o(1)时间.我很困惑,任何人都可以解释一下吗?

java hashmap

54
推荐指数
2
解决办法
2万
查看次数

为什么hashmap查找是O(1)即恒定时间?

如果我们从Java角度看,那么我们可以说hashmap查找需要恒定的时间.但内部实施呢?对于不同的匹配键,它仍然必须搜索特定的桶(对于哪个键的哈希码匹配).那么为什么我们说hashmap查找需要恒定的时间?请解释.

hash big-o hashtable hashmap data-structures

33
推荐指数
3
解决办法
3万
查看次数

从n中选择k

我想kn没有选择相同数字两次的情况下随机选择均匀的元素.这有两个简单的方法.

  1. 列出所有n可能性.将它们洗牌(你不需要通过执行Fisher Yates的第一步来改变它们的 所有n数字).选择第一个.这种方法需要时间(假设分配一个大小的数组需要 时间)和空间.如果相对于非常小,这是一个问题.kkkO(k)nO(1)O(n)kn
  2. 存储一组看到的元素.从中随机选择一个数字[0, n-1].当元素在集合中时,然后选择一个新数字.这种方法占用O(k)空间.运行时分析要复杂一些.如果k = theta(n)那时运行时间是 O(k*lg(k))=O(n*lg(n))因为它是优惠券收集器的问题.如果k相对较小n则需要稍微多于O(k)因为选择相同数字两次的概率(尽管很低).这在空间方面优于上述解决方案,但在运行时方面更差.

我的问题:

是否有O(k)时间,O(k)空间算法为所有kn

algorithm shuffle

21
推荐指数
1
解决办法
1774
查看次数

O(1)哈希查找?

我遇到了一个断言HashSet <T> .Contains()是一个O(1)操作.这令我感到惊讶,因为我遇到的每次哈希讨论都提到了碰撞的可能性,可能导致O(n)运行时间.

好奇,我查看了HashSet <T> .Contains和HashTable.Contains的文档.两种方法的文档都提出了同样的主张.

当我查看反射器时,HashSet <T> .Contains()是用for循环实现的,它通过一个包含具有相同散列值的槽列表.

现在可以肯定的是,那些关于哈希的讨论也提到了一个好的哈希算法可以避免冲突,在这种情况下查找确实是O(1).但我对Big O符号的理解是,它是最糟糕的运行时间,而不是最好的.

O(1)声明是否错误?或者我错过了什么?

.net c# hash

15
推荐指数
4
解决办法
1444
查看次数

C++中的哈希表

是C++的插入/删除/查找时间std::map O(log n)吗?是否可以实现O(1)哈希表?

c++ hashtable map

9
推荐指数
2
解决办法
1万
查看次数