algorithm - 什么是存储支持添加、删除元组和比较(在 a 或 b 上)的 2 元组 (a, b) 的最佳数据结构)

标签 algorithm complexity-theory data-structures

所以这是我的问题。我想存储 2 元组 (key, val) 并想执行以下操作:

  • 键是字符串,值是整数
  • 多个键可以有相同的值
  • 添加新元组
  • 用新值更新任何键(任何新值或更新值大于前一个值,如时间戳)
  • 获取所有值小于或大于给定值的键
  • 删除元组。

哈希似乎是更新键值的明显选择,但通过值查找将花费更长的时间 (O(n))。另一种选择是键值交换的平衡二叉搜索树。所以现在通过值查找将很快(O(lg(n)))但更新键将花费(O(n))。那么有没有什么数据结构可以用来解决这些问题呢?

谢谢。

最佳答案

我会使用 2 个数据结构,一个从键到值的哈希表和一个按值排序然后按键排序的搜索树。插入时,将对插入到两个结构中,当按键删除时,从哈希中查找值,然后从树中删除对。更新基本上就是delete+insert。插入、删除和更新是 O(log n)。为了获取所有小于值的键,在搜索树中查找值并向后迭代。这是 O(log n + k)。

好的哈希表和搜索树实现的选择在很大程度上取决于您的数据和操作的特定分布。也就是说,两者的良好通用实现应该就足够了。

关于algorithm - 什么是存储支持添加、删除元组和比较(在 a 或 b 上)的 2 元组 (a, b) 的最佳数据结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643461/

相关文章:

algorithm - 计算复杂度?

java - 是否可以实现由给定的 HashSet 实现支持的 MyHashMap?

algorithm - OpenSSL 库中的素性测试

java - 从头开始实现自定义凝聚算法

complexity-theory - 如果 NP 完全问题 'A' 是多项式时间可简化为另一个问题 'B' 是否意味着 'B' 也是 NP 完全?

java - 是否有可能实现类似于 subList(a,b) 的方法,但当 a>b 时该方法有效?

python-3.x - 当内存中有巨大的(33GB)数据结构(交换中没有)时,Python 会继续运行 10 分钟以上(在程序中的最后一条语句之后)

algorithm - 理解快速排序

c - 在 MPI 中实现 Cannons 算法

algorithm - 命令式 Quicksort 是否就地(in-place)?