あなたが説明することはツリーマップのように聞こえます:
ツリーマップは、ネストされた四角形のセットとして階層 (ツリー構造) データを表示します。ツリーの各ブランチには四角形が与えられ、サブブランチを表す小さな四角形でタイル張りされます。リーフ ノードの四角形には、データの指定された次元に比例する面積があります。
そのウィキペディアのページはBen Shneiderman によるページにリンクしており、Java 実装への素晴らしい概要とリンクを示しています。
で、教職員ラウンジであれこれと頭を悩ませているうちに、アハハ!レベルを下に移動するときに、画面を水平方向と垂直方向に交互に長方形に分割する経験。この再帰アルゴリズムは魅力的に思えましたが、常に機能することを確信し、6 行のアルゴリズムを作成するのに数日かかりました。
ウィキペディアから、Mark Bruls、Kees Huizing、および Jarke J. van Wijk による「Squarified Treemaps」 (PDF) にも、1 つの可能なアルゴリズムが示されています。
縦横比 (たとえば、最大 (高さ/幅、幅/高さ)) ができるだけ 1 に近づくように、長方形を再帰的に長方形に分割するにはどうすればよいでしょうか? 可能なテッセレーションの数は非常に多くなります。この問題は、NP 困難な問題のカテゴリに分類されます。ただし、このアプリケーションでは最適解は必要ありません。短時間で計算できる優れた解が必要です。
質問では再帰について言及していないため、状況はツリーマップの 1 つのレベルにすぎない可能性があります。しかし、アルゴリズムは一度に 1 つのレベルで動作するため、これは問題になりません。