【问题标题】:IntervalTree in Guava番石榴中的间隔树
【发布时间】:2013-03-01 03:12:37
【问题描述】:

我正在使用 Guava 的 Range 类来处理间隔。我想知道是否可以通过使用一些番石榴的收集容器找到从一组间隔到给定点/间隔的最近间隔?

我尝试在 Java 中搜索区间树,这就是我找到的。如果可能的话,我更愿意使用 Guava 类之一。

http://picard.sourceforge.net/javadoc/net/sf/picard/util/IntervalTree.html http://tribble.googlecode.com/svn/trunk/src/org/broad/tribble/index/interval/IntervalTree.java

谢谢

【问题讨论】:

  • 你能解释一下一个点的“最近间隔”是什么吗?间隔?我不明白你怎么能有一个点的最近间隔。一个点是否在范围内? “最接近的区间”是包含一个点以及该点与 Range 的端点之间的最小差异的区间吗?
  • 例如,如果我们有以下区间 [1, 10], [15, 20] 那么 [15, 20] 将是最接近点 14 的区间,而 [1, 10] 将是最接近 12 的间隔

标签: java algorithm guava intervals interval-tree


【解决方案1】:

Guava 不提供此功能,尽管您可以通过在给定点之前和之后找到第一个范围来在 RangeSet 之上构建这样的东西。

但一般来说,Guava Ranges 对距离、度量或除了类型的比较顺序之外的任何东西一无所知。他们不知道1015 更接近11

【讨论】:

  • 在给定点之前和之后找到第一个范围应该可以解决问题。我如何在 RangeSet 中完成它?我是在该点周围做一个伪边界并搜索重叠,还是有一些直接的方法?
  • RangeSet.subRangeSet(Range.greaterThan(point)).span().lowerEndpoint() 应该为您提供该点右侧第一个范围的端点。
  • 看了一眼RangeSet,我很好奇为什么C 的边界是原始的Comparable 而不是Comparable<? super C>编辑: 我想我应该问一下Range
  • 啊,刚刚找到关于支持“未通用(JDK1.5 之前)数据类型”的注释 - 明白了。
猜你喜欢
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多