“哈希”是什么意思?

时间:2009-04-13 14:25:33

标签: performance algorithm optimization scala hash

何时使用它以及为什么?

我的问题来自句子:“哈希与某些类相比,并将它们的实例与引用相等进行比较”

3 个答案:

答案 0 :(得分:3)

将每个人的答案放在一起:

  

ACL2(Applicative Common Lisp的计算逻辑)是一个由编程语言,一阶逻辑中的可扩展理论和机械定理证明器组成的软件系统。

     

- Wiki ACL2

     

在计算机编程中,cons(发音为/kɒnz/或/kɒns/)是Lisp编程语言的大多数方言的基本功能。 cons构造(因此名称)内存对象,它包含两个值或指向值的指针。这些对象称为(cons)单元格,conses或(cons)对。在Lisp术语中,表达“将x缩写为y”意味着用(cons x y)构造一个新对象。结果对有左半部分,称为汽车(第一个元素),右半部分(第二个元素),称为cdr。

     

- Wiki Cons

     

逻辑上,hons只是cons的另一个名称,即以下是ACL2定理:

     

(等于(hons x y)(cons x y))

     

Hons通常比缺点运行得慢,因为在创建hons时,会尝试查看同一辆车和cdr是否已存在hons。这涉及搜索和使用哈希表。

     

- http://www.cs.utexas.edu/~moore/acl2/current/HONS.html

鉴于你的问题:

  

使用某些类哈希,并将它们的实例与引用相等性进行比较

hash cons似乎是散列LISP构造函数以通过相等比较确定对象是否已存在的过程。

答案 1 :(得分:3)

来自Odersky,Spoon and Venners(2007), Scala编程,Artima Press,p。 243:

通过缓存您在弱集合中创建的所有实例来散列类的实例。然后,每当您想要一个新的类实例时,首先要检查缓存。如果缓存已经具有与您要创建的元素相等的元素,则可以重用现有实例。作为这种安排的结果,任何两个与equals()相等的实例也与引用相等相等。

答案 2 :(得分:2)

http://en.wikipedia.org/wiki/Hash_cons现在重定向。

cons使用散列来进行eq(参考)比较,而不是深度比较。这对于内存更有效(因为相同的对象存储为引用),如果比较是常见的操作,当然会更快。

http://www.cs.utexas.edu/~moore/acl2/current/HONS.html描述了Lisp的实现。