私は2セットのAnimal
オブジェクトを持っています。動物間の距離は、その特性を調べる特定のアルゴリズムを使用して定義されます。距離を最小化する 2 つのセット (それぞれから 1 つ) からペアを見つける方法を設計しようとしています。
私が持っていたアイデアの 1 つは、パラメーター化Tuple
されたクラスを作成してペアを組むことAnimals
です。2 つのメンバー間の距離に従ってPriorityQueue
並べ替えるには、コンパレータを使用して を作成します。Tuple<Animal>
次に、 から最初のペアを選択しPriorityQueue
ます。
これは良いデザインですか、それとも無駄ですか?m と n が各コレクションのサイズである場合、O(m+n) 時間で実行されると思います。
パラメータ化されたクラスの場合Tuple
、でのみ機能する Comparator を使用するとどのように機能しAnimal
ますか?
findMinimalPair
この方法を使用して、オブジェクトのグラフの距離を最小化するスパニング ツリーを作成したいと考えていAnimal
ます。からペアを継続的にポップしPriorityQueue
、各ペアに各コレクションのメンバーが 1 つずつ含まれていることを確認して、これを行ったらどうなるでしょうか。
これが基本的な例です。距離は次のとおりです。
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が取られています。それがどのように機能するか見てください。
これが私がやったことです。コメント?