オブジェクト [a, b, c, d, ...] の配列と、オブジェクト x と y がどのように「異なる」かを示す数値を与える関数 distance(x, y) とします。
そのサブセット要素間の最小差を最大化する長さ n の配列のサブセットを見つけるアルゴリズムを探しています。
もちろん、要素を削除すると距離が大きく変わる可能性があるため、他の要素との最小の差で配列を並べ替えて、上位 n 個のエントリを取得することはできません。たとえば、a=b の場合、a を削除すると、b と別の要素との最小距離が劇的に変化します。
これまでのところ、私が見つけた唯一の解決策は、最小距離が最小の要素を繰り返し削除し、各繰り返しで距離を再計算して、n 個の要素だけが残るか、またはその逆に新しい要素を繰り返し選択することでした。距離を再計算し、新しいピックを追加するか、距離の最小値に基づいて既存のものを置き換えます。
これらの反復なしで同じ結果を得る方法を知っている人はいますか?
PS: ここに例を示します。マトリックスは各要素間の「距離」を示しています...
あいうえお a - 1 3 2 b 1 - 4 2 c 3 4 - 5 日 2 2 5 -
2 つの要素のみを保持する場合、それは c と d になります。3 のままにしておくと、それは a または b、c および d になります。