When examining old papers, I came across a fairly shabby notebook, in which I found sketches of a coating search algorithm. The author of the algorithm, Viktor Anatolyevich Shcherbanov, is my teacher, under whose guidance I worked in the nineties of the last century. My humble participation mainly consisted in the fact that I offered in most cases incorrect (and sometimes just delusional) options. What, in general, did not prevent the Chief (as we called him among themselves) did bring the work on the algorithm to its logical conclusion. Somewhere in the two thousand years, the algorithm was published in one of the institute editions of Tomsk. But I think that it will not be superfluous to remember him again. Actually, in memory of the Chef, I decided to write this post. Maybe the algorithm will seem interesting to someone or push for some new ideas on the implementation of the algorithm.
The algorithm itself is based on two statements and two theorems, the proofs of which are not given here, because of their rather large volume.
To begin with, let's define what we are actually looking for.')
Let be a finite set

and family

its subsets

.
Find subfamily

(if it exists) such that

and the cardinality of the subfamily S * (cover of the set V) is the smallest of all possible.
The following statements define the concepts of minimum and minimum coverage.Statement 1.In order for the subfamily

was a covering of a multitude

, it is necessary and sufficient that the condition be fulfilled

A covering S ′ is called minimal if there is no covering S ″ such that

.
The coverage S * is called the smallest if for any minimal coverage S 'the condition
Statement 2.Coating

minimal if and only if for any

condition is met

And the most basic.Let be a finite set

and family

its subsets

.
Construct a full loaded graph.

in which the set

the vertices of the graph are one-to-one mapped family

subsets

,
and each edge

- subset

.
Denote

the set of all edges incident to the top

, but

- the set of all vertices incident to the edges of the set

.
Theorem 1.Minimum Power Subset

edges incident to arbitrary vertex

in column G, under the conditions

determines the minimum coverage

uniquely corresponding to the set

vertices if

or set

vertices if

.
Theorem 2.Minimum Power Subset

edges incident to arbitrary vertex

ribs

in column G, under the conditions

for all

determines the smallest coverage

uniquely corresponding to the set

vertices if

or set

vertices if

.
Based on the theorems, we propose the following algorithm for finding the smallest coverage.1. Many

and family

its subsets

match family

subsets

. If for some

will turn out

then there is a trivial covering

. The end of the algorithm.
Otherwise, go to step 2.
2. Build a full loaded graph

where

.
Top of

load with set

Edge

load with set

.
3. Check the existence of a coverage: for an arbitrary vertex

define subset

,
Where

- the set of edges incident to the top

in the graph

.
If a

then the cover does not exist. The end of the algorithm.
If a

then the cover exists. Go to the procedure for finding the smallest coverage (p. 4).
4. Put t: = 0.
5. In the full loaded graph

find edge

for which the condition is met

.
If a

then go to step 6,
otherwise, the procedure for constructing the set D of vertices defining the smallest coverage

(paragraph 7).
6. Build a full loaded graph

believing

,

- the set of edges incident to the top

in the graph

.
Put

for all

.
Put t: = t + 1 and go to step 5.
7. Start building a set of D vertices defining the smallest coverage

.
Put

.
8. If t = 0, then go to step 11, otherwise, put t: = t-1.
9. In the column

define subset

10. If in the column

condition is met

then put

otherwise - D: = D. Go to paragraph 8.
11. Family

subsets

determines the smallest coverage of sets

.
The end of the algorithm.
Let's try to estimate the complexity of the algorithm.
The whole, so to speak, essence of the algorithm (from the point of view of complexity estimation) lies in the phrase “we construct a complete loaded graph”.
We need to perform n actions to calculate the load at the n vertices of the graph and (n-1) n / 2 calculations (based on the number of edges of the full graph) for the load of the edges of the graph. And all this, if we consider the worst case, when the subsets do not intersect each other, is performed n-2 times. Thus, the rough estimate is O (n) = n
3 + n
2 .
In conclusion. I'm not sure that the post deserves an invite, because my involvement in the algorithm is more than dubious. But the publication, it seems to me, is worth it. I hope the moderators will understand.
How did the Greeks say? - Faisse que dois adviegne que peut (do what you must, and come what may).
(or were they Romans?)