【问题标题】:constructing a minimum spanning tree using java's TreeMap使用 java 的 TreeMap 构造最小生成树
【发布时间】:2011-11-07 20:02:15
【问题描述】:

我正在开展一个项目,该项目需要我跟踪二维平面上的多个点。我需要添加允许某些点检测其他点接近度的功能。我立刻想到了最近对问题,并认为也许我应该构造一个最小生成树。

第一个问题是,这些点不断更新它们的坐标,我想知道这样做是否合理。

另一个问题是,我不能为此使用 3rd 方库,所以没有 jgraph 或 jung。我想知道是否有一种方法可以仅使用我提供的库来构建最小跨度。可以使用 TreeMap 还是必须从头开始?

【问题讨论】:

  • What have you tried? 哪些库“给了你”?这是作业吗?
  • jdk 6 附带的任何库。这是一个家庭作业项目,是的,但我不要求编码答案。这只是一个想法,我必须完成项目的一小部分,并想知道我是否走在正确的轨道上。
  • “检测其他点的接近度”是什么意思?您是否尝试执行返回点接近另一个点(例如最近邻)的查询?
  • 'TreeMap` 在 Java 中与 Tree 算法本身没有任何关系,它是 Map 接口的实现,恰好使用了 Tree 结构存储。

标签: java graph tree


【解决方案1】:

听起来您正在尝试进行 最近邻 查询。那是您尝试找到最接近另一个点的点(或多个点)的地方。对于一个简单的解决方案,您可以只存储一个点列表并使用距离公式遍历它们以确定哪些点最接近。但是,如果您想更快地进行查询,您将需要使用支持此类查询的空间数据结构。我会建议一个KD树。 Java 的标准库中没有 KD Tree 实现,因此您需要自己实现。

TreeMap 只是Map 接口的一个实现,它允许您通过键来放置和检索值。如果你想写一些东西来生成最小生成树,你需要自己做。

【讨论】:

  • 非常感谢,我现在正在调查。
【解决方案2】:

在非常面向对象的方法中,Point 对象使用Observer Pattern 并将自己注册为所有其他点的观察者,然后随着点位置的变化,他们可以更新他们改变的所有观察者。您可以控制更改发生频率的阈值或在将通知发送到观察者之前需要更改多少。这会很好用,因为您说“某些”点需要跟踪接近度而不是全部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2011-12-30
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多