length
定義されたand horizontal position
(両方とも定数)を持ついくつかのアイテムがあるとしましょう:
1 : A
2 : B
3 : CC
4 : DDD (item 4 start at position 1, length = 3)
5 : EE
6 : F
それらを垂直にパックしたいので、高さができるだけ小さい長方形になります。
これまで、アイテムをループし、その行に配置できるかどうかを行ごとにチェックする(つまり、他の何かと衝突しないことを意味する)いくつかの非常に単純なアルゴリズムがあります。場合によっては(偶然に)完全に機能することもありますが、最適でないソリューションになることもあります。
上記の例で得られるものは次のとおりです(ステップバイステップ):
A | A B | ACC B | ACC B | ACC B | ACC B |
DDD | DDD | FDDD |
EE | EE |
最適な解決策は次のとおりですが、
ADDDB
FCCEE
length
注:アルゴリズムを適用する前に、最初にアイテムを(降順で)並べ替えると、より良い結果が得られることがわかりました(ただし、それでも完全ではありません)。
合理的な時間内に最適なソリューションを提供するアルゴリズムはありますか? (すべての可能性を試すことは現実的ではありません)
編集:これは、並べ替えのトリックを使用しても機能せず、TylerOhlsenが提案したものを使用しても機能しない例です(彼の答えを理解していない場合を除く):
1 : AA
2 : BBB
3 : CCC
4 : DD
与えるだろう:
AA BBB
CCC
DD
最適解 :
DDBBB
AACCC