data-structures - 是否有一种插入时间为 O(1) 且还能保持排序顺序的数据结构?

标签 data-structures binary-search-tree hashtable

哈希表的插入时间复杂度为 O(1),但它们未排序。

BST 保持排序(可以使用前序遍历来遍历),但插入时间复杂度为 O(logN)。

是否存在以下数据结构:

  1. 保证 O(1) 插入
  2. 维持元素的顺序?

如果不是,是否有证据证明这样的数据结构不存在? 谢谢

最佳答案

在一般情况下,这样的数据结构是不可能的,因为您可以使用它来通过 O(n) 比较操作对序列进行排序,只需将序列元素逐一插入其中即可。很容易证明 Ω(n log n) 是 number of comparisons required to sort a list 的下界。 ,因此插入到“保持排序顺序”的数据结构中每个元素必须至少花费 Ω(log n) 时间。

这里我假设可以迭代数据结构以输出排序列表,而不进行任何额外的比较。如果仅仅需要额外的比较来迭代数据结构的内容,那么可以公平地说,数据结构在内部不“维护”排序顺序。如果您不介意花费 O(n log n) 时间来迭代大小为 n 的集合,那么您可以使用未排序的列表作为数据结构,插入时间为 O(1)。

关于data-structures - 是否有一种插入时间为 O(1) 且还能保持排序顺序的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66822548/

相关文章:

database - 我应该在数据库或数据访问层生成一个复杂的对象吗?

c - 释放 C 堆栈并移除悬挂指针

algorithm - 范围树实现

python - 递归二叉搜索树插入

data-structures - 给定元素按递增顺序排序的数组,创建具有最小高度的 BST 的时间复杂度

Java 哈希表,带有 while 循环

c - 如何在结构中的字符串上实现 fnv1a 哈希函数?

c - C 中用于排序 time_t 对象的动态数据结构?

c - 如何将结构插入到 C 中的哈希函数中?

java - BST 的迭代方法