我一直在读《算法导论》我想知道通用散列是否从散列函数集合中选择一个新的散列函数来执行下一个映射。例如,给定一个空表和一个操作序列:[insert,insert,search,delete,insert,…],首先,算法从集合中选择一个函数并执行第一个操作insert。然后,算法是选择一个新的散列函数来执行第二个操作、插入还是使用在算法开始时选择的函数?提前谢谢!

最佳答案

不,哈希函数不是为每个插入的元素单独选择的(如果是),那么如果有人问你“哈希表中是否存在元素foo”,那么你需要知道使用哪种散列函数。这需要使用确定性算法来完成,因为您不可能在可能的输入和散列函数之间保持随机化的1对1映射。这反过来意味着攻击者可以利用此算法的知识来选择最终导致冲突的输入,从而有效地取消了通用散列的优势。
所以:哈希函数是在初始化哈希表时从通用家族中选择的,并且可以(尽管不需要)在发生重新哈希时对其进行更改,但不能在添加或插入单个元素之后进行更改。

关于algorithm - 每个操作完成后,通用哈希是否会再次选择新的哈希函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18205106/

10-12 14:14
查看更多