簡略化
まず、問題を単純化して、次のようにします。
- 軸を切り替えて互いに追加すると、x2 の成長が得られます
- 閉区間の放物線であると仮定し
[a, b], where a = 0
、この例ではb = 3
b
(間隔の 2 番目の部分) とw
(セグメントの幅)が与えられたとしましょうn=Floor[b/w]
。この場合、リーマン和を最大化する自明なケースが存在し、i 番目のセグメントの高さを取得する関数は次のとおりf(b-(b*i)/(n+1)))
です。実はこれは仮定であり、100%確実ではありません。
関数実数値 の17
閉区間のセグメントの最大化された例:[0, 3]
Sqrt[x]

この場合のセグメントの高さ関数はRe[Sqrt[3-3*Range[1,17]/18]]
で、値は次のとおりです。
{Sqrt[17/6]、2 Sqrt[2/3]、Sqrt[5/2]、Sqrt[7/3]、Sqrt[13/6]、Sqrt[2]、Sqrt[11/6]、Sqrt [5/3]、平方根[3/2]、2/平方根[3]、平方根[7/6]、1、平方根[5/6]、平方根[2/3]、1/平方根[2]、 1/平方[3]、1/平方[6]}
{1.6832508230603465, 1.632993161855452, 1.5811388300841898, 1.5275252316519468, 1.4719601443879744, 1.4142135623730951, 1.35400640077266, 1.2909944487358056, 1.224744871391589, 1.1547005383792517, 1.0801234497346435, 1, 0.9128709291752769, 0.816496580927726, 0.7071067811865475, 0.5773502691896258, 0.4082482904638631}
あなたがアーカイブしたのは、ビンが部分的に満たされたビンパッキングの問題です。
bを見つける
が不明な場合、または私たちのタスクは、最初のバンチ フィットを形成するすべてのスティックの下でb
可能な限り小さいものを見つけることです。b
次に、少なくともb
値を次のように制限できます。
- 下限 : セグメントの高さの合計 = スティックの高さの合計の場合
- 上限 :
セグメントの数 = スティックの数 最長のスティック < 最長のセグメントの高さ
見つけるための最も簡単な方法の 1 つは、解決策が存在する場合に検索b
でピボットを取ることです。(higher limit-lower limit)/2
次に、それが新しい上限または下限になり、必要な精度が満たされるまでプロセスを繰り返します。
探している場合b
、正確な結果は必要ありませんが、最適ではなく、効率的なアルゴリズムを使用して実際に比較的近いピボットポイントを見つけると、はるかに高速になりますb
。
例えば:
- スティックを長さで並べ替える: 大きいものから小さいものへ
- 最初のビンに「最大のアイテムを入れる」ことを開始します。