目前,我被要求设计一个 O(n log n)算法,用于将 n 元素插入到带有 n 插槽的哈希表中使用线性探测。
最初,如果哈希函数生成的哈希值最终为单个,则插入 n 元素需要 O(n ^ 2)时间号。
因此,我正在考虑通过使用某种类型的数据结构预测任何元素来防止冲突。
例如:计算每个元素的所有哈希值( O(n)),搜索可能的冲突,更改冲突键的哈希值,然后进行插入。< / p>
我的问题:是否有可能在 O(n log n)时间内找到解决我问题的数据结构?
非常感谢。
答案 0 :(得分:0)
首先,初始化vEB tree以包含0..n-1,表示哈希表的开放槽。要将一个元素插入哈希表,请调用vEB树的FindNext方法一次或两次(如果有环绕)以确定下一个空闲槽,然后调用Delete将其从vEB树中删除。总运行时间为O(n log log n)。