我有两组Animal
对象。动物之间的距离是使用一种特定的算法来定义的,该算法着眼于它们的特征。我正在尝试设计一种方法来从两组(每个一组)中找到最小化距离的对。
我有一个想法:创建一个参数化Tuple
类来配对Animals
. PriorityQueue
使用比较器创建一个以Tuple<Animal>
根据两个成员之间的距离进行排序。然后,从PriorityQueue
.
这是好的设计,还是浪费?我相信它会在 O(m+n) 时间内运行,其中 m 和 n 是每个集合的大小。
如果Tuple
是一个参数化类,那么在其上使用仅适用于的 Comparator 将如何工作Animal
?
我想使用这种findMinimalPair
方法来创建一个生成树,以最小化Animal
对象图的距离。如果我通过不断地从 中弹出对来做到这一点PriorityQueue
,检查以确保每对仍然包含每个集合的一个成员,该怎么办?
这是一个基本的例子。以下是距离:
A0 A1 A2 A3
A0 0 20 33 8
A1 20 0 102 73
A2 33 102 0 6
A3 8 73 6 99
假设集合是:
A0
A1、A2、A3
这是元组的排序顺序,按距离:
(A0, A3) - 8
(A0, A1) - 20
(A0, A2) - 33
所以我们看到 A3 是最接近的。然后将 A3 移动到第一个集合中:
A0, A3
A1, A2
再次,我们检查最小对:
(A3, A2) - 6
(A0, A1) - 20
(A0, A2) - 33
(A3, A1) - 73
现在A2被拿走了。看看它怎么运作?
这就是我最终做的。注释?