使用O(1)搜索时间在Collection中进行多重索引

时间:2013-10-15 19:06:21

标签: c# data-structures dictionary indexing in-memory

假设我想创建一个具有10个属性的Class Collection,此集合包含大约1000万个项目。

现在我想用O(1)时间复杂度搜索这个集合,或者通过Class的任何属性搜索O(1)。(不仅仅是一个属性,即ID或名称)

如果我使用List而不是LINQ查询它将需要O(n)时间复杂度,所以它不能被使用。

C#有字典,只能用一种密钥类型索引。所以它也不能使用。

作为一个解决方案,我可以使用每个属性索引10个词典,但是这个解决方案需要大量内存,因为它有1000万个项目。所以这是不可行的。

P.S。我只想在内存解决方案(无数据库)中,集合可以被类的任何单个属性搜索(例如,MyCollection [2]或MyCollection [“John”]或MyCollection [“12/12/2013”​​]等)和搜索时间必须接近O(1)。

那么我该如何实现这种数据结构呢?

1 个答案:

答案 0 :(得分:2)

你做不到。你需要在记忆或时间之间进行交易。创建10个不同的索引(即10个内部词典)以获得O(1)查找时间或进行线性搜索以防止内存占用增加。

这些是你的选择。没有灵丹妙药可以让你在这里得到最好的效果。