Ответ: Посоветуйте идею алгоритма для многоколоночной верстки
Вот уже работающее решение "неразрешимой в общем случае" задачи.
Чтобы его запустить надо .NET Framework 2.0. Если у кого-то нет, а качать не охота, то вот три частных решения (результата работы демки).
Комментарии:
Сначала программа генерирует случайную последовательность
лотов разной ширины, имитируя реальную ситуацию.
Отбирается столько лотов, сколько сможет войти на страницу
по площади (т.е. без зазоров).
Широкие лоты смещаются по горизонтали, и все лоты разбиваются на
колонки так, чтобы влезло наибольшее число лотов.
Результат вы видите. Программа пишет статус - сколько не влезло,
сколько размещено (чем больше не влезло - тем больше на странице
пустого места). Иногда пишет APPLICATION ERROR, по идее это должно
значить, что комбинации не существует, но на данный момент - это
чаще всего ошибка алгоритма (буду дорабатывать). Впрочем, ошибки
случаются достаточно редко.
По пользованию - нажимаете кнопку "Пуск", и если не было ошибки
можно нажать "Изобразить", программа нарисует найденную комбинацию.
Не смотрите на непроработанный интерфейс - дело не в нем, главное -
логика. То, что в окошке пропадает изображение - нормально, мне просто
даже не хотелось на этом останавливаться. Если нужно - нажмите кнопку
"Изобразить" еще раз.
По цветам: синий - лоты одиночной ширины, розовый + оливковый -
широкие лоты. Розовым обозначена их "родная" колонка, оливковым -
те, что они перекрывают. Цифры - порядковые номера.
В данном виде программа делает полный перебор вариантов, но у нее
много параметров. Можно, например, задать "достаточный" уровень,
т.е. сказать, что если найден вариант, заполняющий 90% площади
страницы, то можно дальше не искать. При большом количестве объявлений
(100 - 200) это может иметь смысл (т.к. время поиска увеличивается
экспоненциально).
Сейчас задано, что "большие" объявления встречаются достаточно часто.
Если сделать, чтобы они встречались реже (я думаю, в реальном журнале
так и будет), то страница будет заполняться лучше. Это тоже параметр.
Также можно задавать количество колонок, высоту страницы, максимальную
ширину объявления и т.д. Скоро сделаю вторую версию этого демо, где
все эти параметры можно будет регулировать из интерфейса.
По поводу пустого места: в этом демо оно просто остается пустым
(для того, чтобы виднее было, сколько его осталось и где),
но в программе верстки "синие" объявления будут растягиваться по
высоте, чтобы заполнить все пространство. Думаю, это естественно.
Если интересно - могу подробнее описать алгоритм. Совсем бесплано
Strizh сказал(а):
1. Я тут помочь пытаюсь, а в ответ
2. Хоть .НЕТ, хоть ЖС, даже трети не сделаешь того, что можно плагином.
Ты ищешь того, кто тебе решит поставленную задачу, просто так?
Так таких думаю не найдешь, читай матчасть, тем более о том, что читать тебе уже сказали.
Не стоит кипятиться. Просто я имел в виду, что в ДАННОМ случае создание плагина просто добавляет мороки. Здесь нет ничего, что нельзя бы было решить "извне".