algorithm - 具有快速插入和快速搜索的排序序列的最简单 DS 是什么?

标签 algorithm data-structures

我正在寻找一个易于实现(在 C++ 中)的数据结构 D,它维护一个排序的整数序列(或任何可比较的对象),具有快速插入和快速搜索(即可以检查如果 XD 中,则获取第 i 个元素)。快应该是 O(log(n))、O(1) 还是 O(sqrt(N))?

template<type T>
Class D {
  D(...) { ... }
  void insert(T x);
  int get_ith(int x);
  boolean check_x(T x);
}

目前,我了解 AVL 树、红黑树、跳表、尝试、哈希。所有这些都需要非常复杂且难以编码的解决方案。尝试可能是最不复杂的。然而,删除元素和为 trie 选择字母表等操作是很困难的。

我希望探索简短而快速的新颖解决方案。

提前致谢!

最佳答案

如果您知道整数值的上限,您可以简单地占用一 block 内存并使用集合中数字的位。

  • 如果 X 在 D 中:O(1)
  • 插入:O(1)
  • 删除:O(1)

如果整数在从最低值到最高值的范围内稀疏,迭代会很慢。在这种情况下,内存消耗也可能是 Not Acceptable 。

关于algorithm - 具有快速插入和快速搜索的排序序列的最简单 DS 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122839/

相关文章:

c# - 我怎么在这里得到一个超出范围的异常?

algorithm - 为什么heapify会交换堆顶元素和堆底元素?

algorithm - 修改最短路径以获得最小成本路径

json - 具有多个合作伙伴和 sibling 的家谱的数据结构?

java - 为什么链表删除和插入操作的复杂度为 O(1)?不应该是 O(n)

c - 如何循环结构体?

c++ - 如何在 C++ 中可视化二叉树

algorithm - 在二部图的一侧找到支配的顶点集

perl - 查找列表中最长元素的最快方法(执行时间)

data-structures - codata 和 data 有什么区别?