od JiriD » 17. 1. 2011 21:15
Neodvážím se tady napsat, že tento algoritmus nefunguje a protože mám zkoušku za sebou, napíšu jen to, co bych napsal já.
Řešení problému maximální nezávislé množiny je duální k řešení maximálního vrcholového pokrytí - bylo na cvičení.
Jinými slovy, doplněk minimálního VP jsou právě vrcholy maximální NM.
(dokazuje se to jednoduchými argumenty, jako kdyby doplněk minVP nebyla nezávislá množina, existovala by nepokrytá hrana a kdyby NM nebyla maximální, existoval by ve VP pokrytí vrchol, který můžu odebrat a stále to bude VP - spor s minimalitou)
No a pro strom umíme najít minVP následujícím algoritmem:
Pomocí DFS procházím strom (nejlépe z vrcholu stupně alespoň 2) a dělám následující:
-pokud jsem v listu, neoznačím se
-pokud jsem ve vnitřním vrcholu a mám neoznačeného syna, označím se (nebol-li, pokud backtrackuju z neoznačeného syna, označím se, jinak nic)
Označené vrcholy potom tvoří minVP. Jejich doplněk potom maxNM. A jestli DFS prochází strom nebo les je v podstatě jedno.
Neodvážím se tady napsat, že tento algoritmus nefunguje a protože mám zkoušku za sebou, napíšu jen to, co bych napsal já.
Řešení problému maximální nezávislé množiny je duální k řešení maximálního vrcholového pokrytí - bylo na cvičení.
Jinými slovy, doplněk minimálního VP jsou právě vrcholy maximální NM.
(dokazuje se to jednoduchými argumenty, jako kdyby doplněk minVP nebyla nezávislá množina, existovala by nepokrytá hrana a kdyby NM nebyla maximální, existoval by ve VP pokrytí vrchol, který můžu odebrat a stále to bude VP - spor s minimalitou)
No a pro strom umíme najít minVP následujícím algoritmem:
Pomocí DFS procházím strom (nejlépe z vrcholu stupně alespoň 2) a dělám následující:
-pokud jsem v listu, neoznačím se
-pokud jsem ve vnitřním vrcholu a mám neoznačeného syna, označím se (nebol-li, pokud backtrackuju z neoznačeného syna, označím se, jinak nic)
Označené vrcholy potom tvoří minVP. Jejich doplněk potom maxNM. A jestli DFS prochází strom nebo les je v podstatě jedno.