Покрытие множества почти последовательными подмножествами: различия между версиями

Перейти к навигации Перейти к поиску
Строка 74: Строка 74:




Этот простой алгоритм перечисления способен создать множество S экспоненциального размера. Поэтому при помощи приведенных выше правил редукции данных после каждого шага итерации выполняется удаление ненужных более частичных решений. С этой целью матрица B ассоциируется с множеством S, где каждая строка соответствует строке матрицы A, а каждый столбец – частичному решению в S: значение ячейки <math>b_{i, j}</math> матрицы B равно 1 в том и только том случае, если j-ое частичное решение B содержит столбец A, покрывающий строку <math>r_i</math>. Алгоритм использует матрицу <math>C := </math>, которая обновляется вместе с S на каждом шаге итерации.  
Этот простой алгоритм перечисления способен создать множество S экспоненциального размера. Поэтому при помощи приведенных выше правил редукции данных после каждого шага итерации выполняется удаление ненужных более частичных решений. С этой целью матрица B ассоциируется с множеством S, где каждая строка соответствует строке матрицы A, а каждый столбец – частичному решению в S: значение ячейки <math>b_{i, j}</math> матрицы B равно 1 в том и только том случае, если j-ое частичное решение B содержит столбец A, покрывающий строку <math>r_i</math>. Алгоритм использует матрицу <math>C :=  
2 Последняя строка C позволяет отличить столбцы, принадлежащие матрице A, от принадлежащих B.
\begin{pmatrix}
A & B \\
0...0 & 1...1
\end{pmatrix}</math>, которая обновляется вместе с S на каждом шаге итерации. ''//Последняя строка C позволяет отличить столбцы, принадлежащие матрице A, от принадлежащих B//''
 
 
Строка 6 вышеприведенного алгоритма заменяется двумя следующими строками:
Строка 6 вышеприведенного алгоритма заменяется двумя следующими строками:


6 Удалить первую строку матрицы C;
  6 Удалить первую строку матрицы C;
7 Выполнить редукцию матрицы C и соответствующим образом изменить S;}
  7 Выполнить редукцию матрицы C и соответствующим образом изменить S;}


По окончании работы алгоритма множество S содержит ровно одно решение, и это решение является оптимальным. Более того, если экземпляр SET COVER хорошо структурирован, то алгоритм имеет полиномиальное время работы:
По окончании работы алгоритма множество S содержит ровно одно решение, и это решение является оптимальным. Более того, если экземпляр SET COVER хорошо структурирован, то алгоритм имеет полиномиальное время работы:




Теорема 2 [7]. Если матрица A обладает сильным свойством C1P, является редуцированной, а ее строки отсортированы в лексикографическом порядке, то время работы алгоритма составляет O(M3n), где M – максимальное число единиц в строке и в столбце.
'''Теорема 2 [7]. Если матрица A обладает сильным свойством C1P, является редуцированной, а ее строки отсортированы в лексикографическом порядке, то время работы алгоритма составляет <math>O(M^{3n})</math>, где M – максимальное число единиц в строке и в столбце.'''


   
   
Теорема 3 [7]. Если расстояние между первой и последней единицами в каждом столбце не превышает k, то в любой момент времени в любой точке алгоритма количество столбцов в матрице B равно O(2kn), а время работы – O(22kkmn2).
'''Теорема 3 [7]. Если расстояние между первой и последней единицами в каждом столбце не превышает k, то в любой момент времени в любой точке алгоритма количество столбцов в матрице B равно <math>O(2^{kn})</math>, а время работы – <math>O(2^{2k}kmn^2)</math>.'''




Руф и Шобель [ ] представляют алгоритм на основе метода ветвей и границ для экземпляров задачи SET COVER, среднее количество блоков последовательных единиц в строке у которых невелико.
Руф и Шобель [8] представляют алгоритм на основе метода ветвей и границ для экземпляров задачи SET COVER, среднее количество блоков последовательных единиц в строке у которых невелико.




4551

правка

Навигация