6

この問題に対する「最適な」解決策があるかどうか疑問に思っています。

私は anxm (ピクセル) サイズのスペースを持っており、その上にさまざまなサイズのオブジェクトが存在します。ここで、q (同じサイズ) の新しいオブジェクトをこのスペースに重ねずに配置したいと考えています。

私が思いついたアルゴリズム:

  1. サイズの配列 A[][] を作成します[(n)/(size_of_object_from_q)]x[(n)/(size_of_object_from_q)]
  2. p からすべての要素を反復し、それぞれについて:

    mark all fields in A[][] as occupied, where the element "lies"

  3. A[][] のフィールドがマークされていない適切な場所に q のすべての要素を配置します

(男の子、私はそれを理解できるといいのですが...)

これを行うより良い方法はありますか?どんな助けでも本当に感謝します!

4

3 に答える 3

1

インターネットで簡単に検索すると、最適な四角形のパッキングはNP 困難な問題のようです。学界の賢い人々がそのための近似アルゴリズムを見つけたと思うので、グーグルのオプションです。

しかし、私は単純な方法を最初に機能させようとします:

  1. 幅に応じてオブジェクトをサイズに分割します
  2. 大きいものから小さいものまで、1 行ずつ配置してみてください。

私の推測では、多くの場合、この素朴な解決策がうまくいくと思います。

于 2009-11-25T20:31:40.567 に答える
1

質問を理解できれば、「最適な」ビン パッキング アルゴリズム (別名ナップザック問題) を探しているように思えます。これは NP-Complete の問題ですが、あなたの説明は、おそらく最適なソリューションへの道を総当たりできるように聞こえます。

于 2009-11-25T20:24:58.850 に答える
0

これがあなたの質問に対する具体的な回答ではないことは承知していますが、 graphvizのソース コードを調べたり掘り下げたりするのに役立つかもしれません。graphviz は、グローバル エネルギー関数を最小化しようとする neato を含む、多数のレイアウト モデルを提供します。

ウィキペディアには、力ベース アルゴリズムの疑似コードがいくつかあります。

于 2009-11-25T20:19:26.093 に答える