Gráfalgoritmusok: összefüggőség, párosítás páros gráfban
|
|
- Klaudia Dudás
- 7 évvel ezelőtt
- Látták:
Átírás
1 Gráfalgoritmusok: összefüggőség, párosítás páros gráfban Horváth Gyula
2 1. Elvágópontok és hidak 1.1. definíció. Egy G = (V, E) összefüggő irányítatlan gráf p V pontját elvágópontnak nevezzük, ha p-t (és a hozzá kapcsolódó minden élet) törölve, a gráf nem lesz összefüggő Elvágópontok Legyen G = (V, E) irányítatlan gráf. Feladat: határozzuk meg G mindazon pontját, amelyek benne vannak legalább egy körben! 1.2. Állítás. Irányítatlan gráf bármely mélységi bejárása esetén minden él vagy faél, vagy visszaél Állítás. Egy G = (V,E) irányítatlan gráf p V pontja akkor és csak akkor van körben, ha van olyan u V és v V pont, hogy p = u vagy u leszármazottja p-nek, és (u,v) visszaél G valamely MFF mélységi feszítőfájában.
3 Legyen G = (V, E) irányítatlan gráf, és tekintsük egy r-gyökerű MFF mélységi feszítőfáját. Legyen D(p) a p elérési ideje a mélségi bejárás során. Definiáljuk az L : V N függvényt a következőképpen: r q p u 1. ábra. L(p) = min { D(p) D(q) : van olyan u leszármazottja p-nek, hogy u q visszaél
4 1.4. Állítás. Az L függvény kiszámítható az élek számával arányos időben (O(E)) a mélységi bejárás során. D(p) L(p) = min D(q) : p q visszaél p q L(q) : p q faél r q p q u 2. ábra.
5 1 void MelyBejar ( i n t p ) { 2 / / Global : G, ido, D, Szin, Apa, L 3 D[ p]= ido ++; 4 L [ p]= ido ; 5 Szin [ p]= Szurke ; 6 for ( i n t q :G[ p ] ) 7 i f ( Szin [ q]==feher ) { / / p >q f a é l 8 Apa[ q]=p ; 9 MelyBejar ( q ) ; 0 L [ p]=min ( L [ p ], L [ q ] ) ; 1 } else i f (Apa[ p ]! = q && D[ q] <L [ p ] ) / / visszaél 2 L [ p]=d[ q ] ; 3 } 1.5. Állítás. Irányítatlan gráf bármely p pontja akkor és csak akkor van benne legalább egy körben, ha L(p) < D(p)) vagy p-nek van olyan u fia a mélységi feszítőfában, hogy L(u) D(p) Állítás. Irányítatlan gráf bármely p pontja akkor és csak akkor elvágópont, ha p r és van olyan q fia a mélységi feszítőfában, hogy L(q) D(p)) Állítás. Irányítatlan gráf esetén a mélységi feszítőfa gyökere akkor és csak akkor elvágópont, ha egynél több fia van a feszítőfában.
6 1 void Elvágopntok ( i n t p ) { 2 / / Global : G, ido, D, Szin, L, ElvagoP 3 D[ p]= ido ++; 4 L [ p]= ido ; 5 Szin [ p]= Szurke ; 6 i n t fiuk =0; 7 for ( i n t q :G[ p ] ) 8 i f ( Szin [ q]==feher ) { / / p >q f a é l 9 fiuk ++; 0 Apa[ q]=p ; 1 MelyBejar ( q ) ; 2 L [ p]=min ( L [ p ], L [ q ] ) ; 3 i f (D[ p] >1 && L [ q]>=d[ p ] ) 4 ElvagoP [ p]= true ; 5 } else i f (Apa[ p ]! = q && D[ q] <L [ p ] ) / / visszaél 6 L [ p]=d[ q ] ; 7 8 i f (D[ p]==1 && fiuk >1) 9 ElvagoP [ p]= true ; 0 }
7 1.2. Hidak 1.8. definíció. Egy irányítatlan G = (V,E) gráf (p,q) E éle akkor és csak akkor híd, ha az élet elhagyva a gráf nem lesz összefüggő Állítás. Egy irányítatlan G = (V,E) gráf (p,q) E éle akkor és csak akkor híd, ha nincs benne egyetlen körben sem Állítás. Egy irányítatlan G = (V, E) gráf (p, q) E éle akkor és csak akkor híd, ha valamely mélységi feszítőfa szerint faél, és számított L fügvénnyel teljesül, hogy L(q) = D(q) következmény. Egy gráf minden hídja az élek számával arányos időben kiszámítható.
8 1 / / I r á n y í t a t l a n gráf h i d j a i 2 #include < bits / stdc ++.h> 3 # define maxn using namespace std ; 5 struct El { 6 i n t p, q ; 7 El ( ) { } ; 8 El ( i n t x, i n t y ) { p=x ; q=y ; } 9 } ; 0 i n t n ; / / pontok száma 1 vector <int > G[maxN] ; 2 3 void BeOlvas ( ) { 4 / / Global : n,g 5 i n t m, p, q ; 6 scanf ( "%d %d", &n,&m) ; 7 for ( i n t i =0; i <m; i ++){ 8 scanf ( "%d %d", &p,&q ) ; 9 G[ p ]. push_back ( q ) ; 0 G[ q ]. push_back ( p ) ; 1 } 2 }
9 3 enum Paletta { Feher, Szurke, Fekete } ; 4 Paletta Szin [maxn] ; 5 i n t D[maxN] ; 6 i n t L [maxn] ; 7 i n t Apa[maxN] ; 8 vector <El > Hidak ; 9 i n t ido ; 0 1 void MelyBejar ( i n t p ) { 2 / / Global : G, ido, D, Szin, L, Hidak 3 D[ p]=++ ido ; 4 L [ p]= ido ; 5 Szin [ p]= Szurke ; 6 for ( i n t q :G[ p ] ) 7 i f ( Szin [ q]==feher ) { / / p >q f a é l 8 Apa[ q]=p ; 9 MelyBejar ( q ) ; 0 L [ p]=min ( L [ p ], L [ q ] ) ; 1 i f ( L [ q]==d[ q ] ) 2 Hidak. push_back ( El ( p, q ) ) ; 3 } else i f (Apa[ p ]! = q && D[ q] <L [ p ] ) / / visszaél 4 L [ p]=d[ q ] ; 5 }
10 6 i n t main ( ) { 7 BeOlvas ( ) ; 8 ido =0; 9 for ( i n t p=1;p<=n ; p++) Szin [ p]= Feher ; 0 for ( i n t p=1;p<=n ; p++) 1 i f ( Szin [ p]==feher ) 2 MelyBejar ( p ) ; 3 4 p r i n t f ( "%d \ n", Hidak. size ( ) ) ; 5 for ( El e : Hidak ) 6 p r i n t f ( "%d %d \ n", e. p, e. q ) ; 7 }
11 2. Kétszeresen összefüggő komponensek 2.1. definíció. Azt mondjuk, hogy egy G = (V, E) irányítatlan gráf kétszeresen összefüggő, ha V > 1, összefüggő és bármely élét törölve a gráf továbbra is összefüggő marad Állítás. Egy G = (V,E) irányítatlan gráf akkor és csak akkor kétszeresen összefüggő, ha verv > 1 vagy bármely éle benne van egy körben ábra.
12 Példa bemenet és kimenet bemenet kimenet
13 Belátható, hogy a kétszeresen összefüggő komponenseket úgy kapjuk, hogy töröljük a gráf élei közül a hidakat. 1 / / I r á n y í t a t l a n gráf kétszeresen összefüggő ( biconnected ) komponensek 2 #include < bits / stdc ++.h> 3 # define maxn using namespace std ; 5 struct El { 6 i n t p, q ; 7 El ( ) { } ; 8 El ( i n t x, i n t y ) { p=x ; q=y ; } 9 } ; 0 i n t n ; / / pontok száma 1 vector <int > G[maxN] ; 2 void BeOlvas ( ) ; 3 4 enum Paletta { Feher, Szurke, Fekete } ; 5 Paletta Szin [maxn] ; 6 i n t D[maxN] ; 7 i n t L [maxn] ; 8 i n t Apa[maxN] ; 9 stack <El > V; 0 vector <vector <El >> H; 1 i n t ido ;
14 2 void MelyBejar ( i n t p ) { 3 / / Global : G, ido, D, Szin, L, V,H 4 D[ p]=++ ido ; 5 L [ p]= ido ; 6 Szin [ p]= Szurke ; 7 for ( i n t q :G[ p ] ) { 8 i f ( Szin [ q]==feher ) { / / p >q f a é l 9 V. push ( El ( p, q ) ) ; 0 Apa[ q]=p ; 1 MelyBejar ( q ) ; 2 L [ p]=min ( L [ p ], L [ q ] ) ; 3 i f ( L [ q]>=d[ p ] ) { / / t a l á l t u n k egy komponenst 4 i f (V. top ( ). p==p && V. top ( ). q==q ) { / / p q híd 5 V. pop ( ) ; 6 } else { 7 El pq ; 8 vector <El > Hp; 9 do{ 0 pq=v. top ( ) ; V. pop ( ) ; 1 Hp. push_back ( pq ) ; 2 } while ( pq. p!=p pq. q!=q ) ; 3 H. push_back (Hp ) ; 4 } 5 }
15 6 } else i f ( q!=apa[ p ] && Szin [ q]==szurke ) { / / p >q visszaél 7 L [ p]=min ( L [ p ],D[ q ] ) ; 8 V. push ( El ( p, q ) ) ; 9 } 0 } 1 Szin [ p]= Fekete ; 2 }
16 3 void Komponensek ( ) { 4 / / global : G, H 5 for ( i n t p=1; p<=n ; p++) Szin [ p]= Feher ; 6 ido =0; 7 for ( i n t p=1; p<=n ; p++) 8 i f ( Szin [ p]==feher ) MelyBejar ( p ) ; 9 vector <El > Hp; 0 / / a veremben maradt komponens k i í r á s a 1 while (V. size ( ) > 0 ) { 2 El pq=v. top ( ) ; V. pop ( ) ; 3 Hp. push_back ( pq ) ; 4 } 5 i f (Hp. size () >0) H. push_back (Hp ) ; 6 }
17 7 i n t main ( ) { 8 ios_base : : sync_with_stdio ( false ) ; 9 cin. t i e (NULL) ; 0 BeOlvas ( ) ; 1 Komponensek ( ) ; 2 cout<<h. size () < < endl ; 3 for ( vector <El > komp: H) { 4 for ( El e : komp) 5 cout<<e. p<<" "<<e. q ; 6 cout <<endl ; 7 } 8 } 9 void BeOlvas ( ) { 0 / / Global : n,g 1 i n t m, p, q ; 2 cin >>n>>m; 3 for ( i n t i =0; i <m; i ++){ 4 cin >>p>>q ; 5 G[ p ]. push_back ( q ) ; 6 G[ q ]. push_back ( p ) ; 7 } 8 }
18 3. Erősen összefüggő komponensek 3.1. Feladat: Iskolahálózat (IOI96) Néhány iskola számítógépes hálózatba van kötve. Az iskolák a szabadon terjeszthető programok elosztására megállapodást kötöttek: minden iskola egy listát vezet azokról az iskolákról ("címzett iskolákról"), amelyek számára a programokat továbbküldi. Megjegyzés: ha B iskola szerepel az A iskola terjesztési listáján, akkor A nem feltétlenül szerepel B terjesztési listáján. Írjon programot, amely meghatározza azt a legkisebb számot, ahány iskolához egy új programot el kell juttatni ahhoz, hogy - a megállapodás alapján, a hálózaton keresztül terjesztve - végül minden iskolába eljusson. Bemenet A bementi állomány első sora egy egész számot, a hálózatba kapcsolt iskolák n; számát tartalmazza (2 n 1000). Az iskolákat az elsoő n pozitív egész számmal azonosítjuk. A következő n sor mindegyike egy-egy terjesztési listát ír le. Az i+1-edik sor az i-edik iskola terjesztési listáján szereplő iskolák azonosítóit tartalmazza. Minden lista végén egy 0 szám áll. Az üres lista csak egy 0 számból áll. Kimenet A kimenti állomány első sorába azt a legkisebb m számot kell írni, ahány iskolához egy új programot el kell juttatni ahhoz, hogy - a megállapodás alapján, a hálózaton keresztül terjesztve - végül minden iskolába eljusson. A második sor pontosan m egész számot tartalmazzon egy-egy szóközzel elválasztva, azon iskolák sorszámait, ahova kezdetben el kell juttatni az új programot. Több megoldás esetén bármelyik megadható.
19 Példa bemenet és kimenet bemenet kimenet 2 1 5
20 Elvi megoldás Legyen G = (V,E) az iskolahálózatot leíró irányított gráf, tehát V = {1,...,n} és (p,q) E akkor és csak akkor, ha a p iskola terjesztési listájában szerepel q. A megoldás egy olyan D V, amelyre teljesül: ( q V )( p D)(p q) A legkisebb elemszámú ilyen D halmazt keressük. A megoldást lépésenként építhetjük: Adott p pontra jelölje Eler(p) a p pontból elérhető pontok halmazát: D := /0; DbolElert := /0; p V p / DbolElert { D := D Eler(p) {p} DbolElert := DbolElert Eler(p) } Eler(p) = {q V : p q} Az algoritmus futási ideje legrosszabb esetben O(n 3 ). Megmutatjuk, hogy lényegesen gyorsabban is lehet számítani.
21 ábra. A hálózat gráfja
22 Soroljuk egy osztályba azokat a pontokat, amelyek egymásból elérhetők, jelölje ezt az eqvivalencia relációt. Tehát p q akkor és csak akkor, ha p q és q p. A p q reláció nyilvánvalóan eqvivalencia-reláció. Jelölje [p] a p pontot tartalmazó eqvivalencia-osztályt, tehát minden olyan komponensből kell egy-egy pontot választani, amely komponensbe nem vezet él a [p] = {q : p q és q p} A [p] halmazokat a gráf erősen összefüggő komponenseinek nevezzük. Tekintsük azt a gráfot, amelynek pontjai a G gráf erősen összefüggő komponensei, és [p] [q] akkor és csak akkor él, ha van olyan u [p] és van olyan v [q] hogy u v él az eredeti G gráfban. Ezt a gráfot G komponens-gráfjának nevezzük. Nyilvánvaló, hogy a komponens-gráf körmentes. A megoldás kiolvasható a komponens-gráfból: ábra. Erősen összefüggő komponensek
23 ábra. Komponens-gráf
24 komponens-gráfban. A feladat megoldásához nem kell feltétlenül előállítani a komponens-gráfot. Tegyük fel, hogy a G gráfnak k komponense van (ha k=1, akkor a gráfot erősen össefüggőnek mondjuk). Végezzünk egy mélységi bejárást, és legyenek p 1,..., p k az egyes komponensek azon elemei, amelyeket elsőnek érjük el a mélységi bejárás során. Ezeket a pontokat a komponens ősapjának nevezzük. Rakjuk sorba a gráf pontjait úgy, hogy amikor a mélységi bejárás során a pontot feketére színezzük, akkor a pontot a sor elejére rakjuk. Ebben a sorrendben az ősapák olyan sorrendben lesznek, hogy ha van p i p j út, akkor p i előbb szerepel a sorban, mint p j. Tehát a sorban az első pont olyan ősapa, amely komponense 0-befokú. Vegyük be ezt a megoldáshalmazbe, majd fessük be a belőle elérhető pontokat. Így az első be nem festett pont ismet egy olyan ősapa, amelynek komponense 0-befokú. Folytatva a beválasztás, befestés eljárást, amíg minden pontot be nem festettünk, megkapjuk a megoldást. Ez az algoritmus az élek számával arányos futási idejű lesz.
25 1 vector <int > G[maxN] ; 2 3 enum Paletta { Feher, Szurke, Fekete } ; 4 i n t T [maxn] ; 5 Paletta Szin [maxn] ; 6 i n t n, nn ; 7 8 void MelyBejar1 ( i n t p ) { 9 Szin [ p]= Szurke ; 0 for ( i n t q :G[ p ] ) 1 i f ( Szin [ q]==feher ) 2 MelyBejar1 ( q ) ; 3 T [ nn ]=p ; 4 } 5 void MelyBejar2 ( i n t p ) { 6 Szin [ p]= Szurke ; 7 for ( i n t q :G[ p ] ) 8 i f ( Szin [ q]==feher ) 9 MelyBejar2 ( q ) ; 0 } 1 void Beolvas ( ) { }
26 2 i n t main ( ) { 3 Beolvas ( ) ; 4 for ( i n t i =1; i <=n ; i ++) Szin [ i ]= Feher ; 5 nn=n ; 6 for ( i n t x=1;x<=n ; x++) 7 i f ( Szin [ x]==feher ) 8 MelyBejar1 ( x ) ; 9 for ( i n t i =1; i <=n ; i ++) Szin [ i ]= Feher ; 0 vector <int > mego; 1 for ( i n t i =1; i <=n ; i ++){ 2 i n t x=t [ i ] ; 3 i f ( Szin [ x]==feher ) { 4 mego. push_back ( x ) ; 5 MelyBejar2 ( x ) ; 6 } 7 } 8 cout<<mego. size () < < endl ; 9 for ( i n t x :mego) 0 cout<<x<<" " ; 1 cout <<endl ; 2 return 0; 3 }
27 Ha elő kell állítani az erősen összefüggő pomponenseket, akkor az előző algoritmust annyiban kell módosítani, hogy a festés helyett a transzponált gráfban az eléhető pontok kerülnek egy-egy komponensbe. 1 / / I r á n y í t o t t gráf erősen összefüggő komponensei 2 #include < bits / stdc ++.h> 3 # define maxn using namespace std ; 5 struct El { 6 i n t p, q ; 7 El ( ) { } ; 8 El ( i n t x, i n t y ) { p=x ; q=y ; } 9 } ; 0 i n t n ; / / pontok száma 1 i n t ido ; 2 vector <int > G[maxN] ; 3 vector <int > Gt [maxn] ; / / a transzponált gráf
28 4 void BeOlvas ( ) { 5 / / Global : n,g 6 i n t m, p, q ; 7 cin >>n>>m; 8 for ( i n t i =0; i <m; i ++){ 9 cin >>p>>q ; 0 G[ p ]. push_back ( q ) ; 1 Gt [ q ]. push_back ( p ) ; 2 } 3 } 4 enum Paletta { Feher, Szurke, Fekete } ; 5 Paletta Szin [maxn] ; 6 i n t T [maxn] ; 7 vector <vector <int >> H;
29 8 void MelyBejar ( i n t p ) { 9 / / Global : G, ido, D, Szin 0 Szin [ p]= Szurke ; 1 for ( i n t q :G[ p ] ) 2 i f ( Szin [ q]==feher ) 3 MelyBejar ( q ) ; 4 T [ ido ++]=p ; 5 } 6 vector <int > Hp; 7 void MelyBejarT ( i n t p ) { 8 / / Global : Gt, Szin, Hp 9 Hp. push_back ( p ) ; 0 Szin [ p]= Fekete ; 1 for ( i n t q : Gt [ p ] ) 2 i f ( Szin [ q]==szurke ) 3 MelyBejarT ( q ) ; 4 }
30 5 i n t main ( ) { 6 BeOlvas ( ) ; 7 for ( i n t p=1; p<=n ; p++) Szin [ p]= Feher ; 8 ido =1; 9 for ( i n t p=1; p<=n ; p++) 0 i f ( Szin [ p]==feher ) MelyBejar ( p ) ; 1 for ( i n t i =n ; i >0; i ){ 2 i f ( Szin [ T [ i ]]== Szurke ) { 3 Hp. clear ( ) ; 4 MelyBejarT ( T [ i ] ) ; 5 H. push_back (Hp ) ; 6 } 7 } 8 cout<<h. size () < < endl ; 9 for ( vector <int > h : H) { 0 for ( i n t x : h ) 1 cout<<x<< " " ; 2 cout <<endl ; 3 } 4 return 0; 5 }
31 4. Párosítás páros gráfban 4.1. definíció. A G = (V, E) irányítatlan gráfot páros gráfnak nevezzük, ha a V ponthalmaz felbontható két diszjunkt A és B részhalmazra úgy, hogy bármely (u,v) E él esetén vagy u A és v B, vagy u B és v A definíció. A G = (V, E) irányítatlan páros gráf esetén egy P E élhalmazt párosításnak nevezünk, ha bármely két P-beli élnek nincs közös pontja.
32 4.1. Maximális párosítás: magyar módszer Legyen P egy párosítása a G = (V,E) páros gráfnak, ahol A + B = V. Azt mondjuk, hogy egy p V pont párosított, ha valamely q pontra (p,q) P. Az a 0,b 1,a 1,...,b k,a k,b k+1 pontsorozatot növelő útnak nevezzük, ha az alábbiak teljesülnek. 1. a 0 és b k+1 nem párosított és a 0 A és b k+1 B vagy a 0 B és b k+1 A 2. (a i,b i ) P; i = 1,...,k 3. (a i,b i+1 ) E; i = 0,...,k b1 b2 b3 b4 a0 a1 a2 a3 7. ábra. Növelő út Nyilvánvaló, hogy ha a fenti pontsorozat növelőút, akkor a P {(a i,b i ) : i = 1,...,k} {(a i,b i+1 ) : i = 1,...,k + 1} is párosítás és eggyel több párt tartalmaz, mint P. A megyar módszer (Kőnig Dénes és Egervári Károly munkája alapján) olyan algoritmus maximális párosítás előállításáa, amely növelő utak keresésén alapszik. Az algoritmus helyességét az alábbi állítás bizonyítja Állítás. Legyen P egy olyan párosítása a G = (V,E) páros gráfnak, hogy nincs növelő út a gráfban. Ekkor P maximális párosítás.
33 1 #include < bits / stdc ++.h> 2 # define maxn using namespace std ; 4 5 vector <int > G[maxN] ; 6 bool Nemvolt [maxn] ; 7 i n t Par [maxn] ; 8 i n t n ;
34 9 bool NoveloUtKeres ( i n t a ) { 0 / / Globalis : G, Par, Nemvolt 1 Nemvolt [ a]= false ; 2 for ( i n t b :G[ a ] ) { 3 i f ( Nemvolt [ b ] ) { 4 i f ( Par [ b]==b ) { 5 Par [ a]=b ; Par [ b]=a ; 6 return true ; 7 } else { 8 Nemvolt [ b]= false ; 9 i f ( NoveloUtKeres ( Par [ b ] ) ) { 0 Par [ a]=b ; Par [ b]=a ; 1 return true ; 2 } 3 } 4 } 5 } 6 return false ; 7 }
35 8 i n t MagyarModszer ( ) { 9 / / A+B p r a ríció meghatározása 0 bool A[maxN] ; 1 queue<int > S; 2 for ( i n t x=1;x<=n ; x++){ 3 A[ x]= false ; 4 Nemvolt [ x]= true ; 5 } 6 A[1]= true ; Nemvolt [1]= false ; 7 S. push ( 1 ) ; 8 while (! S. empty ( ) ) { 9 i n t x=s. front ( ) ; S. pop ( ) ; 0 for ( i n t y :G[ x ] ) 1 i f ( Nemvolt [ y ] ) { 2 Nemvolt [ y]= false ; 3 A[ y ] =!A[ x ] ; 4 } 5 } 6 i n t parokszama =0; 7 for ( i n t i =1; i <=n ; i ++) Par [ i ]= i ;
36 8 / / Növelo utak keresése 9 for ( i n t a=1;a<=n ; a++) 0 i f (A[ a ] && Par [ a]==a ) { 1 for ( i n t x=1;x<=n ; x++) Nemvolt [ x]= true ; 2 i f ( NoveloUtKeres ( a ) ) 3 parokszama++; 4 } 5 return parokszama ; 6 }
37 7 void Beolvas ( ) { 8 i n t m, x, y ; 9 cin >>n>>m; 0 for ( i n t i =1; i <=m; i ++){ 1 cin >>x>>y ; 2 G[ x ]. push_back ( y ) ; 3 G[ y ]. push_back ( x ) ; 4 } 5 } 6 i n t main ( ) { 7 Beolvas ( ) ; 8 i n t m=magyarmodszer ( ) ; 9 cout <<m<<endl ; 0 for ( i n t a=1;a<=n ; a++) 1 i f ( Par [ a ]! = a ) { 2 cout<<a<<" "<<Par [ a]<<endl ; 3 Par [ Par [ a ] ] = Par [ a ] ; 4 } 5 return 0; 6 }
38 4.2. Minimális lefedő halmazok Tekintsünk egy G = (V,E) páros gráfot, ahol V = A+B és legyen P egy maximális párosítása G-nek definíció. Egy p 1,..., p k utat alternáló útnak vezünk, ha az egymást követő élek közül az egyik P-beli, a másik nem P-beli. A gráf éleit irányítsuk úgy, hogy u v ha u A és (u,v) nem párosított, vagy u B és (u,v) párosított. Jelölje A(x) azt a logikai függvényt, amleyre A(x) akkor és csak akkor igaz, ha x A. Ha az x pont párosított, akkor Par(x) jelölje x párját, egyébként legyen Par(x) = x Definiáljuk az L logikai függvényt az V ponthalmazon úgy, hogy L(x) akkor és csak akkor igaz, ha van olyan a A pont, hogy x elérhető a-ból alternáló úton. Ha L(x) igaz, akkor azt mondjuk, hohy x L-cimkézett. Soroljuk a gráf pontjait az A1, A2, A3, B1, B2, B3 diszjunk részhalmazokba az alábbiak szerint. A1(x) = A(x) Par(x) = x: nem párosított A-beli pontok halmaza A2(x) = A(x) Par(x) x L(x): párosított A-beli L-címkézett pontok halmaza A3(x) = A(x) Par(x) x!l(x): párosított A-beli nem L-címkézett pontok halmaza B1(x) =!A(x) Par(x) = x: nem párosított B-beli pontok halmaza B2(x) =!A(x) Par(x) x L(x): párosított B-beli L-címkézett pontok halmaza B3(x) =!A(x) Par(x) x!l(x): párosított B-beli nem L-címkézett pontok halmaza
39 A3 B3 A2 B2 A1 B1 8. ábra. Pontok osztályozása (maximális) párosítás alapján.
40 4.3. Minimális lefedő ponthalmaz 4.5. definíció. Egy G = (V, E) irányítatlan gráf F V ponthalmazát lefedő ponthalmaznak nevezzük, ha bármely (u,v) E élre u F vagy v F Állítás. A3 B2 halmaz minimális feledő ponthalmaz Állítás. A minimális feledő ponthalmaz elemszáma megegyezik a maximális párosítás elemszámával Maximális független ponthalmaz 4.8. definíció. Egy G = (V, E) irányítatlan gráf F V ponthalmazát független ponthalmaznak nevezzük, ha bármely (u,v) E élre u / F vagy v / F Állítás. A1 A2 B1 B3 maximális független ponthalmaz Minimális lefedő élhalmaz definíció. Egy G = (V, E) irányítatlan gráf F E élhalmazát lefedő élhalmaznak nevezzük, ha bármely u V pontra van olyan v V hogy (u,v) F Állítás. Párosító élek + egy-egy A1 B2 és B1 A3 él minimális lefedő élhalmazt alkot.
41 1 #include < bits / stdc ++.h> 2 # define maxn using namespace std ; 4 5 vector <int > G[maxN] ; 6 bool Nemvolt [maxn] ; 7 i n t Par [maxn] ; 8 bool A[maxN] ; 9 bool L [maxn] ; 0 bool C[maxN] ; 1 i n t n ;
42 2 bool NoveloUtKeres ( i n t a ) { 3 / / Globalis : G, Par, Nemvolt 4 Nemvolt [ a]= false ; 5 for ( i n t b :G[ a ] ) { 6 i f ( Nemvolt [ b ] ) { 7 i f ( Par [ b]==b ) { 8 Par [ a]=b ; Par [ b]=a ; 9 return true ; 0 } else { 1 Nemvolt [ b]= false ; 2 i f ( NoveloUtKeres ( Par [ b ] ) ) { 3 Par [ a]=b ; Par [ b]=a ; 4 return true ; 5 } 6 } 7 } 8 } 9 return false ; 0 }
43 1 i n t MagyarModszer ( ) { 2 / / A+B p r a ríció meghatározása 3 queue<int > S; 4 for ( i n t x=1;x<=n ; x++){ 5 A[ x]= false ; 6 Nemvolt [ x]= true ; 7 } 8 A[1]= true ; Nemvolt [1]= false ; 9 S. push ( 1 ) ; 0 while (! S. empty ( ) ) { 1 i n t x=s. front ( ) ; S. pop ( ) ; 2 for ( i n t y :G[ x ] ) 3 i f ( Nemvolt [ y ] ) { 4 Nemvolt [ y]= false ; 5 A[ y ] =!A[ x ] ; 6 } 7 } 8 i n t parokszama =0; 9 for ( i n t i =1; i <=n ; i ++) Par [ i ]= i ;
44 0 / / Növelo utak keresése 1 for ( i n t a=1;a<=n ; a++) 2 i f (A[ a ] && Par [ a]==a ) { 3 for ( i n t x=1;x<=n ; x++) Nemvolt [ x]= true ; 4 i f ( NoveloUtKeres ( a ) ) 5 parokszama++; 6 } 7 return parokszama ; 8 } 9 0 void AltBejar ( i n t a ) { 1 L [ a]= true ; 2 Nemvolt [ a]= false ; 3 for ( i n t b :G[ a ] ) i f ( Nemvolt [ b ] && Par [ b ]! = b ) { 4 L [ b]= true ; Nemvolt [ b]= false ; 5 AltBejar ( Par [ b ] ) ; 6 } 7 }
45 8 void Beolvas ( ) { 9 i n t m, x, y ; 0 cin >>n>>m; 1 for ( i n t i =1; i <=m; i ++){ 2 cin >>x>>y ; 3 G[ x ]. push_back ( y ) ; 4 G[ y ]. push_back ( x ) ; 5 } 6 }
46 7 i n t main ( ) { 8 Beolvas ( ) ; 9 i n t m=magyarmodszer ( ) ; 0 cout <<m<<endl ; 1 / / minimális lefedő élhalmaz 2 for ( i n t a=1;a<=n ; a++) 3 i f ( Par [ a ]! = a ) { 4 cout<<a<<" "<<Par [ a]<<endl ; 5 Par [ Par [ a ] ] = Par [ a ] ; 6 } 7 / / minimális lefedő ponthalmaz 8 for ( i n t x=1;x<=n ; x++){ 9 Nemvolt [ x]= true ; 0 L [ x ] =!A[ x ] ; 1 C[ x]= false ; 2 } 3 for ( i n t x=1;x<=n ; x++) 4 i f (!A[ x ] ) AltBejar ( x ) ; 5 for ( i n t x=1;x<=n ; x++) 6 C[ x]= A[ x ] &&! L [ x ]!A[ x ] && L [ x ] ; 7 8 return 0; 9 }
Neumann János Tehetséggondozó Program Gráfalgoritmusok II.
Neumann János Tehetséggondozó Program Gráfalgoritmusok II. Horváth Gyula horvath@inf.elte.hu 1. A szélességi bejárás alkalmazásai. Nyilvánvaló, hogy S(0) = {r}. Jelölés: D(p) = δ(r, p) Nyilvánvaló, hogy
Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 7. Gráfalgoritmusok II. 7.1. Feladat: Útcaseprő A város utcáinak takarítását úgy szervezték
Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}
Mélységi keresés Ez az algoritmus a gráf pontjait járja be, eredményképpen egy mélységi feszítőerdőt ad vissza az Apa függvény által. A pontok bejártságát színekkel kezeljük, fehér= érintetlen, szürke=meg-
Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:
Gráfok, definíciók Irányítatlan gráf: G = (V,E), ahol E rendezetlen (a,b),a,b V párok halmaza. Irányított gráf: G = (V,E) E rendezett (a,b) párok halmaza; E V V. Címkézett (súlyozott) gráf: G = (V,E,C)
Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}
Példa Adott egy n n-es sakktábla. Az (1,1) mezőn áll egy huszár. Határozzuk meg eljuthat -e az (u,v) mezőre, ha igen adjunk meg egy legkevesebb lépésből álló utat! Adjunk algoritmust, ami megoldja a feladatot.
STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók
STL Elsődleges komponensek: Tárolók Algoritmusok Bejárók Másodlagos komponensek: Függvény objektumok Adapterek Allokátorok (helyfoglalók) Tulajdonságok Tárolók: Vektor (vector) Lista (list) Halmaz (set)
Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.
Algoritmuselmélet Gráfok megadása, szélességi bejárás, összefüggőség, párosítás Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 2. előadás
Geometriai algoritmusok
Geometriai algoritmusok Horváth Gyula horvath@inf.elte.hu Számos olyan gyakorlati számítási probléma van, amely megoldható olyan geometriai modellben, amelyben csak egyszerű objektumok, pontok, egyenesek,
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2017. ősz 1. Diszkrét matematika 2.C szakirány 2. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.
30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK
30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK A gráfos alkalmazások között is találkozunk olyan problémákkal, amelyeket megoldását a részekre bontott gráfon határozzuk meg, majd ezeket alkalmas módon teljes megoldássá
Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.
Algoritmuselmélet Mélységi keresés és alkalmazásai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 9. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet
Diszkrét matematika 2.
Diszkrét matematika 2. 2018. szeptember 21. 1. Diszkrét matematika 2. 2. előadás Fancsali Szabolcs Levente nudniq@cs.elte.hu www.cs.elte.hu/ nudniq Komputeralgebra Tanszék 2018. szeptember 21. Gráfelmélet
Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:
Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra: C(T ) = (u,v) T c(u,v) Az F = (V,T) gráf minimális feszitőfája G-nek,
Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}
Példa Adott egy sziget ahol 42 kaméleon lakik. A kaméleonok három színt vehetnek fel piros, kék és zöld. Ha két különböző színű kaméleon találkozik, akkor megijednek és mindkettő átváltoztatja a színét
INFORMATIKA tétel 2019
INFORMATIKA tétel 2019 ELIGAZÍTÁS: 1 pont hivatalból; Az 1-4 feladatokban (a pszeudokód programrészletekben): (1) a kiír \n utasítás újsorba ugratja a képernyőn a kurzort; (2) a / operátor osztási hányadost
Diszkrét matematika II. gyakorlat
Diszkrét matematika II. gyakorlat 9. Gyakorlat Szakács Nóra Helyettesít: Bogya Norbert Bolyai Intézet 2013. április 11. Bogya Norbert (Bolyai Intézet) Diszkrét matematika II. gyakorlat 2013. április 11.
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2015. ősz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2015.
Diszkrét matematika 2. estis képzés
Diszkrét matematika 2. estis képzés 2016. tavasz 1. Diszkrét matematika 2. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék
Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma
Készítette: Laczik Sándor János Gráfelmélet I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma Definíció: a G=(V,E) párt egyszerű gráfnak nevezzük, (V elemeit a gráf csúcsainak/pontjainak,e elemeit
Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: Név: vp.05@hotmail.com Kurzuskód:
Szerző Név: Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: vp.05@hotmail.com Kurzuskód: IP-08PAEG/27 Gyakorlatvezető neve: Kőhegyi János Feladatsorszám: 20 1 Tartalom Szerző... 1 Felhasználói dokumentáció...
Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:
Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra: C(T ) = (u,v) T c(u,v) Az F = (V,T) gráf minimális feszitőfája G-nek,
Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]
Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2015. tavasz 1. Diszkrét matematika 2.C szakirány 1. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu Komputeralgebra Tanszék 2015. tavasz Gráfelmélet Diszkrét
Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu. Gráfos feladatok.. Feladat: Kiút keresés labirintusban. Egy négyzetrácsos hálózattal
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2017. tavasz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.
Diszkrét matematika 2. estis képzés
Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék
... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)
6. Fabejáró algoritmusok Fa bejárásán olyan algoritmust értünk, amelynek bemenete egy F fa és egy M művelet, és az algoritmus adott sorrendben pontosan egyszer végrehajtja az M műveletet a fa pontjaiban
117. AA Megoldó Alfréd AA 117.
Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus
GRÁFELMÉLET 7. előadás Javító utak, javító utak keresése, Edmonds-algoritmus Definíció: egy P utat javító útnak nevezünk egy M párosításra nézve, ha az út páratlan hosszú, kezdő- és végpontjai nem párosítottak,
Elmaradó óra. Az F = (V,T) gráf minimális feszitőfája G-nek, ha. F feszitőfája G-nek, és. C(T) minimális
Elmaradó óra A jövő heti, november 0-dikei óra elmarad. Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra: C(T ) = (u,v)
Diszkrét matematika 1. estis képzés
Diszkrét matematika 1. estis képzés 2019. tavasz 1. Diszkrét matematika 1. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján
Diszkrét matematika 2.
Diszkrét matematika 2. Mérai László előadása alapján Készítette: Nagy Krisztián 1. előadás Gráfok halmaza, gráf, ahol a csúcsok halmaza, az élek illesztkedés reláció: illesztkedik az élre, ha ( -él illesztkedik
1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás
Preorder ejárás Fa bejárásán olyan algoritmust értünk, amelynek bemenete egy F fa és egy M művelet, és az algoritmus adott sorrendben pontosan egyszer végrehajtja az M műveletet a fa pontjaiban lévő adatokra.
Diszkrét matematika 2. estis képzés
Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 10. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék
INFORMATIKA javítókulcs 2016
INFORMATIKA javítókulcs 2016 ELMÉLETI TÉTEL: Járd körbe a tömb fogalmát (Pascal vagy C/C++): definíció, egy-, két-, több-dimenziós tömbök, kezdőértékadás definíciókor, tömb típusú paraméterek átadása alprogramoknak.
Adatszerkezetek II. 2. előadás
Adatszerkezetek II. 2. előadás Gráfok bejárása A gráf bejárása = minden elem feldolgozása Probléma: Lineáris elrendezésű sokaság (sorozat) bejárása könnyű, egyetlen ciklussal elvégezhető. Hálós struktúra
Algoritmusok bonyolultsága
Algoritmusok bonyolultsága 5. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 27 Gazdaságos faváz Kruskal-algoritmus Joseph Kruskal (1928 2010) Legyen V = {v 1, v 2,..., v n }, E = {e 1, e 2,...,
Gráfok bejárása. Szlávi Péter, Zsakó László: Gráfok II :17
Gráfok 2. előadás Gráfok bejárása A gráf bejárása = minden elem feldolgozása Probléma: Lineáris elrendezésű sokaság (sorozat) bejárása könnyű, egyetlen ciklussal elvégezhető. Hálós struktúra bejárása nem
Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y.
Algoritmuselmélet Bonyolultságelmélet Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 12. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet
Algoritmuselmélet 11. előadás
Algoritmuselmélet 11. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Március 26. ALGORITMUSELMÉLET 11. ELŐADÁS 1 Kruskal
Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.
Legrövidebb utak súlyozott gráfokban A feladat egy súlyozott gráfban egy adott pontból kiinduló legrövidebb utak megkeresése. Az input a súlyozott gráf és a kiindulási s pont. Outputként egy legrövidebb
Felvételi vizsga mintatételsor Informatika írásbeli vizsga
BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív
A számítástudomány alapjai
A számítástudomány alapjai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Legszélesebb utak Katona Gyula Y. (BME SZIT) A számítástudomány
Diszkrét Matematika MSc hallgatók számára 7. Előadás Párosítási tételek Előadó: Hajnal Péter Jegyzetelő: Kovácsházi Anna
Diszkrét Matematika MSc hallgatók számára 7. Előadás Párosítási tételek Előadó: Hajnal Péter Jegyzetelő: Kovácsházi Anna 2010. 10. 18. 2 7. Párosítási tételek.nb 7. Előadás Emlékeztető: Javító út, Javító
Rekurzió. Horváth Gyula. horvath@inf.elte.hu
1. ábra. Rekurzió Horváth Gyula horvath@inf.elte.hu 1. Feladat: Sorbaállítások száma Hány féleképpen lehet sorbaállítani az osztály tanulóit? Bemenet: a tanulók n száma. Kimenet: ahány félekeppen az n
Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.
Legrövidebb utak súlyozott gráfokban A feladat egy súlyozott gráfban egy adott pontból kiinduló legrövidebb utak megkeresése. Az input a súlyozott gráf és a kiindulási s pont. Outputként egy legrövidebb
Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1
Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1 Készítette: Gipsz Jakab Neptun-azonosító: A1B2C3 E-mail: gipszjakab@vilaghalo.hu Kurzuskód: IP-08PAED Gyakorlatvezető
Az optimális megoldást adó algoritmusok
Az optimális megoldást adó algoritmusok shop ütemezés esetén Ebben a fejezetben olyan modellekkel foglalkozunk, amelyekben a munkák több műveletből állnak. Speciálisan shop ütemezési problémákat vizsgálunk.
Gráfalgoritmusok ismétlés ősz
Gráfalgoritmusok ismétlés 2017. ősz Gráfok ábrázolása Egy G = (V, E) gráf ábrázolására alapvetően két módszert szoktak használni: szomszédsági listákat, illetve szomszédsági mátrixot. A G = (V, E) gráf
Tuesday, March 6, 12. Hasító táblázatok
Hasító táblázatok Halmaz adattípus U (kulcsuniverzum) K (aktuális kulcsok) Függvény adattípus U (univerzum) ÉT (értelmezési tartomány) ÉK (érték készlet) Milyen az univerzum? Közvetlen címzésű táblázatok
INFORMATIKA tétel 2018
INFORMATIKA tétel 2018 ELIGAZÍTÁS: 1 pont hivatalból; Az 1-4 feladatokban (a pszeudokód programrészletekben): (1) a kiír \n utasítás újsorba ugratja a képernyőn a kurzort; (2) a minden i = n,1,-1 végezd
Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE motiabt@inf.elte.
Programozási alapismeretek :: beadandó feladat Készítő adatai Név: Molnár Tamás EHA: MOTIABT.ELTE E-mail cím: motiabt@inf.elte.hu Gyakorlatvezető: Horváth László Feladat sorszáma: 23. Felhasználói dokumentáció
Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE
Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE 2015-16 Classic Empire - A turn Based Wargame Classic Empire is a real time, multiplayer, Internet-based game, featuring military, diplomatic, and economic
2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1
2. Rekurzió Egy objektum definícióját rekurzívnak nevezünk, ha a definíció tartalmazza a definiálandó objektumot. Egy P eljárást (vagy függvényt) rekurzívnak nevezünk, ha P utasításrészében előfordul magának
Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése
Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése Készítette: Bognár Gergő Témavezető: Veszprémi Anna Eötvös Loránd Tudományegyetem Informatikai Kar Algoritmusok és Alkalmazásaik Tanszék Budapest,
end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..
A Név: l 2014.04.09 Neptun kód: Gyakorlat vezető: HG BP MN l 1. Adott egy (12 nem nulla értékû elemmel rendelkezõ) 6x7 méretû ritka mátrix hiányos 4+2 soros reprezentációja. SOR: 1 1 2 2 2 3 3 4 4 5 6
Bevezetés a programozásba I.
Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk
1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007
Hálózatok II 2007 1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok 1 Az előadáshoz Előadás: Szerda 17:00 18:30 Gyakorlat: nincs Vizsga írásbeli Honlap: http://people.inf.elte.hu/lukovszki/courses/g/07nwii
Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 12. előadás (Standard Template Library) 2014.05.19. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
Javító és majdnem javító utak
Javító és majdnem javító utak deficites Hall-tétel alapján elméletileg meghatározhatjuk, hogy egy G = (, ; E) páros gráfban mekkora a legnagyobb párosítás mérete. Ehhez azonban első ránézésre az összes
17. előadás: Vektorok a térben
17. előadás: Vektorok a térben Szabó Szilárd A vektor fogalma A mai előadásban n 1 tetszőleges egész szám lehet, de az egyszerűség kedvéért a képletek az n = 2 esetben szerepelnek. Vektorok: rendezett
Gráfelméleti alapfogalmak
1 Gráfelméleti alapfogalmak Gráf (angol graph= rajz): pontokból és vonalakból álló alakzat. pontok a gráf csúcsai, a vonalak a gráf élei. GRÁ Irányítatlan gráf Vegyes gráf Irányított gráf G H Izolált pont
Számítógép hálózatok, osztott rendszerek 2009
Számítógép hálózatok, osztott rendszerek 2009 1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok 1 Az előadáshoz Előadás: Hétfő 10:00 12:00 óra Gyakorlat: Hétfő 14:00-16:00 óra Honlap: http://people.inf.elte.hu/lukovszki/courses/0910nwmsc
1. Alapok. Programozás II
1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph
Bevezetés a programozásba. 9. Előadás: Rekordok
Bevezetés a programozásba 9. Előadás: Rekordok ISMÉTLÉS Függvényhívás #include #include #include #include using using namespace namespace std; std; double double terulet(double
Függvények int, long 1. Adott a mellékelt f alprogram.
Függvények int, long 1. Adott a mellékelt f alprogram. Határozzon meg két különböző természetes értéket az [1,50] intervallumból, amelyeket felvehet az x egész változó, úgy hogy az f(30,x) térítse vissza
Diszkrét Matematika GYAKORLAT, Levelező MSc hallgatók számára. 3. Feladatsor
Diszkrét Matematika GYAKORLAT, Levelező MSc hallgatók számára 3. Feladatsor Gyakorlatvezetõ: Hajnal Péter 2011. november 2-ától 1. Párosítások gráfokban 1.1. Alapok 1. Feladat. (i) Bizonyítsuk be, hogy
Algoritmusok és adatszerkezetek II.
Algoritmusok és adatszerkezetek II. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 3. Kiegyensúlyozott keresőfák A T tulajdonság magasság-egyensúlyozó
Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.
HA 1 Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) HA 2 Halmazok HA 3 Megjegyzések A halmaz, az elem és az eleme fogalmakat nem definiáljuk, hanem alapfogalmaknak
Diszkrét matematika 1. estis képzés
Diszkrét matematika 1. estis képzés 2019. tavasz 1. Diszkrét matematika 1. estis képzés 11. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján
5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.
5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus. Optimalis feszítőfák Egy összefüggő, irányítatlan
Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r
Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. február 18. Minimum és maximumkeresés u s i n g n a m e s p a c e s t d ; i n t main ( ) { c o u t
Körkörös listák. fej. utolsó. utolsó. fej
Körkörös listák fej utolsó fej utolsó Példa. Kiszámolós játék. Körben áll n gyermek. k-asával kiszámoljuk őket. Minden k-adik kilép a körből. Az nyer, aki utolsónak marad. #include using namespace
Bevezetés a programozásba 2
Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/ Vector int int main() { vector v(10); int int sum=0; for for (int i=0;i
Adatszerkezetek II. 1. előadás
Adatszerkezetek II. 1. előadás Gráfok A gráf fogalma: Gráf(P,E): P pontok (csúcsok) és E P P élek halmaza Fogalmak: Irányított gráf : (p 1,p 2 ) E-ből nem következik, hogy (p 2,p 1 ) E Irányítatlan gráf
Programozási módszertan. Mohó algoritmusok
PM-08 p. 1/17 Programozási módszertan Mohó algoritmusok Werner Ágnes Villamosmérnöki és Információs Rendszerek Tanszék e-mail: werner.agnes@virt.uni-pannon.hu PM-08 p. 2/17 Bevezetés Dinamikus programozás
A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának feladatai. INFORMATIKA II. (programozás) kategória
Oktatási Hivatal A 1/18 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának feladatai INFORMATIKA II. (programozás) kategória 1. feladat: K-homogén sorozat ( pont) Azt mondjuk, hogy az
Diszkrét matematika 2. estis képzés
Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 7. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék
22. GRÁFOK ÁBRÁZOLÁSA
22. GRÁFOK ÁBRÁZOLÁSA A megoldandó feladatok, problémák modellezése során sokszor gráfokat alkalmazunk. A gráf fogalmát a matematikából ismertnek vehetjük. A modellezés során a gráfok több változata is
11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.
11. gyakorlat Sturktúrák használata I. Új típus új műveletekkel 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi. typedef struct datum { int ev; int ho; int nap;
Algoritmusok bonyolultsága
Algoritmusok bonyolultsága 9. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 18 Közelítő algoritmusok ládapakolás (bin packing) Adott n tárgy (s i tömeggel) és végtelen sok 1 kapacitású láda
EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF
Összefoglaló Gráfok / EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF Adott a G = (V, E) gráf ahol a V a csomópontok, E az élek halmaza E = {(x, y) x, y V, x y (nincs hurokél) és (x, y) = (y, x)) Jelölések:
Amortizációs költségelemzés
Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük
Formális nyelvek - 9.
Formális nyelvek - 9. Csuhaj Varjú Erzsébet Algoritmusok és Alkalmazásaik Tanszék Informatikai Kar Eötvös Loránd Tudományegyetem H-1117 Budapest Pázmány Péter sétány 1/c E-mail: csuhaj@inf.elte.hu 1 Véges
Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1
C++ I/O Bevezetés Izsó Tamás 2014. február 20. Izsó Tamás C++ I/O / 1 Section 1 Bevezetés Izsó Tamás C++ I/O / 2 Irodalom Izsó Tamás C++ I/O / 3 Paraméter illesztés függvénynév túlterhelés esetén 1 Pontos
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus
Csíkszereda IRT-. kurzus 3. Előadás: A mohó algoritmus 1 Csíkszereda IRT. kurzus Bevezetés Az eddig tanult algoritmus tipúsok nem alkalmazhatók: A valós problémák nem tiszta klasszikus problémák A problémák
Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?
Ugrólisták Ugrólisták Ugrólisták Ugrólisták RSL Insert Example insert(22) with 3 flips 13 8 29 20 10 23 19 11 2 13 22 8 29 20 10 23 19 11 2 Runtime? Ugrólisták Empirical analysis http://www.inf.u-szeged.hu/~tnemeth/alga2/eloadasok/skiplists.pdf
Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1
Halmazok 1 Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 2 A fejezet legfontosabb elemei Halmaz megadási módjai Halmazok közti műveletek (metszet,
Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor
Gráfok 2. Legrövidebb utak, feszítőfák előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor Óbudai Egyetem,Neumann János Informatikai Kar Legrövidebb utak keresése Minimális feszítőfa keresése Gráfok 2
Felhasználó által definiált adattípus
Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési
Programozás C++ -ban 2007/4
Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos
7 7, ,22 13,22 13, ,28
Általános keresőfák 7 7,13 13 13 7 20 7 20,22 13,22 13,22 7 20 25 7 20 25,28 Általános keresőfa Az általános keresőfa olyan absztrakt adatszerkezet, amely fa és minden cellájában nem csak egy (adat), hanem
10. Gráf absztrakt adattípus, gráfok ábrázolása
Gráf absztrakt adattípus, gráfok ábrázolása Definíciók Irányítatlan gráf:g = (V, E) E rendezetlen {a,b,a,b V párok halmaza Irányított gráf:g = (V,E) E rendezett (a,b) párok halmaza; E V V Multigráf: G
ELTE IK Esti képzés tavaszi félév. Tartalom
Diszkrét Matematika 2 vizsgaanyag ELTE IK Esti képzés 2017. tavaszi félév Tartalom 1. Számfogalom bővítése, homomorfizmusok... 2 2. Csoportok... 9 3. Részcsoport... 11 4. Generátum... 14 5. Mellékosztály,
Bevezetés a programozásba. 11. Előadás: Esettanulmány
Bevezetés a programozásba 11. Előadás: Esettanulmány ISMÉTLÉS Függvényhívás #include #include #include #include using using namespace namespace std; std; double double
Totális Unimodularitás és LP dualitás. Tapolcai János
Totális Unimodularitás és LP dualitás Tapolcai János tapolcai@tmit.bme.hu 1 Optimalizálási feladat kezelése NP-nehéz Hatékony megoldás vélhetően nem létezik Jó esetben hatékony algoritmussal közelíteni
XIII. STL. Tároló Bejáró Algoritmus. XIII.1 A vector #include <vector> #include <vector> #include <algorithm> using namespace std;
XIII. STL Tároló Bejáró Algoritmus #include #include using namespace std; vector vect; // a vect adatainak megadása sort(vect.begin(),vect.end()); XIII.1 A vector #include
Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).
Edényrendezés Tegyük fel, hogy a rendezendő H = {a 1,...,a n } halmaz elemei a [0,1) intervallumba eső valós számok. Vegyünk m db vödröt, V [0],...,V [m 1] és osszuk szét a rendezendő halmaz elemeit a
Gráfelméleti feladatok. c f
Gráfelméleti feladatok d e c f a b gráf, csúcsok, élek séta: a, b, c, d, e, c, a, b, f vonal: c, d, e, c, b, a út: f, b, a, e, d (walk, lanţ) (trail, lanţ simplu) (path, lanţ elementar) 1 irányított gráf,
Programozás II. 2. Dr. Iványi Péter
Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c