【发布时间】:2015-03-10 18:33:38
【问题描述】:
我需要一棵二叉树或其他结构,我可以在其中存储带有时间戳的对象,然后不仅通过我知道的时间戳而且通过范围快速查找它们
(timestamp > min && timestamp < max).
我发现 SortedDictionary 和 SortedSet 都实现了二叉树。我缺少的是能够按范围查找 > &&
我的意思是当我打电话时
SortedDictionary.TryGetValue(DateTime.Now, ...
它应该需要对数时间。
我也希望能够在对数时间内获取 Min 和 Max 之间的所有项目。不见了
SortedDictionary.TryGetValueBetween(DateTime.Now-SomeInterval, DateTime.Now+SomeInterval,...
如果我自己实现二叉树,那将不是问题。但我没有看到使用 SortedDictionary 或 SortedSet 进行此操作的机制。而且我不想诉诸线性时间。
我只是没有找到正确的方法,还是我真的需要自己实现二叉树才能获得我正在寻找的好处?
也欢迎其他选项。是否有不同的结构可以让我在日志时间或更短的时间内插入、删除和“范围查找”。
【问题讨论】:
-
您将无法使用其中任何一种 BCL 类型。您需要使用自己的或第三方的树结构。
-
当您可以容忍插入(和删除)的线性时间时,您可以使用简单的数组。旧的 BinarySearch() 方法将为您提供最接近(较低)的索引。
-
谢谢 Henk,但不,我确实需要 log(n) 中的所有 3 个,正如我在问题中提到的那样。虽然找到了一些解决方案。看我的回答。
标签: c# tree binary-tree sortedset sorteddictionary