【问题标题】:C# BinaryTree implementationC# 二叉树实现
【发布时间】: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


【解决方案1】:

找到 2 个解决方案:

  1. 仔细检查 SortedSet 确实有我需要的方法:GetViewBetween

  2. 在名为 Wintellect.PowerCollections 的免费第三方库中,有一个 OrderedMultiDictionary 类(请参阅here),它可以满足我的需要,并且允许将重复项放入集合中(与 SortedSet 不同)。获取两个值之间的范围的方法称为 Range()。

据我所知,插入、删除和查找都是在 log(n) 时间内完成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多