Körmentes irányított gráfban legrövidebb utak KIG_LEGRÖVIDEBB_ÚT(G,w,s) A G csúcsainak topologikus rendezése EGY_FORRÁS_KEZDŐÉRTÉK(G,s) FOR u csúcsra azok topologikus sorrendjében DO FOR v Adj[u]-ra DO KÖZELIT(u,v,w) (V+E) 2019.05.08. 17:44:49 ADAT-11
Legrövidebb utak minden csúcspárra Szomszédsági w mátrixot alkalmazunk a gráf (hálózat) megadására wij = 0, ha i=j, wij =az irányított (i,j) él hossza, ha i j és (i,j) E wij = , ha i j és (i,j) E Kimenet egy D=(dij) mátrix, amelyben a legrövidebb utak hossza szerepel Megelőzési mátrix =(ij), amelyben az (i,j) elem NIL, ha i=j, vagy nem vezet út i és j között, egyébként pedig a j-t megelőző csúcs valamely az i-ből j-be vezető legrövidebb úton. Megelőzési részgráf Legrövidebb utak fája 2019.05.08. 17:44:49 ADAT-11
Floyd-Warshall algoritmus FLOYD_WARSHALL(W) n sorok_száma[W] D(0) W FOR k 1 TO n DO FOR i 1 TO n DO FOR j 1 TO n DO d(k)ij min(d(k-1)ij,d(k-1)ik+d(k-1)kj) RETURN(D(n)) (n3) (0)ij=NIL, ha i=j vagy wij= (0)ij=i, ha i j és wij< (k)ij= (k-1)ij, ha d(k-1)ij d(k-1)ik+d(k-1)kj (k)ij= (k-1)kj, ha d(k-1)ij >d(k-1)ik+d(k-1)kj 2019.05.08. 17:44:49 ADAT-11
Gráfok tranzitív lezártja Definíció: A G gráf tranzitív lezártja az a G*=(V,E*) gráf, melyre E* ={(i,j): létezik G-ben i-ből j-be út} TRANZITIV_LEZÁRT(G) n V[G] FOR i 1 TO n DO FOR j 1 TO n DO IF i=j vagy (i,j) E[G] THEN t(0)ij 1 ELSE t(0)ij 0 FOR k 1 TO n DO FOR i 1 TO n DO FOR j 1 TO n DO t(k)ij t(k-1)ij (t(k-1)ik t(k-1)kj) RETURN(T(n)) (n3) 2019.05.08. 17:44:49 ADAT-11
Dinamikus programozás Oszd meg és uralkodj Dinamikus programozás Független részproblémákat oldunk meg A részproblémák nem függetlenek (közösek), egyszer oldódnak meg, újabb felhasználásig tárolódnak. A megoldásokat egyesítjük Általában optimalizálásra használjuk, amikor sok megengedett megoldás van A dinamikus programozás lépései Jellemezzük az optimális megoldás szerkezetét Rekurzív módon definiáljuk az optimális megoldás értékét Kiszámítjuk az optimális megoldás értékét alulról felfelé módon A kiszámított információk alapján megszerkesztjük az optimális megoldást 2019.05.08. 17:44:49 ADAT-11
Példa: Mátrixok véges sorozatainak szorzása Definíció: Mátrixok szorzatát teljesen zárójelezettnek nevezzük, ha a szorzat vagy egyetlen mátrixból áll, vagy pedig két, zárójelbe tett teljesen zárójelezett mátrix szorzata Legyenek az A,B, C mátrixok méretei 2x3, 3x4, és 4x5 Számítsuk ki a D=ABC mátrixot. D mérete 2x5 Műveletszám (szorzások száma) két mátrix összeszorzásakor: pqr, ha a méretek pxq és qxr Első módszer: ((AB)C), műveletszám 2x3x4+2x4x5=24+40=64 Második módszer: (A(BC)), műveletszám 3x4x5+2x3x5=60+30=90 2019.05.08. 17:44:49 ADAT-11
Mátrixok véges sorozatainak szorzása (2) Legyenek az összeszorzandó mátrixok: A1,A2, ,An Legyen az Ai mátrix mérete pi-1xpi i=1, ,n Legyen P(n) az n mátrix zárójelezéseinek a száma. P(1)=1 P(2)=P(1)*P(1)=1 P(3)=P(1)*P(2)+P(2)*P(1)=1*1+1*1=2 P(4)=P(1)*P(3)+P(2)*P(2)+P(3)*P(1)=1*2+1*1+2*1=5 P(n)=Cn-1, ahol Cn=(2n alatt n)/(n+1) (Catalan számok, exponenciális a növekedésük) 2019.05.08. 17:44:49 ADAT-11
Mátrixok véges sorozatainak szorzása (3) Az optimális zárójelezés szerkezete Legyen Ai…j=AiAi+1…Aj Az optimális eset az A1,A2, ,An szorzatot k-nál vágja szét A1…n=A1…k*Ak+1…n Költség= A1..k költsége + Ak+1…n költsége + az összeszorzás költsége A1..k és Ak+1…n zárójelezése is optimális kell legyen. 2019.05.08. 17:44:49 ADAT-11
Mátrixok véges sorozatainak szorzása (4) Legyen mij az Ai..j kiszámításának minimális költsége Legyen sij az a k index, ahol az Ai..j szorzat ketté van vágva 2019.05.08. 17:44:49 ADAT-11
Mátrixok véges sorozatainak szorzása (5) p=(p0,p1,…,pn) O(n3) MÁTRIX_SZORZÁS_SORREND(p) n hossz[p]-1 FOR i 1 TO n DO mii 0 FOR l 2 TO n DO FOR i 1 TO n-l+1 DO j i+l-1 mij FOR k i TO j-1 DO q mik+mk+1,j+pi-1pkpj IF q <mij THEN mij q sij k RETURN (m,s) 2019.05.08. 17:44:49 ADAT-11
Mátrixok véges sorozatainak szorzása (6) A1 * A2 * A3 * A4 (2x3) (3x4) (4x5) (5x6) m 1 2 3 4 5 6 24 64 124 60 150 120 (1,2) 0+0+2*3*4 24 (2,3) 0+0+3*4*5 60 (3,4) 0+0+4*5*6 120 (1,3) 0+60+2*3*5 90 24+0+2*4*5 64 (2,4) 0+120+3*4*6 192 60+0+3*5*6 150 (1,4) 0+150+2*3*6 186 24+120+2*4*6 64+0+2*5*6 124 s 1 2 3 4 ((A1 * A2) * A3) * A4 2019.05.08. 17:44:49 ADAT-11
Mátrixok véges sorozatainak szorzása (7) MÁTRIX_LÁNC_SZORZÁS(A,s,i,j) IF j>i THEN X MÁTRIX_LÁNC_SZORZÁS(A,s,i,sij) Y MÁTRIX_LÁNC_SZORZÁS(A,s,sij+1,j) RETURN ( MÁTRIXSZORZÁS(X,Y) ) ELSE RETURN(Ai) 2019.05.08. 17:44:49 ADAT-11