私は長方形のパッキングアルゴリズムを実装しようとしています。Javaの長方形のパック
は、私はそれぞれの矩形がheigthと幅持って私の入力にいくつかのrectangesを持っている(とインデックス番号を、ので、私はそれらをログインしたとき、私はそれらを識別することができるようになります)私が行列を持って
(整数[ ] [])、私はこの行列に私の四角形を保存したい。初期化後、マトリックスは変更できないので、固定サイズになります。
我々は2つの長方形持っている場合は、のを見てと例みましょう:
new Rectangle(2,3,1) //height=2, width=3, index=1
new Rectangle(1,2,2) //height=1, width=1, index=2
をそして3×3行列持ってみましょう:私はアルゴリズムを実行して終わりだ後
Integer[][] matrix = new Integer[4][3]; //height=4, width=3
を、私はしたいと思います次のようなものを参照してください(マトリックスをsystem.outに印刷する場合):
1 1 1
1 1 1
2 2 0
0 0 0
最初の2行は、 ctangle(高さは2、幅は3)、3行目に2番目の矩形があります。 0は空白が残っていることを意味します(他にもいくつかの長方形を格納することができます)
欲張りな(または任意の)アルゴリズムのために良い方法を見つけるのは難しいです。
長方形を最大から最小まで並べ替えます。 次に、私は矩形を保存する必要があります:マトリックスに十分なスペースがあれば、それをそこに置きます。そうでなければ、別のセルを試します。私たちは場所を見つけるまで、すべての行とすべてのセルで続けます。
誰でも正しい方向に向けることができますか?良いアルゴリズム、擬似コード、または私の方法を理解するために使用できるものについての説明。
おかげで、 マーク
これは2dナップザックの問題です。 https://www.coursera.org/learn/discrete-optimizationそのコースは参考になるかもしれません。この本のように:http://www.algorist。com/ – TurnipEntropy
もし私たちが "持っていて"、 "もしあなたが私"であれば、どのようにしてもそれをどのようにも得られないでしょう。そして、3x3の行列int [4] [3]を持たせましょう。アップ!! – gpasch