Algoritmuselmélet
Gráfok megadása, szélességi bejárás, összefügg ˝oség, párosítás
Katona Gyula Y.
Számítástudományi és Információelméleti Tanszék Budapesti M ˝uszaki és Gazdaságtudományi Egyetem
2. el ˝oadás
Gráfalgoritmusok
irányított gráfok: G= (V,E)
irányított él, irányított út, irányított kör élsúlyok: c(e)— lehetnek negatívak is
J H
G E
K D
F
I C
B
A L
3
4
8
4 9 6
9 0
17 8 9
3
6
2
7 3
8 6
11
5
Gráfalgoritmusok
irányított gráfok: G= (V,E)
irányított él, irányított út, irányított kör
élsúlyok: c(e)— lehetnek negatívak is
J H
G E
K D
F
I C
B
A L
3
4
8
4 9 6
9 0
17 8 9
3
6
2
7 3
8 6
11
5
Gráfalgoritmusok
irányított gráfok: G= (V,E)
irányított él, irányított út, irányított kör élsúlyok: c(e)— lehetnek negatívak is
J H
G E
K D
F
I C
B
A L
3
4
8
4 9 6
9 0
17 8 9
3
6
2
7 3
8 6
11
5
Gráfalgoritmusok
irányított gráfok: G= (V,E)
irányított él, irányított út, irányított kör élsúlyok: c(e)— lehetnek negatívak is
J H
G D E
F C
B
A L
3
4
8
4 9 6
9 0
17 8 9
3
6
2
7 3
8 6 5
Adjacencia-mátrix
Definíció
A G= (V,E)gráfadjacencia-mátrixa(vagyszomszédossági mátrixa) a következ ˝o – a V elemeivel indexelt – n-szer n-es mátrix:
A[i,j] =
0 ha(i,j)6∈E, 1 ha(i,j)∈E.
Irányítatlan gráfok esetén a szomszédossági mátrix szimmetrikus lesz (azazA[i,j] =A[j,i]teljesül mindeni,jcsúcspárra).
v4
5
1 1
1
−1 v3 3
v1 v5
5 v2
A=
0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0
Adjacencia-mátrix
Definíció
A G= (V,E)gráfadjacencia-mátrixa(vagyszomszédossági mátrixa) a következ ˝o – a V elemeivel indexelt – n-szer n-es mátrix:
A[i,j] =
0 ha(i,j)6∈E, 1 ha(i,j)∈E.
Irányítatlan gráfok esetén a szomszédossági mátrix szimmetrikus lesz (azazA[i,j] =A[j,i]teljesül mindeni,jcsúcspárra).
v4
5
1 1
1
−1 v3 3
v1 v5
5 v2
A=
0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0
Adjacencia-mátrix
Definíció
A G= (V,E)gráfadjacencia-mátrixa(vagyszomszédossági mátrixa) a következ ˝o – a V elemeivel indexelt – n-szer n-es mátrix:
A[i,j] =
0 ha(i,j)6∈E, 1 ha(i,j)∈E.
Irányítatlan gráfok esetén a szomszédossági mátrix szimmetrikus lesz (azazA[i,j] =A[j,i]teljesül mindeni,jcsúcspárra).
5
1 1
1
−1 v3 3
v1 v5
5 v2
A=
0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0
Súlyozott adjacencia-mátrix
Ha költségek is vannak =⇒
C[i,j] =
0 hai=j,
c(i,j) hai6=j és(i,j)éleG-nek,
∗ különben.
v4
5
1 1
1
−1 v3 3
v1 v5
5 v2
C=
0 5 ∗ 1 ∗
∗ 0 ∗ ∗ −1
∗ 1 0 ∗ ∗
∗ ∗ 1 0 5
∗ ∗ 3 ∗ 0
Hátránya: a mérete (n2tömbelem) teljesen független az élek számától.
Súlyozott adjacencia-mátrix
Ha költségek is vannak =⇒
C[i,j] =
0 hai=j,
c(i,j) hai6=j és(i,j)éleG-nek,
∗ különben.
v4
5
1 1
1
−1 v3 3
v1 v5
5 v2
C=
0 5 ∗ 1 ∗
∗ 0 ∗ ∗ −1
∗ 1 0 ∗ ∗
∗ ∗ 1 0 5
∗ ∗ 3 ∗ 0
Hátránya: a mérete (n2tömbelem) teljesen független az élek számától.
Súlyozott adjacencia-mátrix
Ha költségek is vannak =⇒
C[i,j] =
0 hai=j,
c(i,j) hai6=j és(i,j)éleG-nek,
∗ különben.
v 5
1 1
1
−1 v3 3
v1 v5
5 v2
C=
0 5 ∗ 1 ∗
∗ 0 ∗ ∗ −1
∗ 1 0 ∗ ∗
∗ ∗ 1 0 5
∗ ∗ 3 ∗ 0
Éllistás megadás
G= (V,E)gráf minden csúcsához egy lista tartozik.
Azi ∈V csúcs listájában tároljuk azi-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Azi listáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
q q q q
- - ? - 1
i
n - q q q
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella -
?
Az (i,j) élnek megfe- lel ˝o cella tartalmazza a j sorszámot, a c(i,j) súlyt (ha van), egy mu- tatót a következ ˝o cel- lára, és esetleg még egyet az el ˝oz ˝ore is. Tárigény: n +e cella, Irányítatlan gráfoknál: n+2ecella
Éllistás megadás
G= (V,E)gráf minden csúcsához egy lista tartozik.
Azi∈V csúcs listájában tároljuk azi-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Azi listáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
q q q q
- - ? - 1
i
n - q q q
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella -
?
Az (i,j) élnek megfe- lel ˝o cella tartalmazza a j sorszámot, a c(i,j) súlyt (ha van), egy mu- tatót a következ ˝o cel- lára, és esetleg még egyet az el ˝oz ˝ore is. Tárigény: n +e cella, Irányítatlan gráfoknál: n+2ecella
Éllistás megadás
G= (V,E)gráf minden csúcsához egy lista tartozik.
Azi∈V csúcs listájában tároljuk azi-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Azilistáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
q q q q
- - ? - 1
i
n - q q q
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella -
?
Az (i,j) élnek megfe- lel ˝o cella tartalmazza a j sorszámot, a c(i,j) súlyt (ha van), egy mu- tatót a következ ˝o cel- lára, és esetleg még egyet az el ˝oz ˝ore is. Tárigény: n +e cella, Irányítatlan gráfoknál: n+2ecella
Éllistás megadás
G= (V,E)gráf minden csúcsához egy lista tartozik.
Azi∈V csúcs listájában tároljuk azi-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Azilistáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
q q q q
- - ? - 1
i
n - q q q
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella -
?
Az (i,j) élnek megfe- lel ˝o cella tartalmazza a j sorszámot, a c(i,j) súlyt (ha van), egy mu- tatót a következ ˝o cel- lára, és esetleg még egyet az el ˝oz ˝ore is. Tárigény: n +e cella, Irányítatlan gráfoknál: n+2ecella
Éllistás megadás
G= (V,E)gráf minden csúcsához egy lista tartozik.
Azi∈V csúcs listájában tároljuk azi-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Azilistáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
q q q q
- - ? - 1
i
n - q q q
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella -
?
Az (i,j) élnek megfe- lel ˝o cella tartalmazza a j sorszámot, a c(i,j) súlyt (ha van), egy mu- tatót a következ ˝o cel- lára, és esetleg még egyet az el ˝oz ˝ore is.
Tárigény: n +e cella, Irányítatlan gráfoknál: n+2ecella
Éllistás megadás
G= (V,E)gráf minden csúcsához egy lista tartozik.
Azi∈V csúcs listájában tároljuk azi-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Azilistáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
q q q q
- - ? - 1
i
n - q q q
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella -
?
Az (i,j) élnek megfe- lel ˝o cella tartalmazza a j sorszámot, a c(i,j) súlyt (ha van), egy mu- tatót a következ ˝o cel- lára, és esetleg még egyet az el ˝oz ˝ore is.
Tárigény: n +e cella, Irányítatlan gráfoknál:
Szélességi bejárás
BFS:Breadth First Search
Meglátogatjuk az els ˝o csúcsot, majd ennek a csúcsnak az összes szomszédját. Aztán ezen szomszédok összes olyan szomszédját, ahol még nem jártunk, és így tovább.
megvalósítás:sor(FIFO-lista)
Berakjuk az épp meglátogatott csúcsot, hogy majd a megfelel ˝o id ˝oben a szomszédaira is sort keríthessünk.
Általános lépés: vesszük a sor elején lev ˝ox csúcsot, töröljük a sorból, meglátogatjuk azokat azy szomszédait, amelyeket eddig még nem láttunk, majd ezeket azy csúcsokat a sor végére tesszük.
Szélességi bejárás
BFS:Breadth First Search
Meglátogatjuk az els ˝o csúcsot, majd ennek a csúcsnak az összes szomszédját.
Aztán ezen szomszédok összes olyan szomszédját, ahol még nem jártunk, és így tovább.
megvalósítás:sor(FIFO-lista)
Berakjuk az épp meglátogatott csúcsot, hogy majd a megfelel ˝o id ˝oben a szomszédaira is sort keríthessünk.
Általános lépés: vesszük a sor elején lev ˝ox csúcsot, töröljük a sorból, meglátogatjuk azokat azy szomszédait, amelyeket eddig még nem láttunk, majd ezeket azy csúcsokat a sor végére tesszük.
Szélességi bejárás
BFS:Breadth First Search
Meglátogatjuk az els ˝o csúcsot, majd ennek a csúcsnak az összes szomszédját. Aztán ezen szomszédok összes olyan szomszédját, ahol még nem jártunk, és így tovább.
megvalósítás:sor(FIFO-lista)
Berakjuk az épp meglátogatott csúcsot, hogy majd a megfelel ˝o id ˝oben a szomszédaira is sort keríthessünk.
Általános lépés: vesszük a sor elején lev ˝ox csúcsot, töröljük a sorból, meglátogatjuk azokat azy szomszédait, amelyeket eddig még nem láttunk, majd ezeket azy csúcsokat a sor végére tesszük.
Szélességi bejárás
BFS:Breadth First Search
Meglátogatjuk az els ˝o csúcsot, majd ennek a csúcsnak az összes szomszédját. Aztán ezen szomszédok összes olyan szomszédját, ahol még nem jártunk, és így tovább.
megvalósítás:sor(FIFO-lista)
Berakjuk az épp meglátogatott csúcsot, hogy majd a megfelel ˝o id ˝oben a szomszédaira is sort keríthessünk.
Általános lépés: vesszük a sor elején lev ˝ox csúcsot, töröljük a sorból, meglátogatjuk azokat azy szomszédait, amelyeket eddig még nem láttunk, majd ezeket azy csúcsokat a sor végére tesszük.
Szélességi bejárás
BFS:Breadth First Search
Meglátogatjuk az els ˝o csúcsot, majd ennek a csúcsnak az összes szomszédját. Aztán ezen szomszédok összes olyan szomszédját, ahol még nem jártunk, és így tovább.
megvalósítás:sor(FIFO-lista)
Berakjuk az épp meglátogatott csúcsot, hogy majd a megfelel ˝o id ˝oben a szomszédaira is sort keríthessünk.
Általános lépés: vesszük a sor elején lev ˝ox csúcsot, töröljük a sorból, meglátogatjuk azokat azy szomszédait, amelyeket eddig még nem láttunk, majd ezeket azy csúcsokat a sor végére tesszük.
Szélességi bejárás
BFS:Breadth First Search
Meglátogatjuk az els ˝o csúcsot, majd ennek a csúcsnak az összes szomszédját. Aztán ezen szomszédok összes olyan szomszédját, ahol még nem jártunk, és így tovább.
megvalósítás:sor(FIFO-lista)
Berakjuk az épp meglátogatott csúcsot, hogy majd a megfelel ˝o id ˝oben a szomszédaira is sort keríthessünk.
Általános lépés: vesszük a sor elején lev ˝ox csúcsot, töröljük a sorból, meglátogatjuk azokat azy szomszédait, amelyeket eddig még nem láttunk, majd ezeket azy csúcsokat a sor végére tesszük.
Szélességi bejárás
procedureszb (v: csúcs)(∗szélességi bejárás egy komponensre∗) var
Q: csúcsokból álló sor;
x,y: csúcsok;
begin
bejárva[v] :=igaz;
sorba(v,Q);
whileQnem üresdo begin
x :=els ˝o(Q);(ez egyben törli isx-et a sorból) formindenx →y ∈E élredo
ifbejárva[y] =hamisthen begin bejárva[y] :=igaz;
(∗) sorba(y,Q)
end end
end
Szélességi bejárás
procedurebejár(∗szélességi bejárás minden komponensre∗) begin
forv :=1tondo bejárva[v] :=hamis;
forv :=1tondo
ifbejárva[v] =hamisthen szb(v)
end
Összköltség:O(n+e)
Szélességi bejárás
procedurebejár(∗szélességi bejárás minden komponensre∗) begin
forv :=1tondo bejárva[v] :=hamis;
forv :=1tondo
ifbejárva[v] =hamisthen szb(v)
end
Összköltség:O(n+e)
Szélességi bejárás
procedurebejár(∗szélességi bejárás minden komponensre∗) begin
forv :=1tondo bejárva[v] :=hamis;
forv :=1tondo
ifbejárva[v] =hamisthen szb(v)
end
Összköltség:O(n+e)
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
9 10 8
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el
ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
9 10 8
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs
vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
9 10 8
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el
kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
9 10 8
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el
kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
9 10 8
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
9 10 8
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
9 10 8
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
5 2
ilyen nincs ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
5
2 ilyen nincs
ilyen nincs
kereszt´el kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
5
2 ilyen nincs
ilyen nincs kereszt´el
kereszt´el
Faél: megvizsgálásuk- kor még be nem járt pontba mutatnak
2
1
4
7 3
6 9 10
8 5
fa´el ilyen nincs vissza´el kereszt´el kereszt´el
Irányítatlan esetben csak faél és keresztél lehet.
fa´el 1
4 3
7 6
5
2 ilyen nincs
ilyen nincs kereszt´el kereszt´el
Összefügg ˝oség eldöntése
Kérdés
Adott G gráf összefügg ˝o-e?
procedureÖsszefügg ˝o begin
öf:=igaz;
tetsz ˝olegesv-reszb(v); foru:=1tondo
ifbejárva[u] =hamisthenöf:=hamis; return(öf);
end
Összköltség: O(n+e)
Összefügg ˝oség eldöntése
Kérdés
Adott G gráf összefügg ˝o-e?
procedureÖsszefügg ˝o begin
öf:=igaz;
tetsz ˝olegesv-reszb(v);
foru:=1tondo
ifbejárva[u] =hamisthenöf:=hamis;
return(öf);
end
Összköltség: O(n+e)
Összefügg ˝oség eldöntése
Kérdés
Adott G gráf összefügg ˝o-e?
procedureÖsszefügg ˝o begin
öf:=igaz;
tetsz ˝olegesv-reszb(v);
foru:=1tondo
ifbejárva[u] =hamisthenöf:=hamis;
return(öf);
end
Összköltség: O(n+e)
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút? Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk. Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút? Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk. Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút?
Hogyan keresünk javítóutat? Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk. Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút?
Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk. Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút?
Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk. Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút?
Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk. Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút?
Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk.
Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút?
Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk.
Minden páros szinten a párosítás éleit használjuk.
Ha olyan pontba érünk, aminek nincs párja, találtunk javítóutat
Maximális párosítás keresése páros gráfban
BSZ-b ˝ol tudjuk, hogy javító utakat kell keresnünk.
Tétel
Egy párosítás akkor és csak akkor maximális, ha nincs hozzá tartozó javítóút.
Kérdés
Hogyan döntjük el, hogy van-e javítóút?
Hogyan keresünk javítóutat?
Módosítjuk a szélességi keresést:
Egy párosítatlan pontból indulunk
Minden páratlan szinten a BFS lépéseit használjuk.
Minden páros szinten a párosítás éleit használjuk.
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell ismételni
Összköltség: O(ne)
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell ismételni
Összköltség: O(ne)
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell ismételni
Összköltség: O(ne)
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell ismételni
Összköltség: O(ne)
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell ismételni
Összköltség: O(ne)
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell ismételni
Összköltség: O(ne)
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o
=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell ismételni
Összköltség: O(ne)
Maximális párosítás keresése páros gráfban
Költség:
Ha minden párosítatlan pontból építünk egy ilyen fát
=⇒alternáló erd ˝o=⇒O(e)
Ezután eggyel növelhetjük a párok számát =⇒O(n)-szer kell
Legrövidebb utak súlyozatlan gráfokban
Ha minden él hossza egy =⇒út hossza = élek száma
Szélességi kereséssel: JelentseD[v]av csúcsnak azs-t ˝ol való távolságát azs-gyöker ˝u szélességi fában.
Legyen kezdetbenD[s] :=0
azszbeljárásba tegyük be aD[y] :=D[x] +1;utasítást, miután elértük y-t.
Lépésszám: O(n+e) Tétel
Az el ˝oz ˝oek szerint módosított szélességi bejárás végeztével teljesülnek a következ ˝ok:
1. Legyen s =x1,x2, . . . ,xna csúcsoknak a szélességi bejárás szerinti sorrendje. Ekkor D[x1]≤D[x2]≤. . .≤D[xn].
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1. 3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Legrövidebb utak súlyozatlan gráfokban
Ha minden él hossza egy =⇒út hossza = élek száma
Szélességi kereséssel: JelentseD[v]av csúcsnak azs-t ˝ol való távolságát azs-gyöker ˝u szélességi fában.
Legyen kezdetbenD[s] :=0
azszbeljárásba tegyük be aD[y] :=D[x] +1;utasítást, miután elértük y-t.
Lépésszám: O(n+e) Tétel
Az el ˝oz ˝oek szerint módosított szélességi bejárás végeztével teljesülnek a következ ˝ok:
1. Legyen s =x1,x2, . . . ,xna csúcsoknak a szélességi bejárás szerinti sorrendje. Ekkor D[x1]≤D[x2]≤. . .≤D[xn].
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1. 3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Legrövidebb utak súlyozatlan gráfokban
Ha minden él hossza egy =⇒út hossza = élek száma
Szélességi kereséssel: JelentseD[v]av csúcsnak azs-t ˝ol való távolságát azs-gyöker ˝u szélességi fában.
Legyen kezdetbenD[s] :=0
azszbeljárásba tegyük be aD[y] :=D[x] +1;utasítást, miután elértük y-t.
Lépésszám: O(n+e) Tétel
Az el ˝oz ˝oek szerint módosított szélességi bejárás végeztével teljesülnek a következ ˝ok:
1. Legyen s =x1,x2, . . . ,xna csúcsoknak a szélességi bejárás szerinti sorrendje. Ekkor D[x1]≤D[x2]≤. . .≤D[xn].
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1. 3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Legrövidebb utak súlyozatlan gráfokban
Ha minden él hossza egy =⇒út hossza = élek száma
Szélességi kereséssel: JelentseD[v]av csúcsnak azs-t ˝ol való távolságát azs-gyöker ˝u szélességi fában.
Legyen kezdetbenD[s] :=0
azszbeljárásba tegyük be aD[y] :=D[x] +1;utasítást, miután elértük y-t.
Lépésszám: O(n+e) Tétel
Az el ˝oz ˝oek szerint módosított szélességi bejárás végeztével teljesülnek a következ ˝ok:
1. Legyen s =x1,x2, . . . ,xna csúcsoknak a szélességi bejárás szerinti sorrendje. Ekkor D[x1]≤D[x2]≤. . .≤D[xn].
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1. 3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Legrövidebb utak súlyozatlan gráfokban
Ha minden él hossza egy =⇒út hossza = élek száma
Szélességi kereséssel: JelentseD[v]av csúcsnak azs-t ˝ol való távolságát azs-gyöker ˝u szélességi fában.
Legyen kezdetbenD[s] :=0
azszbeljárásba tegyük be aD[y] :=D[x] +1;utasítást, miután elértük y-t.
Lépésszám: O(n+e) Tétel
Az el ˝oz ˝oek szerint módosított szélességi bejárás végeztével teljesülnek a következ ˝ok:
1. Legyen s =x1,x2, . . . ,xna csúcsoknak a szélességi bejárás szerinti sorrendje. Ekkor D[x1]≤D[x2]≤. . .≤D[xn].
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1. 3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Legrövidebb utak súlyozatlan gráfokban
Ha minden él hossza egy =⇒út hossza = élek száma
Szélességi kereséssel: JelentseD[v]av csúcsnak azs-t ˝ol való távolságát azs-gyöker ˝u szélességi fában.
Legyen kezdetbenD[s] :=0
azszbeljárásba tegyük be aD[y] :=D[x] +1;utasítást, miután elértük y-t.
Lépésszám: O(n+e) Tétel
Az el ˝oz ˝oek szerint módosított szélességi bejárás végeztével teljesülnek a következ ˝ok:
1. Legyen s =x1,x2, . . . ,xna csúcsoknak a szélességi bejárás szerinti sorrendje. Ekkor D[x1]≤D[x2]≤. . .≤D[xn].
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1.
3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Legrövidebb utak súlyozatlan gráfokban
Ha minden él hossza egy =⇒út hossza = élek száma
Szélességi kereséssel: JelentseD[v]av csúcsnak azs-t ˝ol való távolságát azs-gyöker ˝u szélességi fában.
Legyen kezdetbenD[s] :=0
azszbeljárásba tegyük be aD[y] :=D[x] +1;utasítást, miután elértük y-t.
Lépésszám: O(n+e) Tétel
Az el ˝oz ˝oek szerint módosított szélességi bejárás végeztével teljesülnek a következ ˝ok:
1. Legyen s =x1,x2, . . . ,xna csúcsoknak a szélességi bejárás szerinti sorrendje. Ekkor D[x1]≤D[x2]≤. . .≤D[xn].
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1.
3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=s csúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √ D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒ Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1]. Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=s csúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √ D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒ Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1]. Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=scsúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √ D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒ Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1]. Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=scsúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √
D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒ Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1]. Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=scsúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √ D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒
Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1]. Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=scsúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √ D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒ Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1].
Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=scsúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √ D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒ Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1].
Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
1. D[x1]≤D[x2]≤. . .≤D[xn].
Bizonyítás.
A csúcsok azs=x1,x2, . . . ,xnsorrendben kerülnek bele aQsorba
=⇒ebben a sorrendben is kerülnek ki a sorból.
Hax 6=scsúcs el ˝obb van, minty =⇒apa(x)nem lehet kés ˝obb, mint apa(y), hiszen ha el ˝obb lenne,y-hoz el ˝obb eljutottunk volna.
Indukció =⇒GyökérreD[s] =0, fiaira mind nagyobb. √ D[xi] =D[apa(xi)] +1 ésD[xi+1] =D[apa(xi+1)] +1 =⇒ Ha a két apa különböz ˝o
=⇒D[apa(xi)]≤D[apa(xi+1)] =⇒D[xi]≤D[xi+1].
Ha pedig az apák megegyeznek =⇒D[xi] =D[xi+1].
Tétel
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1
Bizonyítás.
Nézzük, hogy mi történik, amikorx kikerül aQsorból, és éppen az (x,y)élet vizsgáljuk.
Ha bejárva[y] =hamis =⇒y apjax, vagyisD[y] =D[x] +1. Különbeny-t már korábban láttuk =⇒y apja el ˝obb van, mintx
=⇒D[apa(y)]≤D[x] =⇒D[y] =D[apa(y)] +1≤D[x] +1.
Tétel
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1
Bizonyítás.
Nézzük, hogy mi történik, amikorx kikerül aQsorból, és éppen az (x,y)élet vizsgáljuk.
Ha bejárva[y] =hamis =⇒y apjax, vagyisD[y] =D[x] +1.
Különbeny-t már korábban láttuk =⇒y apja el ˝obb van, mintx
=⇒D[apa(y)]≤D[x] =⇒D[y] =D[apa(y)] +1≤D[x] +1.
Tétel
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1
Bizonyítás.
Nézzük, hogy mi történik, amikorx kikerül aQsorból, és éppen az (x,y)élet vizsgáljuk.
Ha bejárva[y] =hamis =⇒y apjax, vagyisD[y] =D[x] +1.
Különbeny-t már korábban láttuk =⇒y apja el ˝obb van, mintx
=⇒D[apa(y)]≤D[x] =⇒D[y] =D[apa(y)] +1≤D[x] +1.
Tétel
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1
Bizonyítás.
Nézzük, hogy mi történik, amikorx kikerül aQsorból, és éppen az (x,y)élet vizsgáljuk.
Ha bejárva[y] =hamis =⇒y apjax, vagyisD[y] =D[x] +1.
Különbeny-t már korábban láttuk =⇒y apja el ˝obb van, mintx
=⇒D[apa(y)]≤D[x]
=⇒D[y] =D[apa(y)] +1≤D[x] +1.
Tétel
2. Ha x →y éle G-nek, akkor D[y]≤D[x] +1
Bizonyítás.
Nézzük, hogy mi történik, amikorx kikerül aQsorból, és éppen az (x,y)élet vizsgáljuk.
Ha bejárva[y] =hamis =⇒y apjax, vagyisD[y] =D[x] +1.
Különbeny-t már korábban láttuk =⇒y apja el ˝obb van, mintx
=⇒D[apa(y)]≤D[x] =⇒D[y] =D[apa(y)] +1≤D[x] +1.
Tétel
3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Bizonyítás.
d(s,v)≤D[v] √
Legyens=y0,y1, . . .yk =v egy minimális hosszúságúG-beli irányított úts-b ˝olv-be.
=⇒az út éleire:D[y1]≤D[s] +1=1, majdD[y2]≤D[y1] +1≤2. . . D[v] =D[yk]≤k =d(s,v) =⇒ √
Tétel
3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Bizonyítás.
d(s,v)≤D[v] √
Legyens=y0,y1, . . .yk =v egy minimális hosszúságúG-beli irányított úts-b ˝olv-be.
=⇒az út éleire:D[y1]≤D[s] +1=1, majdD[y2]≤D[y1] +1≤2. . . D[v] =D[yk]≤k =d(s,v) =⇒ √
Tétel
3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Bizonyítás.
d(s,v)≤D[v] √
Legyens=y0,y1, . . .yk =v egy minimális hosszúságúG-beli irányított úts-b ˝olv-be.
=⇒az út éleire:D[y1]≤D[s] +1=1, majdD[y2]≤D[y1] +1≤2
. . . D[v] =D[yk]≤k =d(s,v) =⇒ √
Tétel
3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Bizonyítás.
d(s,v)≤D[v] √
Legyens=y0,y1, . . .yk =v egy minimális hosszúságúG-beli irányított úts-b ˝olv-be.
=⇒az út éleire:D[y1]≤D[s] +1=1, majdD[y2]≤D[y1] +1≤2. . . D[v] =D[yk]≤k =d(s,v) =⇒ √
Tétel
3. D[v] =d(s,v)teljesül minden v ∈V csúcsra.
Bizonyítás.
d(s,v)≤D[v] √
Legyens=y0,y1, . . .yk =v egy minimális hosszúságúG-beli irányított úts-b ˝olv-be.
=⇒az út éleire:D[y1]≤D[s] +1=1, majdD[y2]≤D[y1] +1≤2. . . D[v] =D[yk]≤k =d(s,v) =⇒ √