120 likes | 241 Views
Körmentes irányított gráfban legrövidebb utak. Legrövidebb utak minden csúcspárra. Szomszédsági w mátrixot alkalmazunk a gráf (hálózat) megadására w ij = 0, ha i=j, w ij =az irányított (i,j) él hossza, ha i j és (i,j) E w ij = , ha i j és (i,j) E
E N D
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 ADAT-11
Floyd-Warshall algoritmus (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 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} ADAT-11
Dinamikus programozás • 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 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 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) 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. 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..jszorzat ketté van vágva 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 mii0 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 mijq sijk RETURN (m,s) ADAT-11
Mátrixok véges sorozatainak szorzása (6) A1 * A2 * A3 * A4 (2x3) (3x4) (4x5) (5x6) ((A1 * A2) * A3) * A4 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) ADAT-11