什么是哈希函数？
它在计算机科学中广泛使用｡
散列函数只是一个函数, 它为每个输入生成一个固定长度的值｡
好吧, 我会的
那是什么意思？
我这里有一个MD5散列生成器｡
MD5是一种散列函数, 您可能听说过SHA 1､ SHA
256等很多种散列函数｡
使用此哈希函数｡
让我们看看如果我做了会发生什么｡
你好, 我是
你马上就明白了｡
MD5对这个字符串进行哈希运算, 并将其转换为乱码｡
这就是散列函数的作用｡
我们给予它一个输入, 函数会产生一些随机模式｡
现在介绍一下哈希函数的一些关键方面｡
第一, 它是单向的｡
在某种意义上说, 如果我给予别人这个, 他们不知道输入是什么｡
我几乎不可能知道输入是什么｡
第二, 不管我在里面放多少次hello, 它都是一样的｡
但只要我改变一件事, 它就会完全改变输出｡
如果我回去你好和｡
看我刚才改成了大写H, 连个大写字母都没有｡
所以它是以五个D开头的, 如果我大写H, 它又完全不同了｡
看看这个, 我们至少可以这么说｡
嗯嗯嗯
我不知道这有什么用, 但我知道的一件事是, 无论如何, 如果我给予它同样的输入,
它会给我同样的结果｡
但我不知道怎么把这个转换回｡
你好, 我是
这就是我们所说的独立或自主｡
有不同的发音
我不太确定哪一个是哪一个, 但这是一种奇特的说法, 即给定输入的函数总是输出相同的输出｡
现在, 一个好处,
也是为什么我们要在数据结构中使用它, 就是我们可以获得非常快的数据访问, 因为要找到葡萄或篮子点葡萄, 我所要做的就是把葡萄传递到类似MD5哈希的东西中｡
它为我生成这个数字, 我立即知道它在我们电脑上我的内存中的位置｡
但这看起来不像地址, 对吧？
从技术上讲, 我们在哈希表中使用的哈希函数是取葡萄,
生成一些乱码, 然后将其转换为索引空间或地址空间, 它基于这个数字｡
你看, 不像一个比赛, 我们只是有有序的索引与哈希表, 所有我们需要做的是给予它一个关键字, 我们知道确切的地方,
该项目是在我们的内存｡
但你可能会想, 这个黑盒哈希函数, 它不会减慢速度吗？
因为每次我们都要添加一个属性｡
和一个值葡萄和10,000到一个哈希表｡
我们必须通过散列函数来运行它, 这样我们才能决定把它放在内存中的什么位置｡
如果你注意到了这份好工作, 这是一个很大的因素｡
你不希望花很长时间,
因为每次你向内存中添加属性或者从内存中检索属性时, 我们都要把关键葡萄送入哈希函数, 以找到从哪里得到它.
我们需要非常非常快的速度｡
在引擎盖下面, 记住, 因为哈希表存在于所有的语言中, 它们是用一个最优的哈希函数实现的,
这个函数非常快｡
作为旁注｡
像SHA 256这样的散列函数需要很长时间来生成散列｡
这是一个非常复杂的散列函数, 在密码学等领域中经常用到, 你希望这需要更长的时间,
但这超出了本课程的范围｡
如果您感兴趣, 我建议您了解一下这两者之间的区别｡
要检讨｡
我们有一把钥匙, 那就是葡萄｡
我们通过一个散列函数来发送它,
这个函数会非常非常快地散列一些东西, 然后把散列出来的任何东西映射到一个我们想存储的内存地址｡
数据是葡萄1万颗｡
当涉及到散列函数时, 你通常会把它留给你所使用的任何框架或语言｡
我们通常假设时间复杂度或者是一个很大的旧符号, 因为这发生得非常快｡
好吧, 我会的
现在我们已经了解了这个黑盒子的作用, 让我们再多谈一点哈希表, 为什么它们很有用,
为什么在某些情况下比数组更好｡