散列 vs 散列函数,不知道区别

hashing vs hash function, don't know the difference

例如,"Consistent hashing"和"Perfect hash function",在维基百科中,我点击"hashing"和link直接指向"hash function",所以他们似乎具有相同的含义,但为什么存在另一个?使用 "hashing" 或 "hash function" 有什么区别吗?可以将 "consistent hashing" 称为 "consistent hash function" 吗?谢谢!

您可以编写一个散列函数,它的作用是将键散列到 bin 中。

换句话说,散列函数 正在执行散列

我希望澄清一下。

HashTable 是一种数据结构,其中给定值映射到特定键以更快地访问元素。 - 填充此数据结构的过程称为 散列

要进行散列,您需要一个函数来提供将值映射到键的逻辑。这个函数是散列函数

我希望这能澄清你的疑问。

一个散列函数接受一些输入数据(通常是一堆二进制字节,但可以是任何东西——无论你做什么)并计算一个散列value,通常是一个整数(但同样可以是任何值)。这样做的过程称为 hashing.

无论输入内容如何,​​散列值的大小始终相同。好吧,我想你冷创建了一个具有可变大小输出的散列函数,但我还没有在野外看到过。这不是很实用。因此,就其本质而言,散列通常是一种单向计算。您通常无法从散列值中取回原始数据,因为可能的输入数据组合比可能的散列值多得多。

主要优点有:

  • 散列值大小始终相同
  • 相同的输入将始终产生相同的输出。
  • 如果它是一个好的散列函数,不同的输入将通常产生不同的输出,但是两个不同的输入仍然有可能产生相同的输出(这被称为哈希冲突).

如果您有加密散列函数,您还会获得一个优势:

  • 由于只有散列值,不可能(不可行)得出散列为该值的输入数据。不要介意它不是原始输入数据,任何 种可以散列为给定输出值的输入数据在有用的时间范围内是不可能找到的。

散列函数的结果可以以多种方式使用。正如其他答案中提到的,哈希表是一个常见的用例。验证数据完整性是另一种情况 - 例如,您下载一个文件,然后对其进行哈希处理,然后将哈希值与您下载该文件的网页中指定的值进行比较。如果它们不匹配,则文件未正确下载。如果将散列值与 public-key 加密相结合,您可以获得数字签名。而且我确信该原则还有其他用途。