Algoritmuselmélet
Minimális feszít ˝ofák
Katona Gyula Y.
Számítástudományi és Információelméleti Tanszék Budapesti M ˝uszaki és Gazdaságtudományi Egyetem
11. el ˝oadás
Minimális költség ˝u feszít ˝ofák
Most irányítatlan gráfokkal foglalkozunk.
A kör és út most valóban egyszer ˝u.
Definíció (minimális költség ˝u feszít ˝ofa)
Legyen G= (V,E)egy összefügg ˝o gráf. A G gráf egy körmentes összefügg ˝o F = (V,E0)részgráfja a gráf egyfeszít ˝ofája. Legyen továbbá az éleken értelmezve egy c:E →Rsúlyfüggvény. Ekkor a G gráf egy F feszít ˝ofájaminimális költség ˝u, ha költsége (a benne
szerepl ˝o élek súlyainak összege) minimális G összes feszít ˝ofáját tekintve.
Probléma
Adott egy G = (V,E)összefügg ˝o irányítatlan gráf, és az élein értelmezett c :E →Rsúlyfüggvény. Határozzuk meg a G egy minimális költség ˝u feszít ˝ofáját.
Például: villamosvezetékek kiépítése.
Minimális költség ˝u feszít ˝ofák
Most irányítatlan gráfokkal foglalkozunk.
A kör és út most valóban egyszer ˝u.
Definíció (minimális költség ˝u feszít ˝ofa)
Legyen G= (V,E)egy összefügg ˝o gráf. A G gráf egy körmentes összefügg ˝o F = (V,E0)részgráfja a gráf egyfeszít ˝ofája. Legyen továbbá az éleken értelmezve egy c:E →Rsúlyfüggvény. Ekkor a G gráf egy F feszít ˝ofájaminimális költség ˝u, ha költsége (a benne
szerepl ˝o élek súlyainak összege) minimális G összes feszít ˝ofáját tekintve.
Probléma
Adott egy G = (V,E)összefügg ˝o irányítatlan gráf, és az élein értelmezett c :E →Rsúlyfüggvény. Határozzuk meg a G egy minimális költség ˝u feszít ˝ofáját.
Például: villamosvezetékek kiépítése.
Minimális költség ˝u feszít ˝ofák
Most irányítatlan gráfokkal foglalkozunk.
A kör és út most valóban egyszer ˝u.
Definíció (minimális költség ˝u feszít ˝ofa)
Legyen G= (V,E)egy összefügg ˝o gráf. A G gráf egy körmentes összefügg ˝o F = (V,E0)részgráfja a gráf egyfeszít ˝ofája. Legyen továbbá az éleken értelmezve egy c:E →Rsúlyfüggvény. Ekkor a G gráf egy F feszít ˝ofájaminimális költség ˝u, ha költsége (a benne
szerepl ˝o élek súlyainak összege) minimális G összes feszít ˝ofáját tekintve.
Probléma
Adott egy G = (V,E)összefügg ˝o irányítatlan gráf, és az élein
Például: villamosvezetékek kiépítése.
Minimális költség ˝u feszít ˝ofák
Most irányítatlan gráfokkal foglalkozunk.
A kör és út most valóban egyszer ˝u.
Definíció (minimális költség ˝u feszít ˝ofa)
Legyen G= (V,E)egy összefügg ˝o gráf. A G gráf egy körmentes összefügg ˝o F = (V,E0)részgráfja a gráf egyfeszít ˝ofája. Legyen továbbá az éleken értelmezve egy c:E →Rsúlyfüggvény. Ekkor a G gráf egy F feszít ˝ofájaminimális költség ˝u, ha költsége (a benne
szerepl ˝o élek súlyainak összege) minimális G összes feszít ˝ofáját tekintve.
Probléma
Adott egy G = (V,E)összefügg ˝o irányítatlan gráf, és az élein értelmezett c :E →Rsúlyfüggvény. Határozzuk meg a G egy minimális költség ˝u feszít ˝ofáját.
Fák tulajdonságai
Tétel
1.Minden legalább kétpontú fában van olyan csúcs, amib ˝ol csak egy él megy ki (els ˝ofokú csúcs).
2.Bármely összefügg ˝o gráf tartalmaz feszít ˝ofát.
3.Egy n-pontú összefügg ˝o gráf akkor és csak akkor fa, ha n−1éle van.
4.Egy fa bármely két pontja között pontosan egy út vezet. 5.Legyen G egy súlyozott él ˝u összefügg ˝o gráf, F egy minimális költség ˝u feszít ˝ofája. Legyen g= (u,v)a G-nek egy olyan éle, ami nem éle F -nek, és tegyük fel, hogy az F -beli u-ból v -be vezet ˝o úton van olyan g0 él, amelyre c(g)≤c(g0). Ekkor az F -b ˝ol a g
hozzávételével és a g0 elhagyásával adódó F0gráf is egy minimális költség ˝u feszít ˝ofa G-ben.
Bizonyítás.
1–4volt már BSZ-en. √
Fák tulajdonságai
Tétel
1.Minden legalább kétpontú fában van olyan csúcs, amib ˝ol csak egy él megy ki (els ˝ofokú csúcs).
2.Bármely összefügg ˝o gráf tartalmaz feszít ˝ofát.
3.Egy n-pontú összefügg ˝o gráf akkor és csak akkor fa, ha n−1éle van.
4.Egy fa bármely két pontja között pontosan egy út vezet. 5.Legyen G egy súlyozott él ˝u összefügg ˝o gráf, F egy minimális költség ˝u feszít ˝ofája. Legyen g= (u,v)a G-nek egy olyan éle, ami nem éle F -nek, és tegyük fel, hogy az F -beli u-ból v -be vezet ˝o úton van olyan g0 él, amelyre c(g)≤c(g0). Ekkor az F -b ˝ol a g
hozzávételével és a g0 elhagyásával adódó F0gráf is egy minimális költség ˝u feszít ˝ofa G-ben.
Bizonyítás.
1–4volt már BSZ-en. √
Fák tulajdonságai
Tétel
1.Minden legalább kétpontú fában van olyan csúcs, amib ˝ol csak egy él megy ki (els ˝ofokú csúcs).
2.Bármely összefügg ˝o gráf tartalmaz feszít ˝ofát.
3.Egy n-pontú összefügg ˝o gráf akkor és csak akkor fa, ha n−1éle van.
4.Egy fa bármely két pontja között pontosan egy út vezet. 5.Legyen G egy súlyozott él ˝u összefügg ˝o gráf, F egy minimális költség ˝u feszít ˝ofája. Legyen g= (u,v)a G-nek egy olyan éle, ami nem éle F -nek, és tegyük fel, hogy az F -beli u-ból v -be vezet ˝o úton van olyan g0 él, amelyre c(g)≤c(g0). Ekkor az F -b ˝ol a g
hozzávételével és a g0 elhagyásával adódó F0gráf is egy minimális költség ˝u feszít ˝ofa G-ben.
Bizonyítás.
1–4volt már BSZ-en. √
Fák tulajdonságai
Tétel
1.Minden legalább kétpontú fában van olyan csúcs, amib ˝ol csak egy él megy ki (els ˝ofokú csúcs).
2.Bármely összefügg ˝o gráf tartalmaz feszít ˝ofát.
3.Egy n-pontú összefügg ˝o gráf akkor és csak akkor fa, ha n−1éle van.
4.Egy fa bármely két pontja között pontosan egy út vezet.
5.Legyen G egy súlyozott él ˝u összefügg ˝o gráf, F egy minimális költség ˝u feszít ˝ofája. Legyen g= (u,v)a G-nek egy olyan éle, ami nem éle F -nek, és tegyük fel, hogy az F -beli u-ból v -be vezet ˝o úton van olyan g0 él, amelyre c(g)≤c(g0). Ekkor az F -b ˝ol a g
hozzávételével és a g0 elhagyásával adódó F0gráf is egy minimális költség ˝u feszít ˝ofa G-ben.
Bizonyítás.
1–4volt már BSZ-en. √
Fák tulajdonságai
Tétel
1.Minden legalább kétpontú fában van olyan csúcs, amib ˝ol csak egy él megy ki (els ˝ofokú csúcs).
2.Bármely összefügg ˝o gráf tartalmaz feszít ˝ofát.
3.Egy n-pontú összefügg ˝o gráf akkor és csak akkor fa, ha n−1éle van.
4.Egy fa bármely két pontja között pontosan egy út vezet.
5.Legyen G egy súlyozott él ˝u összefügg ˝o gráf, F egy minimális költség ˝u feszít ˝ofája. Legyen g= (u,v)a G-nek egy olyan éle, ami nem éle F -nek, és tegyük fel, hogy az F -beli u-ból v -be vezet ˝o úton van olyan g0 él, amelyre c(g)≤c(g0). Ekkor az F -b ˝ol a g
hozzávételével és a g0 elhagyásával adódó F0gráf is egy minimális költség ˝u feszít ˝ofa G-ben.
Bizonyítás.
1–4volt már BSZ-en. √
Fák tulajdonságai
Tétel
1.Minden legalább kétpontú fában van olyan csúcs, amib ˝ol csak egy él megy ki (els ˝ofokú csúcs).
2.Bármely összefügg ˝o gráf tartalmaz feszít ˝ofát.
3.Egy n-pontú összefügg ˝o gráf akkor és csak akkor fa, ha n−1éle van.
4.Egy fa bármely két pontja között pontosan egy út vezet.
5.Legyen G egy súlyozott él ˝u összefügg ˝o gráf, F egy minimális költség ˝u feszít ˝ofája. Legyen g= (u,v)a G-nek egy olyan éle, ami nem éle F -nek, és tegyük fel, hogy az F -beli u-ból v -be vezet ˝o úton van olyan g0 él, amelyre c(g)≤c(g0). Ekkor az F -b ˝ol a g
hozzávételével és a g0 elhagyásával adódó F0gráf is egy minimális költség ˝u feszít ˝ofa G-ben.
Bizonyítás.
Bizonyítás.
5.
2 4
u 5
10
v 2 2
3 4
8 8
g g
02 4
u 5
10
v 2 2
3 4
8 8
F ∪ {g}gráfban van olyan kör, amelynekg0éle. =⇒Ag0 törlésével kapottF0 gráf összefügg ˝o marad.
F0 költsége nem nagyobbF költségénél.
Bizonyítás.
5.
2 4
u 5
10
v 2 2
3 4
8 8
g g
02 4
u 5
10
v 2 2
3 4
8 8
F ∪ {g}gráfban van olyan kör, amelynekg0éle. =⇒Ag0 törlésével kapottF0 gráf összefügg ˝o marad.
F0 költsége nem nagyobbF költségénél.
Bizonyítás.
5.
2 4
u 5
10
v 2 2
3 4
8 8
g g
02 4
u 5
10
v 2 2
3 4
8 8
F0 költsége nem nagyobbF költségénél.
Bizonyítás.
5.
2 4
u 5
10
v 2 2
3 4
8 8
g g
02 4
u 5
10
v 2 2
3 4
8 8
F ∪ {g}gráfban van olyan kör, amelynekg0éle. =⇒Ag0 törlésével kapottF0 gráf összefügg ˝o marad.
A piros-kék algoritmus
Sorra nézzükGéleit: bizonyosakat beveszünk a minimális feszít ˝ofába, másokat pedig eldobunk.
=⇒Színezzük aGéleit:
akékélek belekerülnek a végeredményt jelent ˝o minimális feszít ˝ofába, apirosakpedig nem.
=⇒Úgy színezünk, hogy az eddig kialakult (részleges) színezés mindigtakaroslegyen.
Definíció (takaros színezés)
Tekintsük a súlyozott él ˝u G gráf éleinek egy részleges színezését, melynél bármely élpiros,kékvagy színtelen lehet. Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az összeskékélet tartalmazza, és egyetlenpirosélet sem tartalmaz.
A piros-kék algoritmus
Sorra nézzükGéleit: bizonyosakat beveszünk a minimális feszít ˝ofába, másokat pedig eldobunk.
=⇒Színezzük aGéleit:
akékélek belekerülnek a végeredményt jelent ˝o minimális feszít ˝ofába,
apirosakpedig nem.
=⇒Úgy színezünk, hogy az eddig kialakult (részleges) színezés mindigtakaroslegyen.
Definíció (takaros színezés)
Tekintsük a súlyozott él ˝u G gráf éleinek egy részleges színezését, melynél bármely élpiros,kékvagy színtelen lehet. Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az összeskékélet tartalmazza, és egyetlenpirosélet sem tartalmaz.
A piros-kék algoritmus
Sorra nézzükGéleit: bizonyosakat beveszünk a minimális feszít ˝ofába, másokat pedig eldobunk.
=⇒Színezzük aGéleit:
akékélek belekerülnek a végeredményt jelent ˝o minimális feszít ˝ofába, apirosakpedig nem.
=⇒Úgy színezünk, hogy az eddig kialakult (részleges) színezés mindigtakaroslegyen.
Definíció (takaros színezés)
Tekintsük a súlyozott él ˝u G gráf éleinek egy részleges színezését, melynél bármely élpiros,kékvagy színtelen lehet. Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az összeskékélet tartalmazza, és egyetlenpirosélet sem tartalmaz.
A piros-kék algoritmus
Sorra nézzükGéleit: bizonyosakat beveszünk a minimális feszít ˝ofába, másokat pedig eldobunk.
=⇒Színezzük aGéleit:
akékélek belekerülnek a végeredményt jelent ˝o minimális feszít ˝ofába, apirosakpedig nem.
=⇒Úgy színezünk, hogy az eddig kialakult (részleges) színezés mindigtakaroslegyen.
Definíció (takaros színezés)
Tekintsük a súlyozott él ˝u G gráf éleinek egy részleges színezését, melynél bármely élpiros,kékvagy színtelen lehet. Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az összeskékélet tartalmazza, és egyetlenpirosélet sem tartalmaz.
A piros-kék algoritmus
Sorra nézzükGéleit: bizonyosakat beveszünk a minimális feszít ˝ofába, másokat pedig eldobunk.
=⇒Színezzük aGéleit:
akékélek belekerülnek a végeredményt jelent ˝o minimális feszít ˝ofába, apirosakpedig nem.
=⇒Úgy színezünk, hogy az eddig kialakult (részleges) színezés mindigtakaroslegyen.
Definíció (takaros színezés)
Tekintsük a súlyozott él ˝u G gráf éleinek egy részleges színezését, melynél bármely élpiros,kékvagy színtelen lehet. Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az
A piros-kék algoritmus
KÉK SZABÁLY:
PIROS SZABÁLY:
Válasszunk ki egy olyan∅ 6= X ⊂ V csúcshal- mazt, amelyb ˝ol nem vezet ki kék él. Ezután egy legkisebb súlyú X-b ˝ol kimen ˝o színezetlen élet fessünk kékre.
Válasszunk G-ben egy olyan egyszer ˝u kört, amelyben nincs piros él. A kör egyik legna- gyobb súlyú színtelen élét fessük pirosra.
KezdetbenG-nek nincs színes éle. A két szabályt tetsz ˝oleges sorrendben és helyeken alkalmazzuk, amíg csak lehetséges.
=⇒piros-kékalgoritmus
A piros-kék algoritmus
KÉK SZABÁLY:
PIROS SZABÁLY:
Válasszunk ki egy olyan∅ 6= X ⊂ V csúcshal- mazt, amelyb ˝ol nem vezet ki kék él. Ezután egy legkisebb súlyú X-b ˝ol kimen ˝o színezetlen élet fessünk kékre.
Válasszunk G-ben egy olyan egyszer ˝u kört, amelyben nincs piros él. A kör egyik legna- gyobb súlyú színtelen élét fessük pirosra.
KezdetbenG-nek nincs színes éle. A két szabályt tetsz ˝oleges sorrendben és helyeken alkalmazzuk, amíg csak lehetséges.
=⇒piros-kékalgoritmus
A piros-kék algoritmus
KÉK SZABÁLY:
PIROS SZABÁLY:
Válasszunk ki egy olyan∅ 6= X ⊂ V csúcshal- mazt, amelyb ˝ol nem vezet ki kék él. Ezután egy legkisebb súlyú X-b ˝ol kimen ˝o színezetlen élet fessünk kékre.
Válasszunk G-ben egy olyan egyszer ˝u kört, amelyben nincs piros él. A kör egyik legna- gyobb súlyú színtelen élét fessük pirosra.
KezdetbenG-nek nincs színes éle. A két szabályt tetsz ˝oleges sorrendben és helyeken alkalmazzuk, amíg csak lehetséges.
=⇒piros-kékalgoritmus
A piros-kék algoritmus
KÉK SZABÁLY:
PIROS SZABÁLY:
Válasszunk ki egy olyan∅ 6= X ⊂ V csúcshal- mazt, amelyb ˝ol nem vezet ki kék él. Ezután egy legkisebb súlyú X-b ˝ol kimen ˝o színezetlen élet fessünk kékre.
Válasszunk G-ben egy olyan egyszer ˝u kört, amelyben nincs piros él. A kör egyik legna- gyobb súlyú színtelen élét fessük pirosra.
KezdetbenG-nek nincs színes éle.
A két szabályt tetsz ˝oleges sorrendben és helyeken alkalmazzuk, amíg csak lehetséges.
=⇒piros-kékalgoritmus
A piros-kék algoritmus
KÉK SZABÁLY:
PIROS SZABÁLY:
Válasszunk ki egy olyan∅ 6= X ⊂ V csúcshal- mazt, amelyb ˝ol nem vezet ki kék él. Ezután egy legkisebb súlyú X-b ˝ol kimen ˝o színezetlen élet fessünk kékre.
Válasszunk G-ben egy olyan egyszer ˝u kört, amelyben nincs piros él. A kör egyik legna- gyobb súlyú színtelen élét fessük pirosra.
KezdetbenG-nek nincs színes éle. A két szabályt tetsz ˝oleges sorrendben és helyeken alkalmazzuk, amíg csak lehetséges.
=⇒piros-kékalgoritmus
A piros-kék algoritmus
KÉK SZABÁLY:
PIROS SZABÁLY:
Válasszunk ki egy olyan∅ 6= X ⊂ V csúcshal- mazt, amelyb ˝ol nem vezet ki kék él. Ezután egy legkisebb súlyú X-b ˝ol kimen ˝o színezetlen élet fessünk kékre.
Válasszunk G-ben egy olyan egyszer ˝u kört, amelyben nincs piros él. A kör egyik legna- gyobb súlyú színtelen élét fessük pirosra.
KezdetbenG-nek nincs színes éle. A két szabályt tetsz ˝oleges sorrendben és helyeken alkalmazzuk, amíg csak lehetséges.
A piros-kék algoritmus
Tétel
Apiros-kékeljárás m ˝uködése során mindig takaros színezésünk van.
Ezen felül a színezéssel sosem akadunk el: végül G minden éle színes lesz.
Bizonyítás.
Belátjuk, hogy a színezés mindig takaros. Kezdetben √ .
Tegyük fel, hogy egy takaros színezésünk van. Legyen F a G egy olyan minimális költség ˝u feszít ˝ofája, amely mindenkékélet tartalmaz, és egyetlenpirosat sem. Tegyük fel továbbá, hogy ebben a helyzetben a gráf f élét festjük be.
A piros-kék algoritmus
Tétel
Apiros-kékeljárás m ˝uködése során mindig takaros színezésünk van.
Ezen felül a színezéssel sosem akadunk el: végül G minden éle színes lesz.
Bizonyítás.
Belátjuk, hogy a színezés mindig takaros.
Kezdetben √ .
Tegyük fel, hogy egy takaros színezésünk van. Legyen F a G egy olyan minimális költség ˝u feszít ˝ofája, amely mindenkékélet tartalmaz, és egyetlenpirosat sem. Tegyük fel továbbá, hogy ebben a helyzetben a gráf f élét festjük be.
A piros-kék algoritmus
Tétel
Apiros-kékeljárás m ˝uködése során mindig takaros színezésünk van.
Ezen felül a színezéssel sosem akadunk el: végül G minden éle színes lesz.
Bizonyítás.
Belátjuk, hogy a színezés mindig takaros. Kezdetben √ .
Tegyük fel, hogy egy takaros színezésünk van. Legyen F a G egy olyan minimális költség ˝u feszít ˝ofája, amely mindenkékélet tartalmaz, és egyetlenpirosat sem. Tegyük fel továbbá, hogy ebben a helyzetben a gráf f élét festjük be.
A piros-kék algoritmus
Tétel
Apiros-kékeljárás m ˝uködése során mindig takaros színezésünk van.
Ezen felül a színezéssel sosem akadunk el: végül G minden éle színes lesz.
Bizonyítás.
Belátjuk, hogy a színezés mindig takaros. Kezdetben √ .
Tegyük fel, hogy egy takaros színezésünk van. Legyen F a G egy olyan minimális költség ˝u feszít ˝ofája, amely mindenkékélet tartalmaz, és egyetlenpirosat sem. Tegyük fel továbbá, hogy ebben a helyzetben a gráf f élét festjük be.
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz- záadásával kapott gráf.
=⇒ Eszerint F0 egy minimális feszít ˝ofa, tartal- maz mindenkékélet és nem tartalmazpirosélet.
√
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz- záadásával kapott gráf.
=⇒ Eszerint F0 egy minimális feszít ˝ofa, tartal- maz mindenkékélet és nem tartalmazpirosélet.
√
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz- záadásával kapott gráf.
=⇒ Eszerint F0 egy minimális feszít ˝ofa, tartal- maz mindenkékélet és nem tartalmazpirosélet.
√
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz- záadásával kapott gráf.
=⇒ Eszerint F0 egy minimális feszít ˝ofa, tartal- maz mindenkékélet és nem tartalmazpirosélet.
√
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz- záadásával kapott gráf.
=⇒ Eszerint F0 egy minimális feszít ˝ofa, tartal- maz mindenkékélet és nem tartalmazpirosélet.
√
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz- záadásával kapott gráf.
=⇒ Eszerint F0 egy minimális feszít ˝ofa, tartal- maz mindenkékélet és nem tartalmazpirosélet.
√
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz- záadásával kapott gráf.
=⇒ Eszerint F0 egy minimális feszít ˝ofa, tartal- maz mindenkékélet és nem tartalmazpirosélet.
√
Bizonyítás.
Két eset van aszerint, hogy melyik szabályt használjuk:
A kék szabályt használjuk: =⇒f kéklesz.
Ha f éle F -nek √
f F
X f0
Ha f nem éle F -nek =⇒ nézzük azt az X ⊂ V csúcshalmazt, amelyre akékszabályt alkalmaz- tuk.
Az F -ben van olyan út (mert feszít ˝ofa), ami az f két végpontját összeköti. =⇒ Ezen az úton pe- dig van olyan f0 él, ami kimegy X -b ˝ol, ugyanis f kilép X -b ˝ol.
Az F választása miatt f0 nem lehetpiros.
A kék szabály szerint kék sem lehet, továbbá c(f0)≥c(f)is teljesül.
Legyen F0 az F -b ˝ol az f0 törlésével és az f hoz-
Bizonyítás.
A piros szabályt használjuk: Ekkor f piroslesz.
=⇒ Ha f nem éle F -nek √
f F
f0
Ha f ∈ F , akkor az f törlésével az F két komponensre esik.
=⇒ A körnek, amelyre a piros szabályt alkalmaztuk, van olyan f0 6= f éle, ami a két komponens között fut.
A régi színezés takarossága és a piros szabály miatt az f0 színtelen és c(f0) ≤ c(f).
Az F -be f helyett f0-t véve a kapott F0egy minimális költség ˝u feszít ˝ofa lesz. √
Bizonyítás.
A piros szabályt használjuk: Ekkor f piroslesz.=⇒ Ha f nem éle F -nek √
f F
f0
Ha f ∈ F , akkor az f törlésével az F két komponensre esik.
=⇒ A körnek, amelyre a piros szabályt alkalmaztuk, van olyan f0 6= f éle, ami a két komponens között fut.
A régi színezés takarossága és a piros szabály miatt az f0 színtelen és c(f0) ≤ c(f).
Az F -be f helyett f0-t véve a kapott F0egy minimális költség ˝u feszít ˝ofa lesz. √
Bizonyítás.
A piros szabályt használjuk: Ekkor f piroslesz.=⇒ Ha f nem éle F -nek √
f F
f0
Ha f ∈ F , akkor az f törlésével az F két komponensre esik.
=⇒ A körnek, amelyre a piros szabályt alkalmaztuk, van olyan f0 6= f éle, ami a két komponens között fut.
A régi színezés takarossága és a piros szabály miatt az f0 színtelen és c(f0) ≤ c(f).
Az F -be f helyett f0-t véve a kapott F0egy minimális költség ˝u feszít ˝ofa lesz. √
Bizonyítás.
A piros szabályt használjuk: Ekkor f piroslesz.=⇒ Ha f nem éle F -nek √
f F
f0
Ha f ∈ F , akkor az f törlésével az F két komponensre esik.
=⇒ A körnek, amelyre a piros szabályt alkalmaztuk, van olyan f0 6= f éle, ami a két komponens között fut.
A régi színezés takarossága és a piros szabály miatt az f0 színtelen és c(f0) ≤ c(f).
Az F -be f helyett f0-t véve a kapott F0egy minimális költség ˝u feszít ˝ofa lesz. √
Bizonyítás.
A piros szabályt használjuk: Ekkor f piroslesz.=⇒ Ha f nem éle F -nek √
f F
f0
Ha f ∈ F , akkor az f törlésével az F két komponensre esik.
=⇒ A körnek, amelyre a piros szabályt alkalmaztuk, van olyan f0 6= f éle, ami a két komponens között fut.
A régi színezés takarossága és a piros szabály miatt az f0 színtelen és c(f0) ≤ c(f).
Az F -be f helyett f0-t véve a kapott F0egy minimális költség ˝u feszít ˝ofa lesz. √
Bizonyítás.
A piros szabályt használjuk: Ekkor f piroslesz.=⇒ Ha f nem éle F -nek √
f F
f0
Ha f ∈ F , akkor az f törlésével az F két komponensre esik.
=⇒ A körnek, amelyre a piros szabályt alkalmaztuk, van olyan f0 6= f éle, ami a két komponens között fut.
A régi színezés takarossága és a piros szabály miatt az f0 színtelen és c(f0) ≤ c(f).
Az F -be f helyett f0-t véve a kapott F0egy minimális költség ˝u feszít ˝ofa lesz. √
Bizonyítás.
A piros szabályt használjuk: Ekkor f piroslesz.=⇒ Ha f nem éle F -nek √
f F
f0
Ha f ∈ F , akkor az f törlésével az F két komponensre esik.
=⇒ A körnek, amelyre a piros szabályt alkalmaztuk, van olyan f0 6= f éle, ami a két komponens között fut.
A régi színezés takarossága és a piros szabály miatt az f0 színtelen és c(f0) ≤ c(f).
Az F -be f helyett f0-t véve a kapott F0egy minimális költség ˝u feszít ˝ofa lesz. √
Bizonyítás.
Miért nem akadunk el soha?
Tegyük fel, hogy van még egyf színtelen él.
A színezés takaros =⇒akékélek egy erd ˝ot alkotnak.
=⇒Haf végpontjai ugyanabban akékfában vannak, akkor apiros szabály alkalmazható arra körre, aminek az éleif és azf végpontjait összeköt ˝o (egyetlen)kékút élei.
=⇒Haf különböz ˝okékfákat köt össze, akkor pedig akékszabály m ˝uködik;X legyen az egyik olyan fa csúcshalmaza, amihezf csatlakozik. (Ez utóbbi esetben nem biztos, hogyf fog színt kapni a következ ˝o lépésben.)
Bizonyítás.
Miért nem akadunk el soha?
Tegyük fel, hogy van még egyf színtelen él.
A színezés takaros =⇒akékélek egy erd ˝ot alkotnak.
=⇒Haf végpontjai ugyanabban akékfában vannak, akkor apiros szabály alkalmazható arra körre, aminek az éleif és azf végpontjait összeköt ˝o (egyetlen)kékút élei.
=⇒Haf különböz ˝okékfákat köt össze, akkor pedig akékszabály m ˝uködik;X legyen az egyik olyan fa csúcshalmaza, amihezf csatlakozik. (Ez utóbbi esetben nem biztos, hogyf fog színt kapni a következ ˝o lépésben.)
Bizonyítás.
Miért nem akadunk el soha?
Tegyük fel, hogy van még egyf színtelen él.
A színezés takaros =⇒akékélek egy erd ˝ot alkotnak.
=⇒Haf végpontjai ugyanabban akékfában vannak, akkor apiros szabály alkalmazható arra körre, aminek az éleif és azf végpontjait összeköt ˝o (egyetlen)kékút élei.
=⇒Haf különböz ˝okékfákat köt össze, akkor pedig akékszabály m ˝uködik;X legyen az egyik olyan fa csúcshalmaza, amihezf csatlakozik. (Ez utóbbi esetben nem biztos, hogyf fog színt kapni a következ ˝o lépésben.)
Bizonyítás.
Miért nem akadunk el soha?
Tegyük fel, hogy van még egyf színtelen él.
A színezés takaros =⇒akékélek egy erd ˝ot alkotnak.
=⇒Haf végpontjai ugyanabban akékfában vannak, akkor apiros szabály alkalmazható arra körre, aminek az éleif és azf végpontjait összeköt ˝o (egyetlen)kékút élei.
=⇒Haf különböz ˝okékfákat köt össze, akkor pedig akékszabály m ˝uködik;X legyen az egyik olyan fa csúcshalmaza, amihezf csatlakozik. (Ez utóbbi esetben nem biztos, hogyf fog színt kapni a következ ˝o lépésben.)
Bizonyítás.
Miért nem akadunk el soha?
Tegyük fel, hogy van még egyf színtelen él.
A színezés takaros =⇒akékélek egy erd ˝ot alkotnak.
=⇒Haf végpontjai ugyanabban akékfában vannak, akkor apiros szabály alkalmazható arra körre, aminek az éleif és azf végpontjait összeköt ˝o (egyetlen)kékút élei.
=⇒Haf különböz ˝okékfákat köt össze, akkor pedig akékszabály m ˝uködik;X legyen az egyik olyan fa csúcshalmaza, amihezf csatlakozik. (Ez utóbbi esetben nem biztos, hogyf fog színt kapni a következ ˝o lépésben.)
A piros-kék algoritmus
Tétel
Ha apiros-kékalgoritmussal befestjük az összefügg ˝o G= (V,E)gráf minden élét, akkor akékélek egy minimális költség ˝u feszít ˝ofa élei.
S ˝ot, ez már akkor is igaz, amikor van|V| −1kékélünk (és esetleg van még színezetlen él).
Bizonyítás.
Az els ˝o állítás ⇐=a végs ˝o színezés is takaros.
A második: végül összesen|V| −1kékél lesz. Ha már van ennyi, akkor több nem keletkezhet.
A piros-kék algoritmus
Tétel
Ha apiros-kékalgoritmussal befestjük az összefügg ˝o G= (V,E)gráf minden élét, akkor akékélek egy minimális költség ˝u feszít ˝ofa élei.
S ˝ot, ez már akkor is igaz, amikor van|V| −1kékélünk (és esetleg van még színezetlen él).
Bizonyítás.
Az els ˝o állítás ⇐=a végs ˝o színezés is takaros.
A második: végül összesen|V| −1kékél lesz. Ha már van ennyi, akkor több nem keletkezhet.
A piros-kék algoritmus
Tétel
Ha apiros-kékalgoritmussal befestjük az összefügg ˝o G= (V,E)gráf minden élét, akkor akékélek egy minimális költség ˝u feszít ˝ofa élei.
S ˝ot, ez már akkor is igaz, amikor van|V| −1kékélünk (és esetleg van még színezetlen él).
Bizonyítás.
Az els ˝o állítás ⇐=a végs ˝o színezés is takaros.
A második: végül összesen|V| −1kékél lesz. Ha már van ennyi, akkor több nem keletkezhet.
Prim, Kruskal és Bor ˚uvka módszerei
A recepthelyességeszempontjából tehát közömbös a sorrend, hatékonyságszempontjából viszont nem.
PRIM MÓDSZERE: LegyensaGegy rögzített csúcsa. Minden egyes színez ˝o lépéssel azs-et tartalmazóF kékfát b ˝ovítjük. Kezdetben azF csúcshalmaza{s}, végül pedig az egészV. A következ ˝okékélnek az egyik legkisebb súlyú élet választjuk azok közül, amelyekF-beli
pontbólF-en kívüli pontba mennek.
KRUSKAL MÓDSZERE: A következ ˝o befestend ˝of él legyen mindig a legkisebb súlyú színtelen él. Ha azf két végpontja ugyanazonkék fában van, akkor az él legyenpiros, különben pedigkék.
BOR ˚UVKA MÓDSZERE:Minden egyeskékfához válasszuk ki a legkisebb súlyú bel ˝ole kimen ˝o (színtelen) élet. Színezzükkékrea kiválasztott éleket.
Prim, Kruskal és Bor ˚uvka módszerei
A recepthelyességeszempontjából tehát közömbös a sorrend, hatékonyságszempontjából viszont nem.
PRIM MÓDSZERE: LegyensaGegy rögzített csúcsa. Minden egyes színez ˝o lépéssel azs-et tartalmazóF kékfát b ˝ovítjük. Kezdetben azF csúcshalmaza{s}, végül pedig az egészV.
A következ ˝okékélnek az egyik legkisebb súlyú élet választjuk azok közül, amelyekF-beli
pontbólF-en kívüli pontba mennek.
KRUSKAL MÓDSZERE: A következ ˝o befestend ˝of él legyen mindig a legkisebb súlyú színtelen él. Ha azf két végpontja ugyanazonkék fában van, akkor az él legyenpiros, különben pedigkék.
BOR ˚UVKA MÓDSZERE:Minden egyeskékfához válasszuk ki a legkisebb súlyú bel ˝ole kimen ˝o (színtelen) élet. Színezzükkékrea kiválasztott éleket.
Prim, Kruskal és Bor ˚uvka módszerei
A recepthelyességeszempontjából tehát közömbös a sorrend, hatékonyságszempontjából viszont nem.
PRIM MÓDSZERE: LegyensaGegy rögzített csúcsa. Minden egyes színez ˝o lépéssel azs-et tartalmazóF kékfát b ˝ovítjük. Kezdetben azF csúcshalmaza{s}, végül pedig az egészV. A következ ˝okékélnek az egyik legkisebb súlyú élet választjuk azok közül, amelyekF-beli
pontbólF-en kívüli pontba mennek.
KRUSKAL MÓDSZERE: A következ ˝o befestend ˝of él legyen mindig a legkisebb súlyú színtelen él. Ha azf két végpontja ugyanazonkék fában van, akkor az él legyenpiros, különben pedigkék.
BOR ˚UVKA MÓDSZERE:Minden egyeskékfához válasszuk ki a legkisebb súlyú bel ˝ole kimen ˝o (színtelen) élet. Színezzükkékrea kiválasztott éleket.
Prim, Kruskal és Bor ˚uvka módszerei
A recepthelyességeszempontjából tehát közömbös a sorrend, hatékonyságszempontjából viszont nem.
PRIM MÓDSZERE: LegyensaGegy rögzített csúcsa. Minden egyes színez ˝o lépéssel azs-et tartalmazóF kékfát b ˝ovítjük. Kezdetben azF csúcshalmaza{s}, végül pedig az egészV. A következ ˝okékélnek az egyik legkisebb súlyú élet választjuk azok közül, amelyekF-beli
pontbólF-en kívüli pontba mennek.
KRUSKAL MÓDSZERE: A következ ˝o befestend ˝of él legyen mindig a legkisebb súlyú színtelen él.
Ha azf két végpontja ugyanazonkék fában van, akkor az él legyenpiros, különben pedigkék.
BOR ˚UVKA MÓDSZERE:Minden egyeskékfához válasszuk ki a legkisebb súlyú bel ˝ole kimen ˝o (színtelen) élet. Színezzükkékrea kiválasztott éleket.
Prim, Kruskal és Bor ˚uvka módszerei
A recepthelyességeszempontjából tehát közömbös a sorrend, hatékonyságszempontjából viszont nem.
PRIM MÓDSZERE: LegyensaGegy rögzített csúcsa. Minden egyes színez ˝o lépéssel azs-et tartalmazóF kékfát b ˝ovítjük. Kezdetben azF csúcshalmaza{s}, végül pedig az egészV. A következ ˝okékélnek az egyik legkisebb súlyú élet választjuk azok közül, amelyekF-beli
pontbólF-en kívüli pontba mennek.
KRUSKAL MÓDSZERE: A következ ˝o befestend ˝of él legyen mindig a legkisebb súlyú színtelen él. Ha azf két végpontja ugyanazonkék fában van, akkor az él legyenpiros, különben pedigkék.
BOR ˚UVKA MÓDSZERE:Minden egyeskékfához válasszuk ki a legkisebb súlyú bel ˝ole kimen ˝o (színtelen) élet. Színezzükkékrea kiválasztott éleket.
Prim, Kruskal és Bor ˚uvka módszerei
A recepthelyességeszempontjából tehát közömbös a sorrend, hatékonyságszempontjából viszont nem.
PRIM MÓDSZERE: LegyensaGegy rögzített csúcsa. Minden egyes színez ˝o lépéssel azs-et tartalmazóF kékfát b ˝ovítjük. Kezdetben azF csúcshalmaza{s}, végül pedig az egészV. A következ ˝okékélnek az egyik legkisebb súlyú élet választjuk azok közül, amelyekF-beli
pontbólF-en kívüli pontba mennek.
KRUSKAL MÓDSZERE: A következ ˝o befestend ˝of él legyen mindig a legkisebb súlyú színtelen él. Ha azf két végpontja ugyanazonkék fában van, akkor az él legyenpiros, különben pedigkék.
BOR ˚UVKA MÓDSZERE:Minden egyeskékfához válasszuk ki a legkisebb súlyú bel ˝ole kimen ˝o (színtelen) élet. Színezzükkékrea kiválasztott éleket.
Prim módszere
Mindig akék szabálytalkalmazzuk: VálasszukX-nek a meglév ˝o fa ponthalmazát.
Akékélek végig fát alkotnak.
procedurePrim (G: gráf;varF: élek halmaza); var
U: csúcsok halmaza; u,v: csúcsok;
begin
F :=∅;U:={1}; whileU 6=V do begin
(∗) legyen(u,v)egy legkisebb súlyú olyan él, melyreu ∈U ésv ∈V\U;
F :=F ∪ {(u,v)}; U:=U∪ {v} end
end
Jól m ˝uködik, mertpiros-kékalgoritmus.
Prim módszere
Mindig akék szabálytalkalmazzuk: VálasszukX-nek a meglév ˝o fa ponthalmazát. Akékélek végig fát alkotnak.
procedurePrim (G: gráf;varF: élek halmaza); var
U: csúcsok halmaza; u,v: csúcsok;
begin
F :=∅;U:={1}; whileU 6=V do begin
(∗) legyen(u,v)egy legkisebb súlyú olyan él, melyreu ∈U ésv ∈V\U;
F :=F ∪ {(u,v)}; U:=U∪ {v} end
end
Jól m ˝uködik, mertpiros-kékalgoritmus.
Prim módszere
Mindig akék szabálytalkalmazzuk: VálasszukX-nek a meglév ˝o fa ponthalmazát. Akékélek végig fát alkotnak.
procedurePrim (G: gráf;varF: élek halmaza);
var
U: csúcsok halmaza;
u,v: csúcsok;
begin
F :=∅;U:={1};
whileU 6=V do begin
(∗) legyen(u,v)egy legkisebb súlyú olyan él, melyreu ∈U ésv ∈V\U;
F :=F ∪ {(u,v)};
U:=U∪ {v}
Jól m ˝uködik, mertpiros-kékalgoritmus.
Prim módszere
Mindig akék szabálytalkalmazzuk: VálasszukX-nek a meglév ˝o fa ponthalmazát. Akékélek végig fát alkotnak.
procedurePrim (G: gráf;varF: élek halmaza);
var
U: csúcsok halmaza;
u,v: csúcsok;
begin
F :=∅;U:={1};
whileU 6=V do begin
(∗) legyen(u,v)egy legkisebb súlyú olyan él, melyreu ∈U ésv ∈V\U;
F :=F ∪ {(u,v)};
U:=U∪ {v}
end end
Prim módszere
Mindig akék szabálytalkalmazzuk: VálasszukX-nek a meglév ˝o fa ponthalmazát. Akékélek végig fát alkotnak.
procedurePrim (G: gráf;varF: élek halmaza);
var
U: csúcsok halmaza;
u,v: csúcsok;
begin
F :=∅;U:={1};
whileU 6=V do begin
(∗) legyen(u,v)egy legkisebb súlyú olyan él, melyreu ∈U ésv ∈V\U;
F :=F ∪ {(u,v)};
U:=U∪ {v}
Naiv implementáció
A gráf az élsúlyokat tartalmazóCadjacencia-mátrixával adott.
Az épp aktuálisUésV \Uhalmazok közt futó legkisebb súlyú élek kiválasztása a legegyszer ˝ubb implementációval: O(n2)lépés
=⇒MindenV \U-beli csúcshoz tároljuk, hogy milyen messze van az U halmaztól:
KÖZEL[i] =
∗ hai∈U
egy azi-hez legközelebbiU-beli csúcs hai∈V \U
MINSÚLY[i] =
∗ hai∈U
C[i,j] ha KÖZEL[i] =j 6=∗
A következ ˝o kék él az(i,KÖZEL[i])élek közül kerül majd ki =⇒kékes élek.
Naiv implementáció
A gráf az élsúlyokat tartalmazóCadjacencia-mátrixával adott.
Az épp aktuálisUésV \Uhalmazok közt futó legkisebb súlyú élek kiválasztása a legegyszer ˝ubb implementációval: O(n2)lépés
=⇒MindenV \U-beli csúcshoz tároljuk, hogy milyen messze van az U halmaztól:
KÖZEL[i] =
∗ hai∈U
egy azi-hez legközelebbiU-beli csúcs hai∈V \U
MINSÚLY[i] =
∗ hai∈U
C[i,j] ha KÖZEL[i] =j 6=∗
A következ ˝o kék él az(i,KÖZEL[i])élek közül kerül majd ki =⇒kékes élek.
Naiv implementáció
A gráf az élsúlyokat tartalmazóCadjacencia-mátrixával adott.
Az épp aktuálisUésV \Uhalmazok közt futó legkisebb súlyú élek kiválasztása a legegyszer ˝ubb implementációval: O(n2)lépés
=⇒MindenV \U-beli csúcshoz tároljuk, hogy milyen messze van az U halmaztól:
KÖZEL[i] =
∗ hai∈U
egy azi-hez legközelebbiU-beli csúcs hai∈V \U
MINSÚLY[i] =
∗ hai∈U
C[i,j] ha KÖZEL[i] =j 6=∗
A következ ˝o kék él az(i,KÖZEL[i])élek közül kerül majd ki =⇒kékes élek.
Naiv implementáció
A gráf az élsúlyokat tartalmazóCadjacencia-mátrixával adott.
Az épp aktuálisUésV \Uhalmazok közt futó legkisebb súlyú élek kiválasztása a legegyszer ˝ubb implementációval: O(n2)lépés
=⇒MindenV \U-beli csúcshoz tároljuk, hogy milyen messze van az U halmaztól:
KÖZEL[i] =
∗ hai∈U
egy azi-hez legközelebbiU-beli csúcs hai∈V \U
MINSÚLY[i] =
∗ hai∈U
C[i,j] ha KÖZEL[i] =j 6=∗
A következ ˝o kék él az(i,KÖZEL[i])élek közül kerül majd ki =⇒kékes élek.
Naiv implementáció
A gráf az élsúlyokat tartalmazóCadjacencia-mátrixával adott.
Az épp aktuálisUésV \Uhalmazok közt futó legkisebb súlyú élek kiválasztása a legegyszer ˝ubb implementációval: O(n2)lépés
=⇒MindenV \U-beli csúcshoz tároljuk, hogy milyen messze van az U halmaztól:
KÖZEL[i] =
∗ hai∈U
egy azi-hez legközelebbiU-beli csúcs hai∈V \U
MINSÚLY[i] =
∗ hai∈U
C[i,j] ha KÖZEL[i] =j 6=∗
A következ ˝o kék él az(i,KÖZEL[i])élek közül kerül majd ki =⇒kékes élek.
Naiv implementáció
A gráf az élsúlyokat tartalmazóCadjacencia-mátrixával adott.
Az épp aktuálisUésV \Uhalmazok közt futó legkisebb súlyú élek kiválasztása a legegyszer ˝ubb implementációval: O(n2)lépés
=⇒MindenV \U-beli csúcshoz tároljuk, hogy milyen messze van az U halmaztól:
KÖZEL[i] =
∗ hai∈U
egy azi-hez legközelebbiU-beli csúcs hai∈V \U
MINSÚLY[i] =
∗ hai∈U
C[i,j] ha KÖZEL[i] =j 6=∗
A következ ˝o kék él az(i,KÖZEL[i])élek közül kerül majd ki ⇒kékes
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató. A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i] end
Lépésszám: Egy él színezésO(n) =⇒O(n2)
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i] end
Lépésszám: Egy él színezésO(n) =⇒O(n2)
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i] end
Lépésszám: Egy él színezésO(n) =⇒O(n2)
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i] end
Lépésszám: Egy él színezésO(n) =⇒O(n2)
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i] end
Lépésszám: Egy él színezésO(n) =⇒O(n2)
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.
=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i] end
Lépésszám: Egy él színezésO(n) =⇒O(n2)
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i]
end
Lépésszám: Egy él színezésO(n) =⇒O(n2)
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
KÖZEL[i] :=
∗ hai=1
1 hai6=1 MINSÚLY[i] :=
∗ hai =1
C[i,1] hai 6=1
A következ ˝o kék él kiválasztása: megkeressük a MINSÚLY[ ] tömb minimumát, =⇒legrövidebbkékes éllegyen ak-ba mutató.
A minimumkeresés költsége:O(n)lépés.
A(KÖZEL[k],k)élet fogjukF-be tenni,k-t pedigU-ba.
=⇒MINSÚLY[k] :=KÖZEL[k] :=∗.
A két tömb felfrissítése:AC[k,i]és a MINSÚLY[i]értékeket (i ∈V \U)kell összevetni.=⇒
ifKÖZEL[i]6=∗andC[k,i]<MINSÚLY[i]then begin KÖZEL[i] :=k;
MINSÚLY[i] :=C[k,i]
end
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket. Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore. Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket. Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore. Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore. Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore. Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore.
Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore.
Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore.
Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore.
Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk
=⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore.
Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore.
Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat, ésd-kupacban tároljuk akékeséleket.
=⇒han1,5≤e =⇒O(e)
Kupacos-éllistás implementáció
Építsünk kupacot az aktuálisU ésV\U közötti élekb ˝ol.
(Néhány) MINTÖR-rel lépéssel kiválaszthatjuk a minimálisat, amit kékreszínezünk.
MegváltozottU =⇒BESZÚR-ral beszúrjuk az új éleket.
Nem tör ˝odünk azokkal az élekkel, amik ígyU-n belül mennek
=⇒ezért lehet, hogy MINTÖR-nél ilyet kapunk els ˝ore.
Lépésszám: A kupac mérete sosem haladja mege-t.
A kezdeti kupacépítésO(e), az egyes m ˝uveletek végrehajtása pedig O(loge)id ˝ot vesz igénybe.
Összesen kevesebb, mintedarab BESZÚR és legfeljebbedarab MINTÖR m ˝uveletet végzünk =⇒O(eloge).
Johnson: Kombináljuk a két ötletet, nyilvántartjuk a közeli csúcsokat,
Kruskal módszere
Mindig a legkisebb súlyú olyan élet színezzükkékre, amely még nem alkot kört az eddigikékélekkel.
=⇒Akékélek végig egy erd ˝ot határoznak meg, akkor van kész, ha feszít ˝ofa lesz.
=⇒Az újkékél az eddigi erd ˝o két komponensét fogja összekötni. Kezdetbennkomponens, egy él színezésével eggyel csökken a komponensek száma.
Kruskal módszere
Mindig a legkisebb súlyú olyan élet színezzükkékre, amely még nem alkot kört az eddigikékélekkel.
=⇒Akékélek végig egy erd ˝ot határoznak meg, akkor van kész, ha feszít ˝ofa lesz.
=⇒Az újkékél az eddigi erd ˝o két komponensét fogja összekötni. Kezdetbennkomponens, egy él színezésével eggyel csökken a komponensek száma.
Kruskal módszere
Mindig a legkisebb súlyú olyan élet színezzükkékre, amely még nem alkot kört az eddigikékélekkel.
=⇒Akékélek végig egy erd ˝ot határoznak meg, akkor van kész, ha feszít ˝ofa lesz.
=⇒Az újkékél az eddigi erd ˝o két komponensét fogja összekötni.
Kezdetbennkomponens, egy él színezésével eggyel csökken a komponensek száma.
Kruskal módszere
Mindig a legkisebb súlyú olyan élet színezzükkékre, amely még nem alkot kört az eddigikékélekkel.
=⇒Akékélek végig egy erd ˝ot határoznak meg, akkor van kész, ha feszít ˝ofa lesz.
=⇒Az újkékél az eddigi erd ˝o két komponensét fogja összekötni.
Kezdetbennkomponens, egy él színezésével eggyel csökken a komponensek száma.
Kruskal módszere
procedureKruskal (G: gráf;varF,H: élek halmaza);
begin
F :=∅;H :=E; whileH6=∅do begin
Töröljük aH minimális súlyú(v,w)élét.
HaF ∪ {(v,w)}-ben nincs kör
(azaz av,w pontok különböz ˝o kék fákban vannak), akkor F :=F∪ {(v,w)}
end end
=⇒Ha a(v,w)él kört eredményez, akkorpirosél, ha pedig nem, akkorkékél.