如果密钥属于某个范围,我应该使用哪种数据结构?

时间:2016-08-29 11:05:26

标签: data-structures

TL; DR:我应该使用哪种数据结构来查找密钥需要在一定范围内的键值对?

我正在寻找像Dictionary这样的东西,但有一点扭曲。 我有一个带线的HexEditor,比方说每行8个字节(虽然这可以而且确实有所不同)。

hexeditor显示的memblock中的任何字节都可以有注释 一个或零个注释与一个字节地址相关联 显然,一系列字节可以有多个注释,如果是这样,所有注释都将显示在一行上 我考虑将注释存储在Dictionary<Int, String>但是不起作用,因为我需要查找注释是否在一个范围内,而Dict只匹配完全匹配。 范围可以动态变化,因此我也无法链接到该范围。

可以动态更改每行的字节数,我不想重新构建数据存储/重新计算所有哈希值,因此使用带有起始值的字典作为键出来。

我不想对一行中的每个字节进行Dict查询。 我怀疑答案是“二叉树”,但我希望能有更多的东西O(1)ish。

1 个答案:

答案 0 :(得分:0)

当涉及高常数时间时要小心O(1),就像散列字典的情况一样,因为散列的成本永远不可忽略。

二进制搜索(如在二叉树或有序列表中)只是O(log n),而log是一个增长非常慢的函数。

在查找整数键时,您可以在计算单个哈希的同时执行比较分数,并且比较分数足以在一百万个元素中执行二进制搜索