【发布时间】:2018-04-21 16:09:29
【问题描述】:
我想知道,在以下标准和时间(可能很复杂)下是否存在这样的数据结构?
如果我们获得一个未排序的列表 L 并用它构建一个数据结构,如下所示:
- Build(L,X) - 在 O(n) 时间内,我们从 n 个元素的未排序列表中构建结构 S
- 在 O(lg n) 下插入 (y,S) 我们将 z 插入结构 S
- DEL-MIN(S) - 在 O(lg n) 下,我们从 S 中删除最小元素
- DEL-MAX(S) - 在 O(lg n) 下,我们从 S 中删除最大元素
- DEL-MId(S) - 在 O(lg n) 下,我们从 S 中删除上内侧(天花板函数)元素
问题在于列表 L 未排序。这样的数据结构能存在吗?
【问题讨论】:
-
你如何在亚线性时间内构建一个数据结构?您假设此列表具有哪些属性?是链表吗?还有什么?
-
列表以未排序的方式包含数字。如果它是一个链表,这可能吗?我知道这很复杂,这就是为什么我想知道它是否存在
-
当然不是。您不能在不处理项目的情况下将项目放入数据结构中。你的问题有点像“我想做一百万件事,我可以通过做不到一百万件事来做一百万件事吗?”
-
@JohnColeman 让我们慢慢来,逐案进行。实现 Build(L,X)(在 O(n) 下)和 Insert (y,S)(在 O(log n) 下)的最佳方法是什么?
-
我希望“under O(.)”的意思是“in O(.)”。在此前提下,保持子树大小的平衡二叉搜索树就是这样的数据结构。事实上,对于一些流行的语言,只需初步的理解努力是可能的:例如,可以从 C++ 标准库的this GCC extension 构造这样一棵树。