TL; DR:我应该使用哪种数据结构来查找密钥需要在一定范围内的键值对?
我正在寻找像Dictionary
这样的东西,但有一点扭曲。
我有一个带线的HexEditor,比方说每行8个字节(虽然这可以而且确实有所不同)。
hexeditor显示的memblock中的任何字节都可以有注释
一个或零个注释与一个字节地址相关联
显然,一系列字节可以有多个注释,如果是这样,所有注释都将显示在一行上
我考虑将注释存储在Dictionary<Int, String>
但是不起作用,因为我需要查找注释是否在一个范围内,而Dict只匹配完全匹配。
范围可以动态变化,因此我也无法链接到该范围。
可以动态更改每行的字节数,我不想重新构建数据存储/重新计算所有哈希值,因此使用带有起始值的字典作为键出来。
我不想对一行中的每个字节进行Dict查询。 我怀疑答案是“二叉树”,但我希望能有更多的东西O(1)ish。
答案 0 :(得分:0)
当涉及高常数时间时要小心O(1),就像散列字典的情况一样,因为散列的成本永远不可忽略。
二进制搜索(如在二叉树或有序列表中)只是O(log n),而log是一个增长非常慢的函数。
在查找整数键时,您可以在计算单个哈希的同时执行比较分数,并且比较分数足以在一百万个元素中执行二进制搜索