我的记录结构如下: - (名称,选项,StartNum,EndNum,空缺)
Name,Option,StartNum,EndNum构成结构/表的复合键。因此,对于这些的特定组合,将只有一个空缺记录。
ABC,X,2,14,1
ADE,X,3,8,0
AEF,Y,1,12,2
ERF,X,12,13,17
可能有:
250-300名称
每个名字 20-30选项
对于每个选项 1-45 StartNum
对于每个StartNum 1-14 EndNum
对于上述条目的每个组合,只有一个空缺条目。
因此最多可以有5,670,000(300 * 30 * 45 * 14)条目
任何人都可以为我的上述要求建议适当的数据结构。数据结构构建操作在离线时可能很慢,但上面提到的两个操作应该非常快。
谢谢,
哈里什
答案 0 :(得分:2)
我会根据元组(Name,Option)创建一个哈希映射。对于这两者的每个组合,可以有一个简单的列表,按(StartNum,EndNum)排序。插入该列表的大小为O(N),但您知道该大小非常小。另一种选择是一些平衡的二叉搜索树或跳过列表。
如果你有一个好的哈希(不应该很难,标准的哈希应该有效),检索的时间复杂度将是O(1 + log(| StartNum | * | EndNum |))。
按2.搜索时,检查所有具有StartNum< = Number的值是否匹配EndNum。
答案 1 :(得分:0)
哈希映射应该很好地满足您的目的。您只需要弄清楚如何为复合键创建一个好的哈希。如果您已经为各个项目设置了哈希值,则可以combine these using a simple XOR。