哪种数据结构适合这种情况?

时间:2009-08-20 13:58:13

标签: language-agnostic data-structures hashtable b-tree kdtree

我正在尝试确定当只需要功能时用于存储键值对的数据结构

  • 插入
  • 查找

具体来说,我不需要能够删除对,也不需要遍历键/值/对。

键是整数元组,值是指针(引用,无论如何)。我只存储了几百万对(很多)对象。

目前我正在考虑使用

  • 哈希表
  • kd-tree
  • a b-tree

我倾向于哈希表(O(1)插入/查找时间),但我想确认我的倾向。

您会推荐哪种结构(上述或其他结构)以及为什么?如果你推荐一个哈希表,我应该为每个对象创建一个单独的表,还是只创建一个表并使用对象的id作为关键元组的一部分?

4 个答案:

答案 0 :(得分:4)

哈希表是最好的选择,因为对你来说重要的所有操作都是O(1)(因此你不必担心创建多个哈希表)。

答案 1 :(得分:1)

我是哈希表的忠实粉丝,因为它们很容易,而且几乎所有主要语言都有可用的实现。 O(1)插入/查找是一个特别好的功能。

您应该使用单个表来节省内存。众所周知,散列表在内存方面效率低下,使用单个表将有助于最小化。

答案 2 :(得分:1)

哈希表在这里很有用,我认为没有理由拥有多个表。

答案 3 :(得分:0)

大多数树具有O(n ln n)查找时间,但哈希表具有O(1)查找时间,因此这是您要使用的查找时间。它也很常见,并且通常会针对启动进行高度优化。