数据库中的所有记录都保存在(键,值)对格式中。记录总是可以通过指定键值来检索。需要开发数据结构来处理以下场景
答案 0 :(得分:3)
我假设您的密钥长度最多为d位(十进制)。
普通散列表和附加10 * d二维数组(让我们称之为A)的集合怎么样? A [i] [j]是在第j个位置具有数字i的键组。如果将它们自己实现为哈希表,则这些集可以支持O(1)插入/删除。
答案 1 :(得分:2)
对于1和2,我认为Linked Hash Map是一个不错的选择。
对于第3点,附加的哈希映射(数字,位置)元组作为键和值的指针列表。
两个数据结构都可以包含在一个数据结构中,当然两者都指向相同的数据。
答案 2 :(得分:2)
将密钥存储在trie中。对于示例中的数字(假设4位数字),它看起来像这样:
*root*
|
0 -- 2 - 5 - 6
| |
| +- 3 - 6 - 2
| |
| +- 8 - 7 - 4
|
1 - 4 - 5 - 2
可以以返回(1)或(3)的方式遍历此数据结构。对于(3)来说,维持每个数字的索引的速度不会那么快,所以我想这是一个关于空间或查找时间是否是主要问题的问题。对于(2),它已经是O(log n),但是如果你需要O(1),你可以将密钥存储在trie和哈希表中。
答案 3 :(得分:0)
首先想到的是在每条记录中嵌入一对节点。其中一个节点是按记录索引排序的树的一部分,另一个节点是按记录键排序的树的一部分。然后,您可以使用这些树通过索引或键快速访问记录。有了这个,您还可以快速访问顺序索引或键顺序中的记录。这涵盖了第一和第二个要求。
您可以为十位数值包含5的记录树添加另一个节点。这涵盖了第三个要求。
额外好处:在所有情况下都将使用相同的树处理代码。
答案 4 :(得分:0)
字典(哈希映射等)可以轻松处理这些要求,尽管您的第三个要求是O(N)操作。您只需迭代键并选择符合条件的键。你没有说出你希望的表现是什么。
但O(N)可能足够快。您的数据集中有多少项,以及您执行第三项功能的频率是多少?