4551
правка
Irina (обсуждение | вклад) м (→Алгоритмы) |
Irina (обсуждение | вклад) |
||
Строка 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 := | ||
\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( | '''Теорема 2 [7]. Если матрица A обладает сильным свойством C1P, является редуцированной, а ее строки отсортированы в лексикографическом порядке, то время работы алгоритма составляет <math>O(M^{3n})</math>, где M – максимальное число единиц в строке и в столбце.''' | ||
Теорема 3 [7]. Если расстояние между первой и последней единицами в каждом столбце не превышает k, то в любой момент времени в любой точке алгоритма количество столбцов в матрице B равно O( | '''Теорема 3 [7]. Если расстояние между первой и последней единицами в каждом столбце не превышает k, то в любой момент времени в любой точке алгоритма количество столбцов в матрице B равно <math>O(2^{kn})</math>, а время работы – <math>O(2^{2k}kmn^2)</math>.''' | ||
Руф и Шобель [ ] представляют алгоритм на основе метода ветвей и границ для экземпляров задачи SET COVER, среднее количество блоков последовательных единиц в строке у которых невелико. | Руф и Шобель [8] представляют алгоритм на основе метода ветвей и границ для экземпляров задачи SET COVER, среднее количество блоков последовательных единиц в строке у которых невелико. | ||
правка