我需要一个二叉树或其他结构,我可以在其中存储带有时间戳的对象,然后快速查找它们,不仅仅是我知道的时间戳,还有一个范围
(timestamp > min && timestamp < max).
我发现SortedDictionary和SortedSet都实现了二叉树。我缺少的是能够按范围查找&gt; &安培;&安培; &LT;而不是在内部强制它(SortedDictionary或SortedSet)来迭代超出他们需要的元素。
我的意思是当我打电话时
SortedDictionary.TryGetValue(DateTime.Now, ...
应该采用对数时间。
我希望能够在对数时间内获得Min和Max之间的所有项目。缺少
SortedDictionary.TryGetValueBetween(DateTime.Now-SomeInterval, DateTime.Now+SomeInterval,...
如果我自己实现二叉树,那就没问题了。但我没有看到使用SortedDictionary或SortedSet进行此操作的机制。而且我不想诉诸线性时间。
我是不是找不到合适的方法,或者我是否真的需要自己实现二叉树以获得我想要的好处?
也欢迎其他选择。是否有一个不同的结构可以让我在日志时间或更好的时间内插入,删除和“范围查找”。
答案 0 :(得分:2)
找到2个解决方案:
仔细观察,SortedSet确实有我需要的方法:GetViewBetween
在一个名为Wintellect.PowerCollections的免费第三方库中,有OrderedMultiDictionary类(请参阅here),它可以满足我的需求并允许重复项进入集合(与SortedSet不同)。获取2个值之间的范围的方法称为Range()。
据我所知,在log(n)时间内进行插入,删除和查找。