我需要能够根据完整的密钥或密钥的一部分进行查找..
e.g。我可能存储密钥,如10,20,30,40 11,12,30,40,12,20,30,40
我希望能够搜索10,20,30,40或20,30,40
实现这一目标的最佳数据结构是什么。最好的时间。
我们的编程语言是Java ..开源项目的指针将受到赞赏..
提前致谢..
答案 0 :(得分:1)
如果那些是我正在使用的实际数字,我会使用一个数组,其中给定索引包含包含索引的所有记录的数组。如果实际数字较大,我会以相同的方式使用哈希表。
所以结构看起来像(在数组实现的情况下,空索引被省略):
10 => ((10,20,30,40)),
11 => ((11,12,30,40)),
12 => ((11,12,30,40), (12,20,30,40)),
20 => ((10,20,30,40), (12,20,30,40)),
30 => ((10,20,30,40), (11,12,30,40), (12,20,30,40)),
40 => ((10,20,30,40), (11,12,30,40), (12,20,30,40)),
我不清楚您的搜索是包含(基于OR)还是排他(基于AND),但无论是哪种方式,您都可以查找搜索集中每个元素的记录组;对于包容性搜索,您可以找到他们的联盟,并且在专属搜索中找到他们的交集。
答案 1 :(得分:0)
由于您看到关注其他问题(例如空间)的检索时间,我建议您使用哈希表并多次输入项目,每个子项一次。所以你放(“10,20,30,40”,mydata),然后放(“20,30,40”,mydata)等等(当然这将是一种方法,你不会去手动调用多次)。
答案 2 :(得分:0)
使用树形结构。这是一个可能有用的开源项目......用Java编写:-)
http://suggesttree.sourceforge.net/