小さな矩形(1cm x 2xm、2cmx3cm、4cm x 6cmなど)の寸法が異なります。異なるタイプの四角形の数は、場合によって異なる場合があります。異なる長方形の各タイプは、異なる数のカウントを有することができる。最小面積計算アルゴリズム(エッジのみのタイル配置)
これらの小さな矩形がすべての辺にしか配置されない小さな矩形で、大きな矩形を作成する必要があります。 回転なし。最終的な外側矩形は理想的には四角形に似ていなければなりません。 X〜Y。すべてのエッジを塗りつぶす必要はありません。小さな矩形の間には隙間ができる。画像例:
http://i.stack.imgur.com/GqI5z.png
私は、形成可能な最小限の領域を見つけるコードを書こうとしています。
可能な最小限の領域を見つけるためにすべての配置をループするアルゴリズムがあります。しかし、これは、異なるタイプの矩形の数と矩形の数が増えるにつれ、実行時間が長くなります。すなわち2種類の矩形は、それぞれ100 +矩形を有する。 8 forループ。それは〜100^8回の反復になります
可能な限り最小限の領域を計算するための、より高速なアルゴリズムに関するアイデアはありますか?コードはPythonで書かれていますが、どんなアルゴリズムのコンセプトでも問題ありません。
for rectange_1_top_count in (range(0,all_rectangles[1]["count"]+1)):
for rectange_1_bottom_count in range(0,all_rectangles[1]["count"]-rectange_1_top_count+1):
for rectange_1_left_count in (range(0,all_rectangles[1]["count"]-rectange_1_top_count-rectange_1_bottom_count+1)):
for rectange_1_right_count in ([all_rectangles[1]["count"]-rectange_1_top_count-rectange_1_bottom_count-rectange_1_left_count]):
for rectange_2_top_count in (range(0,all_rectangles[2]["count"]+1)):
for rectange_2_bottom_count in (range(0,all_rectangles[2]["count"]-rectange_2_top_count+1)):
for rectange_2_left_count in (range(0,all_rectangles[2]["count"]-rectange_2_bottom_count-rectange_2_top_count+1)):
for rectange_2_right_count in [(all_rectangles[2]["count"]-rectange_2_bottom_count-rectange_2_left_count-rectange_2_top_count)]:
area=calculate_minimum_area()
if area< minimum_area:
minimum_area=area
外側の矩形のサイズが与えられているので、真ん中の白い部分を最小にしたいですか? –
矩形を硬くする条件は、辺/辺にのみ配置できます。積み重ねることはできません –
外側の矩形のサイズは指定されていません。小さな四角形のディミッションだけが与えられます。配置が変わると、外側の矩形の寸法が変化します。しかし、私は最小の外側矩形領域を与えるエッジ上に最適な小さな矩形配置をしたい。 –