Я не уверен, как он соотносится с алгоритмом, на который указал Э., но однажды я построил оконную систему, и мне нужно было хранить прямоугольные фрагменты изображения вне экрана. Мой метод был такой:
Представьте, что пространство для хранения наклонено на 45 градусов влево, поэтому у вас есть V-образный контейнер.
У него есть одна «точка долины», в самом низу (начало координат)
\ /
\ /
\/
Вставьте в него один блок, чтобы нижний угол блока находился в точке долины.
Теперь, двигаясь слева направо, у вас есть две точки долины, где вы можете сбросить дополнительные блоки.
Каждый раз, когда вы опускаете блок в точку долины, вы пересматриваете список точек долины.
\ /
\/\/
Это тратит впустую пространство, если вы бросаете большой блок в точку долины, сделанную маленькими блоками, поэтому лучше, если это возможно, сначала поместить большие блоки. Когда вы опускаете блок, вы можете выбрать точку долины, которая занимает меньше всего места.
Как я уже сказал, я не знаю, как он сравнивается с другими алгоритмами, но это было просто.