要素のリストがあり、それぞれがタイプで識別されています。同じタイプの要素間の最小距離を最大化するために、リストを並べ替える必要があります。
セットは小さいので(10〜30アイテム)、パフォーマンスはそれほど重要ではありません。
タイプごとのアイテムの数やタイプの数に制限はなく、データはランダムと見なすことができます。
たとえば、次のリストがある場合:
- A5点
- B3点
- Cの2アイテム
- D2点
- E1点
- F1点
次A
のようなものB
を作成したい
C
と思います:、、、、、、、、、、、、、、、、、A
D
F
B
A
E
C
A
D
B
A
- Aには、発生の間に少なくとも2つのアイテムがあります
- Bには、発生の間に少なくとも4つのアイテムがあります
- Cには発生の間に6つのアイテムがあります
- Dは発生の間に6つのアイテムがあります
これを達成するためのアルゴリズムはありますか?
-アップデート-
いくつかのコメントを交換した後、私は二次的な目標の定義に到達しました:
- 主な目標:距離の短いタイプのみを考慮して、同じタイプの要素間の最小距離を最大化します。
- 二次目標:すべてのタイプの要素間の最小距離を最大化します。IE:組み合わせによって、特定のタイプの最小距離が他のタイプを減少させることなく増加する場合は、それを選択します。
-アップデート2-
答えについて。有用な答えはたくさんありましたが、どちらも両方の目標の解決策ではありません。特に、2番目の目標は注意が必要です。
答えについてのいくつかの考え:
- PengOne:具体的な実装を提供するわけではありませんが、良さそうに聞こえます。また、2番目の目標に従って常に最良の結果が得られるとは限りません。
- Evgeny Kluev:主な目標に具体的な実装を提供しますが、副次的な目標によると最良の結果にはつながりません。
- tobias_k:ランダムなアプローチが好きでした。常に最良の結果が得られるとは限りませんが、適切な近似値であり、費用対効果が高くなります。
Evgeny Kluev、バックトラッキング、およびtobias_k式の組み合わせを試しましたが、結果を得るのに時間がかかりすぎました。
最後に、少なくとも私の問題については、tobias_kが最も適切なアルゴリズムであると考えました。その単純さと、タイムリーな結果が得られるからです。おそらく、シミュレーテッドアニーリングを使用して改善できる可能性があります。