小编Vul*_*tan的帖子

可扩展散列:为什么有人使用最重要的位?

在对可扩展散列进行编码时,可以选择使用散列值的最高有效位或最低有效位来确定要散列到哪个桶.使用最低有效位具有许多优点:

  • 当您将目录加倍时,您可以只复制所有指针,而不必创建一个交错它们的新目录.
  • 您可以简化对算法的讨论,甚至根本不讨论比特,只需使用模拟算法,就像使用散列一样.使用3个最低有效位来选择桶与h(x)= x mod 2 ^ 3相同.
  • 您不需要事先指定二进制数的宽度; 如果您使用的是最重要的位,则需要考虑特定的位长.

我无法理解的是为什么在参考之后参考后的参考显示了使用最高有效位完成的可扩展散列.据我所知,最重要的比特产生的唯一优势是纸上(或屏幕上)没有交叉线的图表.是否有任何充分的理由可以解释为什么这么多来源如此最重要而非最少?

database algorithm hash

7
推荐指数
1
解决办法
974
查看次数

lambda表达式中的球拍和未绑定标识符,与r5rs形成对比

在DrRacket中,当我将语言设置为R5RS并运行以下代码时:

(lambda (x) z)
Run Code Online (Sandbox Code Playgroud)

它运行没有错误并返回#<procedure>.这对我来说很有意义; lambda表单定义了一个尚未对其主体进行求值的过程,以便返回该过程.

或者,当我使用Racket语言方言时,我收到以下错误:

z: unbound identifier in module in: z
Run Code Online (Sandbox Code Playgroud)

我不明白为什么Racket会产生这个错误.我的意思是,当然我看到这z是未定义的,但我对评估模型的理解是在函数定义时不评估函数体.这与R5RS结果一致,但与Racket结果无关.什么是球拍在这里做的,确切地说?是否在代码正文中以某种方式"窥视"以查看变量是否已定义?R5RS的评估模型有什么不同导致这种不同的行为?

lambda scheme racket r5rs

4
推荐指数
2
解决办法
1623
查看次数

标签 统计

algorithm ×1

database ×1

hash ×1

lambda ×1

r5rs ×1

racket ×1

scheme ×1