Tag: 哈希

哈希表运行时复杂性(插入,search和删除)

为什么我在哈希表上看到这些函数的不同运行时复杂性? 在维基上,search和删除是O(n)(我认为哈希表的重点是有恒定的查找,所以如果search是O(n),有什么意义)。 在某些课程笔记中,我看到了一些复杂性,取决于某些细节,包括所有的O(1)。 为什么如果我能得到所有的O(1),还有其他的实现呢? 如果我在像C ++或Java这样的语言中使用标准哈希表,我可以期望时间复杂度是多less?

散列树结构

我刚刚在我的项目中遇到了一个场景,我需要将不同的树对象与已知实例进行比较,并且认为某种在任意树上运行的哈希algorithm将非常有用。 以下面的树为例: Ø / \ / \ OO / | \ | / | \ | OOOO / \ / \ OO 其中每个O表示树的一个节点,是一个任意的对象,有一个关联的散列函数。 所以问题简化为:给定树结构节点的散列码和已知的结构,计算整个树的(相对)无碰撞散列码的体面algorithm是什么? 有关散列函数属性的一些说明: 散列函数应该取决于树中每个节点的散列码以及它的位置。 重新sorting节点的子节点应该明显改变生成的散列码。 反映树的任何部分应明显改变生成的哈希码 如果有帮助的话,我在我的项目中使用C#4.0,虽然我主要是在寻找一个理论上的解决scheme,所以在另一个命令式语言中使用伪代码,描述或者代码就没有问题。 UPDATE 那么,这是我自己提出的解决scheme。 这里得到了很多答案。 每个节点(子树/叶节点)具有以下散列函数: public override int GetHashCode() { int hashCode = unchecked((this.Symbol.GetHashCode() * 31 + this.Value.GetHashCode())); for (int i = 0; i < this.Children.Count; i++) […]

Python字典如何具有相同散列的多个键?

我想了解引擎盖下的Python哈希函数。 我创build了一个自定义类,其中所有实例都返回相同的散列值。 class C(object): def __hash__(self): return 42 我只是假定上面的类只有一个实例可以在任何时候在一个集合中,但实际上一个集合可以有多个具有相同散列的元素。 c, d = C(), C() x = {c: 'c', d: 'd'} print x # {<__main__.C object at 0x83e98cc>:'c', <__main__.C object at 0x83e98ec>:'d'} # note that the dict has 2 elements 我进行了一些尝试,发现如果我重载__eq__方法,使得所有类的实例比较相等,那么这个集合只允许一个实例。 class D(C): def __eq__(self, other): return hash(self) == hash(other) p, q = D(), D() y […]

selectstd :: map和std :: unordered_map

现在, std在unordered_map有一个真正的哈希映射,为什么(或什么时候)我仍然想要在真正存在的系统map通过unordered_map使用好的旧map ? 有什么明显的情况我不能马上看到?

TypeError:不可用types:“字典”,当字典用作另一个字典的关键字

我有这段代码: for element in json[referenceElement].keys(): 当我运行该代码时,我得到这个错误: TypeError:不可能的types:'dict' 这个错误的原因是什么,我能做些什么来解决这个错误?

Python 3.3中的散列函数在会话之间返回不同的结果

我已经在Python 3.3中实现了一个BloomFilter,每次会话都得到不同的结果。 深入研究这个奇怪的行为使我得到了内部的hash()函数 – 它为每个会话返回同一个string的不同散列值。 例: >>> hash("235") -310569535015251310 —–打开一个新的python控制台—– >>> hash("235") -1900164331622581997 为什么发生这种情况? 为什么这是有用的?

Python字典:types错误:不可用types:'列表'

我在从另一个字典开始填充python字典时遇到麻烦。 假设“源”字典有string作为键,并且每个值都有一个自定义对象的列表。 我正在创build我的目标字典,就像我一直在创build我的“源”字典一样,这怎么可能这不起作用? 我明白了 TypeError: unhashable type: 'list' 代码: aTargetDictionary = {} for aKey in aSourceDictionary: aTargetDictionary[aKey] = [] aTargetDictionary[aKey].extend(aSourceDictionary[aKey]) 错误是在这一行: aTargetDictionary[aKey] = []

为什么-1和-2在CPython中散列为-2?

可能重复: 什么时候计算出python对象的哈希值,为什么是-1的哈希值是不同的? 为什么-1和-2都是散列到相同的数字,如果Python? 既然他们这样做,Python如何将这两个数字分开呢? >>> -1 is -2 False >>> hash(-1) is hash(-2) True >>> hash(-1) -2 >>> hash(-2) -2

是否有一个IDictionary的实现,在丢失的键,返回默认值,而不是抛出?

如果关键字丢失,Dictionary中的索引器将引发exception。 是否有一个IDictionary的实现,而不是将返回默认(T)? 我知道“TryGetValue”方法,但这是不可能与linq一起使用的。 这会有效地做我需要的东西吗? myDict.FirstOrDefault(a => a.Key == someKeyKalue); 我不认为这将会迭代键而不是使用散列查找。

Java相当于Python字典

我是Python的长期用户,非常喜欢字典的使用方式。 他们非常直观,易于使用。 有没有一个好的Java相当于Python的字典? 我听说过使用hashmaps和hashtables的人。 有人可以解释使用哈希表和hashmaps与Python的字典的异同吗?