この問題は、別の言語でmysqlの外部ではるかによく解決されます。言い換えれば、あなたは座席のマトリックスを持っており、そのうちのいくつかは占有されています(灰色のもの):
指定された寸法のすべての長方形を検索したい 、3x5と言います。これは、2パスの線形O(n)
によって非常に効率的に実行できます。 時間 アルゴリズム(nはシート数):
1)最初のパスで 、列ごとに下から上に移動し、各座席について、これまでに利用可能な連続した座席の数を示します。
次のようになるまで繰り返します:
2)2回目のパスで 、行ごとに移動し、3以上の連続する数字を少なくとも5つ探します。
したがって、最後に、次のようになります。
これにより、解決策が得られます。これらの番号シーケンス(緑色の領域)は、フリーシートの3x5の2つの可能な長方形の上端です。
アルゴリズムは、たとえば次のように簡単に拡張できます。最大面積のすべての長方形を取得します。または、N席の連続した領域(長方形だけでなく)を見つけるために使用することもできます。2回目のパスで、合計が少なくともNになる連続した数列を探します。