【问题标题】:C# Interval tree classC#区间树类
【发布时间】:2012-01-07 22:02:47
【问题描述】:

我正在寻找一个区间树 C# 集合类。

我需要能够添加区间,最好是 2D,否则我可以组合两个标准的 1D 区间树。

我还需要能够找出与给定间隔重叠的间隔。

我找到了这个intervaltree.codeplex.com 但是

没有与此版本相关的下载。

编辑:

在此处继续:C# using others code

【问题讨论】:

  • 如果间隔大致相同并且大小上限相对较小,则可以使用简单的二维数组。这就是我几年前在 RTS 游戏中所做的。
  • 我已经在下载页面放了一个源的下载文件。希望现在会更容易。

标签: c# codeplex interval-tree


【解决方案1】:

我刚刚写了另一个实现,可以在这里找到: https://github.com/mbuchetics/RangeTree

它还附带一个异步版本,该版本使用任务并行库 (TPL) 重建树。

【讨论】:

【解决方案2】:

codeplex页面上有下载:http://intervaltree.codeplex.com/SourceControl/list/changesets->右手边->下载

【讨论】:

  • 谢谢。该网站令人困惑。
  • 另外“此版本的应用程序不支持解决方案文件夹”所以我无法正确打开项目,但似乎三个 .cs 文件很重要。将它们复制到我想使用它们的项目中会导致“无法自动检测哪个导入器用于“Interval.cs”。没有处理此文件类型的导入器。指定在您的项目中处理此文件类型的导入器。” .除了将所有文件中的所有代码复制粘贴到我想在其中使用该类的项目之外,还有什么想法吗?
  • @alan2here 我在 VS 2010 中打开解决方案没有任何问题。
  • 我正在使用 Microsoft Visual C# 2010 Express。
  • 也许我需要一个关于检测三个 cs 文件使用哪个导入器的问题。
【解决方案3】:

你可以找到间隔树的另一个c#实现(基于自平衡avl树)@http://code.google.com/p/intervaltree/

【讨论】:

  • 我最喜欢这个,因为它是自平衡的,可以在不重建的情况下处理更新。
【解决方案4】:

对于未来的访问者,我还编写了一个实现https://github.com/vvondra/Interval-Tree

【讨论】:

    【解决方案5】:

    另一个实现可以在https://github.com/erdomke/RangeTree 找到。与其他实现不同,它的目标是尽可能拥有类似于IDictionary<TKey, TValue> 的接口。可以这样使用:

    var tree = new RangeTree<int, string>()
    {
        { 0, 10, "1" },
        { 20, 30, "2" },
        { 15, 17, "3" },
        { 25, 35, "4" },
    };
    
    // Alternatively, use the Add method, for example:
    // tree.Add(0, 10, "1");
    
    var results1 = tree[5]; // 1 item: [0 - 10] "1"
    

    【讨论】:

    • 我非常感谢这个实现的接口,但是如果项目在 Nuget 上会很有帮助。
    • 已经有一个 nuget 了,@AAAton : nuget.org/packages/RangeTree
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多