これはアルゴリズムの問題だと思いますが、C++ でもやりたいと思っています。例を挙げて質問を説明しましょう。
N 個のオブジェクト (プログラミング オブジェクトではない) があり、それぞれ重みが異なるとします。そして、私はそれらを運ぶために2台の車を持っています。車両は、すべてのオブジェクトを 1 つずつ運ぶのに十分な大きさです。これらの 2 つの車両には、独自の走行距離と、タンク内の異なるレベルの燃料があります。また、走行距離は、それが運ぶ重量によって異なります。
目的は、これらの N 個のオブジェクトを可能な限り遠ざけることです。そのため、N 個のオブジェクトを特定の方法で 2 台の車両に分配する必要があります。それらを「同じ」距離にする必要はありませんが、可能な限り遠ざけることに注意してください。たとえば、1 台が 2km でもう 1 台が 7km ではなく、2 台の車両が 5km と 6km を移動するようにします。
各車両にどの重量を搭載するかを決定するための理論的な閉じた形式の計算は考えられません。固定値である N 個のオブジェクトをすべて運ぶ必要があることを思い出してください。
考えられる限り、すべての組み合わせを試す必要があります。
すべての組み合わせを試すための効率的なアルゴリズムについて誰かがアドバイスできますか?
たとえば、次のようになります。
int weights[5] = {1,4,2,7,5}; // can be more values than 5
float vehicelONEMileage(int totalWeight);
float vehicleTWOMileage(int totalWeight);
weights[] と 2 つの関数のすべての組み合わせを効率的に試すにはどうすればよいでしょうか?
線形関数として 2 つの関数を仮定できます。つまり、2 つのマイレージ関数の戻り値は、(異なる) 負の勾配と (異なる) オフセットを持つ線形関数です。
だから私が見つける必要があるのは次のようなものです:
MAX(MIN(vehicleONEMileage(x), vehicleTWOMileage(sum(weights) - x)));
ありがとうございました。