Предположим, вам дан ненаправленный граф G
с n
вершинами и m
ребрами, представленными n x n
матрицей смежности A
, и вам также дано подмножество вершин S
(представлен массивом размером m
). Как вы можете проверить, является ли S
покрытием вершин G
с квадратичной сложностью времени и пространства?
По определению покрытия вершин я знаю, что мы требуем, чтобы каждое ребро было инцидентным к вершине, содержащейся в S
.
Я легко могу придумать алгоритм cubi c: перебрать матрицу смежности; каждый 1
представляет ребро (u, v)
. Проверьте, есть ли u
или v
в S
. Если нет, ответ - нет. Если мы дойдем до конца матрицы смежности, ответ - да.
Но как я могу сделать это в O(n^2)
времени? Я предполагаю, что единственное реальное «наблюдение», которое я сделал до сих пор, - это то, что мы можем пропустить промежуточные строки, перебирая матрицу смежности, если мы уже нашли вершину, соответствующую этой строке, в S
. Однако это мне не очень помогло.
Может кто-нибудь помочь мне (или указать мне правильное направление)?
Спасибо