假设我想创建一个具有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)。
那么我该如何实现这种数据结构呢?
答案 0 :(得分:2)
你做不到。你需要在记忆或时间之间进行交易。创建10个不同的索引(即10个内部词典)以获得O(1)查找时间或进行线性搜索以防止内存占用增加。
这些是你的选择。没有灵丹妙药可以让你在这里得到最好的效果。