У меня есть двоичная матрица n * m (0 и 1). Проблема состоит в том, чтобы покрыть все единицы неперекрывающимися блоками, все элементы которых равны 1.

Примере:

1111
0110
0110

Блок может быть представлен с координатами и длиной в каждой координате (x,y,lx,ly). Этот пример покрыт двумя полями { (0,0,1,4), (1,1,2,2) }.

Ищу, как найти укрытие с минимальным количеством ящиков.

Благодарность

5
Ante 16 Мар 2011 в 13:24
Могут ли коробки перекрываться?
 – 
Jeff Foster
16 Мар 2011 в 13:26
@Jeff: Для указанной проблемы вы не получите никакой пользы от перекрытия.
 – 
Shamim Hafiz - MSFT
16 Мар 2011 в 13:31
Вы можете найти это полезным: stackoverflow.com/questions/4701887/…
 – 
biziclop
16 Мар 2011 в 13:33
@ Джефф: без дублирования. Я редактировал текст.
 – 
Ante
16 Мар 2011 в 13:38
@biziclop: это та же проблема. Спасибо.
 – 
Ante
16 Мар 2011 в 13:48

2 ответа

Лучший ответ

Моя проблемная область - вычислительная химия, и здесь мы решаем огромные многомерные задачи. Здесь могут быть применены два общих алгоритма глобальной оптимизации, которые также были успешно применены к системам, содержащим десятки тысяч атомов:

А) генетические алгоритмы
http://en.wikipedia.org/wiki/Genetic_algorithm

Б) имитация отжига
http://www.gnu.org/software/gsl/
ftp://ftp.alumni.caltech.edu/pub/ingber
http://www.taygeta.com/annealing/simanneal.html
http://www2.cs.uni-paderborn.de/ cs / ag-monien / ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / PARSA /
http://www.codeproject.com/KB/recipes/SimulatedAnnealing.aspx

Оба алгоритма имеют хорошо зарекомендовавшие себя реализации, являющиеся общественным достоянием, и хорошо изученные свойства оптимальности.

1
user236520user236520 20 Май 2011 в 10:01