【问题标题】:Implementing data structure - flex dictionary实现数据结构——弹性字典
【发布时间】:2014-07-16 18:37:34
【问题描述】:

我被要求设计一个表示字典的数据结构。字典包含具有不同键号的项目。数据结构应在 O(1) 时间内支持以下操作:insert(x)、delete(x)、findMin()、findMax()、successor(x)、previous(x)。 search(x) 操作也应该在 O(log n) 时间内完成。

作业是针对以下主题进行的:跳过列表、哈希表和堆。我想最好的结构将是一个跳过列表,但我找不到在 O(1) 中实现插入和删除的方法。有什么建议吗?

【问题讨论】:

    标签: java dictionary hashtable skip-lists


    【解决方案1】:

    您应该同时使用哈希表和跳过列表数据结构。 每次插入元素时,您都可以更新 minmax 值。因此,findMin()findMax() 也是 O(1)
    insert()delete() 也是恒定时间。

    顺便说一句,您不能在搜索之前删除项目。如果您在O(logn) 中搜索,delete() 将自动成为O(logn)

    哈希表在O(1) 中提供(如果实现正确)、搜索、删除和插入。其余操作(successor()predecessor())在跳过列表中可用。

    【讨论】:

    • 很抱歉,但似乎我忘了提及一些假设:delete(k) 操作为您提供了元素的指示符。此外,插入元素的概率:x.key 小于至少 n-i 项,概率为 (2^(i+1)-1)/2^(i+1)。
    • @user3680924 你定义的是一个哈希表。
    猜你喜欢
    • 2012-04-18
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    相关资源
    最近更新 更多