我一直在阅读“算法简介”。我想知道通用哈希是否从哈希函数集合中选择一个新的哈希函数来进行下一个映射。例如,给定一个空表和一系列操作:[insert,insert,search,delete,insert,...],首先,算法从集合中选择一个函数并执行第一个操作insert。然后,算法是否选择新的哈希函数来执行第二次操作,插入或使用算法开头选择的函数?提前谢谢!
答案 0 :(得分:1)
不,不为每个插入元素单独选择哈希函数 - 如果是,如果有人问你“元素foo
是否存在,你需要知道使用哪个哈希函数”哈希表”?这将通过必要的确定性算法来完成,因为您不可能在可能的输入和散列函数之间维持随机的1对1映射。而 反过来意味着攻击者可以使用该算法的知识来选择最终导致冲突的输入,从而有效地消除了通用哈希的优势。
因此:在初始化哈希表时从通用族中选择哈希函数,并且可以(尽管没有必要)在发生重新哈希时更改它 - 但不是在添加或插入单个元素之后。