我想实现一个系统,我将有键值结构对。它们需要以某种线性方式进行(即可以对它们进行索引),并且一旦给定了一个位置就不能移动,所以只能追加插入(并且不能进行太多排序)。只是作为一个例子,这是什么算盘:允许线性布局的快速算法/数据结构?
Data list:
0: { "somekey", somevalue }
1: { "someotherkey", someothervalue }
...
n: { "justanotherkey", justanothervalue }
我设计的系统,这样以便当键搜索,它的索引可以被缓存,然后用一定的时间访问。现在,由于我无法预测数据的顺序或数量,而且我也无法对其进行排序,所以我需要关于算法或数据结构的想法,这种想法不仅仅是一种线性搜索,而且还保留了我的约束条件,喜欢。
任何人有任何想法?我怀疑我可以加快它的速度,但每一点帮助,因为这将是我的系统的核心。提前致谢!
== EDIT ==
使用两个单独的结构(如哈希表和一个动态数组)的想法实际上是我的第一意图。不幸的是,这对我来说不起作用,因为我无法分开钥匙和价值。密钥将用于错误和消息,因此即使索引已被缓存,原始密钥仍需要被访问。基本上,他们仅仅是一个数组结构,如:
struct Entry {
/* Key is actually a complex struct itself with string, and params */
Key key;
Data* data;
}
为什么你需要缓存索引?散列表的要点是给你O(1)按键的访问权限。 – 2012-02-03 00:47:33
@MikeDunlavey关键是相当复杂(它将是一个任意长度的字符串和一组设置。几个键可以有相同的字符串,但不同的设置。)在这种情况下,什么是一个好的碰撞哈希表算法,可以使用? – Miguel 2012-02-03 03:53:10
那么,我会做的只是把这个大的长键和一起擦到短(如采取32位或64位校验,或者可能是一个消息摘要),或者也许只是将它转换成一串长的位,或一个长字符串。无论散列函数想要什么。与运行散列所需的周期相比,周期方面不应该太昂贵,并且取决于每秒需要执行多少次。 – 2012-02-03 14:42:16