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

Language agnostic 哪种数据结构适合这种情况?,language-agnostic,data-structures,hashtable,b-tree,kdtree,Language Agnostic,Data Structures,Hashtable,B Tree,Kdtree,当只需要特性时,我试图决定使用哪个数据结构来存储键值对 插入 查找 具体来说,我不需要能够删除对,也不需要遍历键/值/对 键是整数元组,值是指针(引用等)。我只存储了分布在(许多)对象上的几百万对 目前我正在考虑使用 哈希表 树 b树 我倾向于哈希表(对于O(1)插入/查找时间),但我想确认我的倾向 你会推荐(以上或其他)哪种结构?为什么?如果您建议使用哈希表,我应该为每个对象创建一个单独的表,还是只创建一个表并将对象的id用作键元组的一部分?哈希表将是最佳选择,因为对您来说重要的所有操

当只需要特性时,我试图决定使用哪个数据结构来存储键值对

  • 插入
  • 查找
具体来说,我不需要能够删除对,也不需要遍历键/值/对

键是整数元组,值是指针(引用等)。我只存储了分布在(许多)对象上的几百万对

目前我正在考虑使用

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


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

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

我非常喜欢哈希表,因为它们很简单,而且几乎每种主要语言都有实现。O(1)插入/查找是一个特别好的特性


您可能应该使用一个表来节省内存。哈希表在内存方面的效率是出了名的低,使用一个表将有助于将其最小化。

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

大多数树都有O(n ln n)查找时间,但哈希表有O(1)查找时间,所以这就是您想要使用的时间。这也是很常见的,而且通常实现都经过了高度优化以启动。

O(1)vs O(logn)放在一边——我(轶事地)读到,散列映射只在某些n以上执行得更好,因为常数高到足以阻止在某些情况下使用它。几百万对我来说听起来足够高了,但你知道一些数字吗?或者这是如此依赖于实现,以至于只有分析才能有所帮助?这篇文章的背景是哈希表kd树是一种空间数据结构-在这种情况下使用它没有任何意义。你是说一棵红黑的树吗?你将如何使用这个数据结构?你是在前面做所有的插入,还是把它们和查找混合在一起?与插入相比,您希望进行多少次查找?钥匙是独一无二的吗?有多少把钥匙(2^64?)。它们是如何分发的?