鉴于零比雷埃夫斯对另一个问题的回答,我们认为
x = tuple(set([1, "a", "b", "c", "z", "f"]))
y = tuple(set(["a", "b", "c", "z", "f", 1]))
print(x == y)
True
在启用散列随机化的情况下,大约打印时间的85%。为什么是85%?
我假设这个问题的所有读者都读过:
零比雷埃夫斯的答案和
我对CPython词典的解释。
首先要注意的是,哈希随机化是由解释器启动决定的。
两组字母的哈希值都相同,因此唯一重要的是是否发生冲突(顺序会受到影响)。
通过第二个链接的推论,我们知道这些集合的支持数组从长度8开始:
_ _ _ _ _ _ _ _
在第一种情况下,我们插入1
:
_ 1 _ _ _ _ _ _
然后插入其余部分:
α 1 ? ? ? ? ? ?
然后将其重新映射为32号:
1 can't collide with α as α is an even hash
↓ so 1 is inserted at slot 1 first
? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
在第二种情况下,我们插入其余部分:
? β ? ? ? ? ? ?
然后尝试插入1:
Try to insert 1 here, but will
↓ be rehashed if β exists
? β ? ? ? ? ? ?
然后它将被修复:
Try to insert 1 here, but will
be rehashed if β exists and has
↓ not rehashed somewhere else
? β ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
因此,迭代次数是否不同仅取决于β是否存在。
β的机率是5个字母中的任何一个都将以1模8哈希 并 以1模32哈希的概率。
由于任何哈希到1模32的东西也哈希到1模8,我们想找到32个插槽的机会,所以五个插槽之一在插槽1中:
5 (number of letters) / 32 (number of slots)
5/32为0.15625,因此 在两个固定结构之间有15.625%的订单概率不同 。
一点也不奇怪,这正是零比雷埃夫斯所测量的。
¹从技术上讲,这并不明显。我们可以假装5个散列中的每个散列都是唯一的,因为需要重新哈希处理,但是由于线性探测,实际上更有可能发生“成束的”结构……但是因为我们只查看是否占用了一个插槽,所以不会实际上并没有影响我们。
Generic animation of numbers Parameters anumberstartslave number Anumberendslave number bnumberstartmaster number (start time ingeneral case) Bnumberendmaster number (end time in generalcase) getfunct
我尝试了一些代码在Java中交换两个整数,而不使用第三个变量,即使用XOR。 以下是我尝试的两个交换函数: 该代码产生的输出如下: 我很想知道,为什么会有这样的说法: 和这个不一样?
问题内容: 我尝试了一些代码,使用XOR在Java中交换两个整数而不使用第三个变量。 这是我尝试的两个交换函数: 这段代码产生的输出是这样的: 我很好奇,为什么这样说: 与这个不同吗? 问题答案: 问题是评估的顺序: 参见JLS第15.26.2节 首先,对左操作数求值以产生一个变量。 如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。 否则,将保存
本文向大家介绍计算三元组(a,b,c)的数量,以使C ++中a ^ 2 + b ^ 2 = c ^ 2和1 <= a <= b <= c <= n,包括了计算三元组(a,b,c)的数量,以使C ++中a ^ 2 + b ^ 2 = c ^ 2和1 <= a <= b <= c <= n的使用技巧和注意事项,需要的朋友参考一下 我们得到一个整数n。目标是找到满足条件的三元组(3个数字一组)- a 2
本文向大家介绍题目 info: { a.b: 1, c: 2 }, 转化为 info2:{ a: { b: 1 }, c: 2 }相关面试题,主要包含被问及题目 info: { a.b: 1, c: 2 }, 转化为 info2:{ a: { b: 1 }, c: 2 }时的应答技巧和注意事项,需要的朋友参考一下 No description provided.
我有一个数组。我想对它们进行排序并删除重复项。这个答案建议使用和进行这种操作。运算的顺序不应该改变结果,所以我测量了计算的时间。 是什么使一个比另一个快?还有,有没有更快的办法呢?