允许线性布局的快速算法/数据结构?

时间:2012-02-03 00:07:04

标签: performance algorithm data-structures linear

我正在尝试实现一个我将拥有键值结构对的系统。它们需要以某种线性方式保持(也就是说,它们可以被索引),一旦给定位置不能移动,所以插入只能附加(并且实际上不能进行多次排序)。举个例子,这就是我的想法:

Data list:
    0: { "somekey", somevalue }
    1: { "someotherkey", someothervalue }
    ...
    n: { "justanotherkey", justanothervalue }

我设计了这样的系统,以便在搜索密钥时,可以缓存索引,然后以恒定时间访问。现在,由于我无法预测数据的顺序或数量,而且我无法对其进行排序,我需要关于算法或数据结构的想法,这些想法不仅仅是线性搜索,而且仍然保留约束I'我喜欢。

有人有任何想法吗?我怀疑我能加快速度,但每一点点都有帮助,因为这将成为我系统的核心。提前谢谢!

== EDIT ==

使用两个单独的结构(如哈希表和动态数组)的想法实际上是我的第一个意图。不幸的是,这对我不起作用,因为我无法分离关键和价值。密钥将用于错误和消息,因此即使缓存了索引,仍然需要访问原始密钥。基本上它们必须只是一个数组结构,例如:

struct Entry {
    /* Key is actually a complex struct itself with string, and params */
    Key key;
    Data* data; 
}

2 个答案:

答案 0 :(得分:4)

哈希表键怎么样 - >数组中的索引?

答案 1 :(得分:2)

一种选择是使用散列表和动态数组的组合。这个想法如下 - 每当您将一个元素插入到数据结构中时,您将它附加到动态数组,然后将该键插入到与索引相关联的哈希表中,该表将存在于键/值对所在的动态数组中。这样,要通过索引查找,您可以查看动态数组,并按名称查找,在哈希表中查找索引,然后在该索引处查询。这需要预期的O(1)时间进行插入,删除和访问,这比线性搜索要快得多。

希望这有帮助!