私は知識を増やすために少し実験をしていて、それを本当に最適化できると感じる部分に到達しましたが、これを行う方法がよくわかりません。
数字の配列がたくさんあります。(簡単にするために、各配列に1、2、3、および4の4つの数値があるとします)
目標は、すべての番号を昇順(つまり、1-2-3-4)にすることですが、番号はすべて異なる配列でスクランブルされています。
数値が大きいほど、重みが大きくなります。
これらの配列をすべて、ターゲットに近い順に並べ替える必要があります。
つまり、4-3-2-1が最悪のケースになります。
いくつかの例:
3-4-2-1 is better than 4-3-2-1
2-3-4-1 is better than 1-4-3-2 (even though two numbers match (1 and 3).
the biggest number is closer to its spot.)
したがって、大きな数字は常に小さな数字よりも優先されます。これが私の試みです:
var tmp = from m in moves
let mx = m.Max()
let ranking = m.IndexOf(s => s == mx)
orderby ranking descending
select m;
return tmp.ToArray();
上記の例のPSIndexOfは、配列と式を取得し、式を満たす要素のインデックスを返すために作成した拡張機能です。状況は実際にはもう少し複雑なので、これが必要です。私の例で単純化しています。
ただし、ここでの私の試みの問題は、最大数でのみソートされ、他のすべての数を忘れてしまうことです。最初に最大数、次に2番目に大きい数、次に3番目にランク付けする必要があります。
また、この操作は数分間何度も繰り返されるので、可能な限り効率的にする必要があります。