- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Universal hashing在整数上。 先决条件并且强制性的前提似乎是我们选择了 素数p
大于所有可能键的集合 .
这一点我不清楚。
如果我们的 key 集的类型是 int
那么这意味着素数需要是下一个更大的数据类型,例如long
.
但最终无论我们得到什么作为散列都需要向下转换为 int 以索引散列表。这种向下转换不会以某种方式影响通用哈希的质量(我指的是键在存储桶上的分布)吗?
最佳答案
If our set of keys are integers then this means that the prime number needs to be of the next bigger data type e.g. long.
But eventually whatever we get as the hash would need to be down-casted to an
int
to index the hash table.Doesn't this down-casting affect the quality of the Universal Hashing (I am referring to the distribution of the keys over the buckets) somehow?
p
是否具有另一种数据类型对于散列系列是否通用并不重要。重要的是
p
等于或大于
u
(整数域的最大整数)。重要的是
p
足够大(即
>= u
)。
A hash family is universal when the collision probability is equal or smaller than
1/m
.
p
的值,理论上可以和
long
一样大或者更多。它只需要是一个整数和素数。
u
是域/宇宙的大小(或键的数量)。给定宇宙U = {0, ..., u-1}
, u
表示大小 |U|
. m
是箱或桶的数量p
是一个必须等于或大于 n
的素数H = {h(a,b)(x)}
与 h(a,b)(x) = ((a * x + b) mod p) mod m
. 备注 那个a
和 b
是随机选择的整数(从所有可能的整数中,因此理论上可以大于 p
)模一个素数 p
(这可以使它们小于或大于 m
,箱/桶的数量);但这里也是数据类型(值域无关紧要)。见 Hashing integers on Wikipedia为符号。 _p/m_ * 1/(p-1)
(下划线表示截断小数)。对于 p >> m
( p
远大于 m
)概率趋于 1/m
(但这并不意味着 p
越大,概率会越好)。 p
成为更大的数据类型在这里不是问题,甚至可能是必需的。
p
必须等于或大于 u
和 a
和 b
必须是随机选择的整数模p
,无论桶的数量
m
.有了这些约束,您就可以构建一个通用的哈希族。
unsigned char
的整数的全域(例如在 C 中)。然后U = {0, ..., 255}
p
是(下一个可能的)素数等于或大于 256
. 备注 那个p
可以是这些类型中的任何一种( short
、 int
、 long
有符号或无符号)。关键是数据类型不起作用(在编程中类型主要表示值域。)。是否257
是 short
, int
或 long
为了数学证明的正确性,这里并不重要。我们也可以选择更大的 p
(即更大的数据类型);这不会改变证明的正确性。257
. 25
桶,即 m = 25
.这意味着如果碰撞概率等于或小于 1/25
,哈希族将是通用的。 ,即大约 0.04
. _p/m_ * 1/(p-1)
的值:_257/25_ * 1/256 = 10/256 = 0.0390625
小于 0.04
.它是具有所选参数的通用哈希系列。 m = u = 256
桶。那么我们的碰撞概率为
0.003891050584
,小于
1/256 = 0,00390625
.哈希族仍然是通用的。
m
大于
p
,例如
m = 300
.碰撞概率为0,小于
1/300 ~= 0.003333333333
.微不足道,我们有比键更多的桶。仍然是通用的,没有冲突。
x
类型 int
( |U|
的一个元素) a
, b
, p
类型 long
m
我们稍后会在示例中看到p
使其大于最大值 u
( |U|
的元素), p
类型为 long
. a
和 b
(模 p
)随机。它们的类型是 long
,但总是< p
. x
(类型 int
来自 U
)计算 ((a*x+b) mod p)
. a*x
类型为 long
, (a*x+b)
也是 long
类型等等 ((a*x+b) mod p
也是 long
类型.请注意 ((a*x+b) mod p)
的结果是 < p
.让我们表示结果 h_a_b(x)
. h_a_b(x)
现在被占用 modulo m
,这意味着在这一步它取决于 m
的数据类型是否会出现低迷。然而,这并不重要。 h_a_b(x)
是 < m
,因为我们把它modulo m
. 因此 h_a_b(x) modulo m
的值适合 m
的数据类型。万一它必须被贬低,就不会有值(value)损失。 所以你已经将一个键映射到一个 bin/bucket。 关于hash - 是否可以为整个整数范围实现通用哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31302766/
我不能解决这个问题。和标题说的差不多…… 如果其他两个范围/列中有“否”,我如何获得范围或列的平均值? 换句话说,我想计算 A 列的平均值,并且我有两列询问是/否问题(B 列和 C 列)。我只希望 B
我知道 python 2to3 将所有 xrange 更改为 range 我没有发现任何问题。我的问题是关于它如何将 range(...) 更改为 list(range(...)) :它是愚蠢的,只是
我有一个 Primefaces JSF 项目,并且我的 Bean 注释有以下内容: @Named("reportTabBean") @SessionScoped public class Report
在 rails3 中,我在模型中制作了相同的范围。例如 class Common ?" , at) } end 我想将公共(public)范围拆分为 lib 中的模块。所以我试试这个。 module
我需要在另一个 View 范围 bean 中使用保存在 View 范围 bean 中的一些数据。 @ManagedBean @ViewScoped public class Attivita impl
为什么下面的代码输出4?谁能给我推荐一篇好文章来深入学习 javascript 范围。 这段代码返回4,但我不明白为什么? (function f(){ return f(); functio
我有一个与此结构类似的脚本 $(function(){ var someVariable; function doSomething(){ //here } $('#som
我刚刚开始学习 Jquery,但这些示例对我帮助不大...... 现在,以下代码发生的情况是,我有 4 个表单,我使用每个表单的链接在它们之间进行切换。但我不知道如何在第一个函数中获取变量“postO
为什么当我这样做时: function Dog(){ this.firstName = 'scrappy'; } Dog.firstName 未定义? 但是我可以这样做: Dog.firstNa
我想打印文本文件 text.txt 的选定部分,其中包含: tickme 1.1(no.3) lesson1-bases lesson2-advancedfurther para:using the
我正在编写一些 JavaScript 代码。我对这个关键字有点困惑。如何在 dataReceivedHandler 函数中访问 logger 变量? MyClass: { logger: nu
我有这个代码: Public Sub test() Dim Tgt As Range Set Tgt = Range("A1") End Sub 我想更改当前为“A1”的 Tgt 的引
我正忙于此工作,以为我会把它放在我们那里。 该数字必须是最多3个单位和最多5个小数位的数字,等等。 有效的 999.99999 99.9 9 0.99999 0 无效的 -0.1 999.123456
覆盖代码时: @Override public void open(ExecutionContext executionContext) { super.open(executio
我想使用 preg_match 来匹配数字 1 - 21。我如何使用 preg_match 来做到这一点?如果数字大于 21,我不想匹配任何东西。 example preg_match('([0-9]
根据docs range函数有四种形式: (range) 0 - 无穷大 (range end) 0 - 结束 (range start end)开始 - 结束 (range start end st
我知道有一个UISlider,但是有人已经制作了RangeSlider(用两个拇指吗?)或者知道如何扩展 uislider? 最佳答案 我认为你不能直接扩展 UISlider,你可能需要扩展 UICo
我正在尝试将范围转换为列表。 nums = [] for x in range (9000, 9004): nums.append(x) print nums 输出 [9000] [9
请注意:此问题是由于在运行我的修饰方法时使用了GraphQL解析器。这意味着this的范围为undefined。但是,该问题的基础知识对于装饰者遇到问题的任何人都是有用的。 这是我想使用的基本装饰器(
我正在尝试创建一个工具来从网页上抓取信息(是的,我有权限)。 到目前为止,我一直在使用 Node.js 结合 requests 和 Cheerio 来拉取页面,然后根据 CSS 选择器查找信息。我已经
我是一名优秀的程序员,十分优秀!