Generisanje Permutacija i Kombinacija
January 21, 2018 | Author: Aldin Aljusevic | Category: N/A
Short Description
Ako trazite odlicno uradjen seminarski evo prilike....
Description
GENERISANJE PERMUTACIJA I KOMBINACIJA 6.1 UVOD Nabrajanje kombinatornih objekata zauzima značajno mesto u kompjuterskoj nauci zbog mnogobrojnih primena u nauci i inžinjerstvu. U ovom odeljku opisujemo niz paralelnih algoritama za dva fundamentalna problema generisanja permutacija i kombinacija. Počinjemo nekim definicijama. Recimo da S predstavlja skup koji se sastoji od n različitih elemenata, recimo prvih n celih brojeva; dakle S = {1, 2, ... n}. Jedna permutacija m-te klase skupa S dobija se odabirom m različitih celih brojeva iz n i uređivanjem tih brojeva nekim redosledom. Dakle, za n = 10 i m = 4, permutacija 4-te klase moze biti (5 7 9 2). Dve permutacije m-te klase su različite ukoliko se razlikuju u pogledu elemenata koje sadrže ili u pogledu redosleda nekih elemenata. Broj različitih permutacija m-te klase od n elemenata označava se sa n P m, gde je n P m = n!/(n - m)!. Dakle, za n = 4 postoje dvadeset četiri različite permutacije 3-ce klase. Imajte u vidu da kada je n = m, onda je n P m = n!. Sada recimo da su x = (x1 x2 ... xm) a y = (y1 y2 ... ym) dve permutacije m-te klase skupa S. Kažemo da x prethodi y u leksikografskom redosledu ukoliko postoji i,
, tako da je x j = y j za sve j < i i x i < y i. Permutacije 3-ce
klase od elemenata {1, 2, 3, 4} po leksikografskom redosledu su: (1 2 3), (1 2 4), (1 3 2), (1 3 4), (1 4 2), (1 4 3), (2 1 3), (2 1 4), (2 3 1), (2 3 4), (2 4 1), (2 4 3), (3 1 2), (3 1 4), (3 2 1), (3 2 4), (3 4 1), (3 4 2), (4 1 2), (4 1 3), (4 2 1), (4 2 3), (4 3 1), (4 3 2). Imajte u vidu da se, budući da je S = {1, 2, 3, 4}, leksikografski redosled poklapa sa porastom numeričkog redosleda. Da smo za elemente S imali slova abecede, leksikografski redosled bio bi ekvivalentan redosledu koji se koristi da izlista reči u rečniku. Jedna permutacija m-te klase skupa S dobija se odabirom m različitih celih brojeva iz n i uređivanjem tih brojeva nekim redosledom. Dakle, za n =6 i m = 3, jedna permutacija 3-ce klase je (2 4 5). Dve permutacije m-te klase su različite ukoliko se razlikuju u pogledu elemenata koje sadrže. Broj različitih permutacija m-te klase od n elemenata označava se sa n C m [i ponekada (nm)] gde je n C m = n!/m!(n - m)!.
Dakle, za n = 4 postoje četiri različite permutacije 3-ce klase. Budući da su kombinacije m-te klase poseban slučaj permutacija m-te klase, definicija leksikografskog redosleda primenjuje se na njih, takođe. Kombinacije 3-ce klase od elemenata {1, 2, 3, 4} po leksikografskom redosledu su (1 2 3),
(1 2 4),
(1 3 4),
(2 3 4).
Treba biti jasno da svaki od dva cela broja n P m i n C m može biti izračunat sekvencijalno u O(mn) vremenu. Ovaj odeljak bavi se problemom generisanja svih permutacija i kombinacija m-te klase od n elemenata u leksikografskom redosledu. Počinjemo opisivanjem broja sekvencijalnih algoritama u odeljku 6.2. dva od ovih algoritama povezani su sa generisanjem permutacija i kombinacija m-te klase po leksikografskom redosledu, ponaosob. Ostali algoritmi u sekciji 6.2 primenjuju dva numerička sistema koja povezuju jedinstveni celi broj sa svakom permutacijom i kombinacijom m-te klase, ponaosob. Tri paralelne generisane permutacije m-te klase algoritama za EREW SM SIMD model kompjuterizacije opisane su u sekciji 6.3. Prvi od ovih algoritama jeste direktna paraleli/zacija sekvencijalnog algoritma u sekciji 6.2. isti koristi m procesore i vrši se u O(nPmlog m) vremenu. Drugi algotitam bazira se na numeričkom sistemu za permutacije m-te klase opisane u odeljku 6.2 i isti je adaptivan i optimalne cene. Koristi N procesore, gde je 1 0), onda ovde vredi: m = 1, step = n div 2 = 2k−1 i y[n − 1] sadrˇzi ˇcitavu sumu x(0 : n − 1). U protivnom, za n = 1 vredi m = 0.} {Spuˇstanje} for j := 1 to k − 2 do {j-ti korak spuˇstanja - koristi samo y} begin m := 2 ∗ m; {m = 2j} step := step div 2; {step = n div (2m) = 2k−(j+1) = 2k−j−1} for i := 1 to m − 1 parallel do {za 1 manje nego prije} y[(2 ∗ i + 1) ∗ step − 1] := y[(2 ∗ i ∗ step − 1] + y[(2 ∗ i + 1) ∗ step − 1]; {= x(0 : (2i + 1) · step − 1)} end; {for j} m := 2 ∗ m; {m = 2k−1 = n div 2} {ovdje ne treba: step := step div 2; jer izlazi taˇcno step = 1} parallel begin y[0] := x[0]; for i := 1 to m − 1 parallel do y[2 ∗ i] := y[2 ∗ i − 1] + x[2 ∗ i]; {= x(0 : 2i)} parallel end; Ako je n = 1, onda se petlja po j ne izvrˇsava, a u zadnjem bloku je m = 0, pa se ne izvrˇsava niti petlja po i. Tj. za n = 1, samo kopiramo x[0] u y[0]. Za n > 1, algoritam u j-tom koraku penjanja (za j = 1, . . . , k) raˇcuna y[i2j − 1] := x((i − 1)2j : i2j − 1) , i = 1, . . . , 2k−j , 4. BRZI ALGORITMI NA STABLIMA PARALELNI PREFIKS – 54 a u j-tom koraku spuˇstanja (za j = 1, . . . , k − 1) raˇcuna y[i2k−j + 2k−j−1 − 1] := x(0 : i2k−j + 2k−j−1 − 1) , i = 1, . . . , 2j – 1
6.18 Algorithm ZS1. for i:=1 to n do xi:=1; x1:=n; m:=1; h:=1; output x1; while x11 do { if xh=2 then {m:=m+1; xh:=1; h:=h-1} else {r:=xh-1; t:=m-h+1; xh:=r; while t ≥ r do {h:=h+1; xh:=r; t:=t-r} if t=0 then m:=h else { m:=h+1; i f t>1 then {h:=h+1; xh:=t}}
output x1, x2, ..., xm} za niz n=a1+a2+…+am. Algorithm ZS2. for i:=1 to n do xi:=1; output xi, i=1,2,..., n; x0:=-1; x1:=2; h:=1; m:=n-1; output xi, i=1,2,...,m; while x1 n do { if m-h>1 then {h:=h+1; xh:=2; m:=m-1} else {j:=m-2; while xj= xm-1 do { xj := 1; j:=j-1 }; h:=j+1; xh:= xm-1+1; r:=xm+xm-1(m-h-1); xm := 1; if m-h>1 then xm-1:=1; m:= h+r-1; output x1, x2, ..., xm} ovo je za povecanje I samnjenje niza.
6.3 EREW MODEL EREW SORT: procedure EREW SORT (S) if {Sj < k then QUICKSORT (S) else (1) for i = 1 to k - 1 do PARALLEL SELECT (S, rilSi/kj) {Obtain mi} end for (2) SI-{seS:s m,} (3) for i = 2 to k - 1 do S +-{seS:m1-, < s < me} end for
(4) Sk +- {sCES:s > mk- , (5) for i = 1 to k/2 do in parallel EREW SORT (Si) end for (6) for i = (k/2) + 1 to k do in parallel EREW SORT (Si) end for end if. _________________________________________
6.10 procedure MULTIPLE BROADCAST (d(l), d(2),...,d(N)) Step 1: for i = I to N do in parallel {Pi initializes level(i) and loc(i)} (1.1) level(i)+-O (1.2) loc(i) +-N + i- 2 (1.3) store [i] in location d(i) + loc(i) end for. Step 2: for v = 0 to (log N)-2 do (2.1) for i = 1 to N do in parallel {Pi at a left child advances up its tree} (2.1.1) x (lo(i) - 1)/2] (2.1.2) if loc(i) is odd and level(i)= v
then (i) loc(i) - x (ii) store [i] in location d(i) + loc(i) (iii) level(i) +- level(i) + 1 end if end for (2.2) for i = I to N do in parallel if d(i) + x does not already contain a marker [j] for some 1 j < N then (i) loc(i) - x (ii) store [i] in location d(i) + loc(i) (iii) level(i) +- level(i) + 1 end if end for end for. Step 3: for v = (log N)- 1 down to 0 do (3.1) for i = 1 to N do in parallel (3. 1. 1) x - (loc(i) - 1)/2] (3.1.2) y - (2 x loc(i)) + 1 (3.1.3) if loc(i) is odd and level(i) = v then (i) read the contents of d(i) + x (ii) write the contents of d(i) + x in location d(i) + loc(i) (iii) level(i) +-- level(i) - 1 (iv) if location d(i) + y contains [i] then loc(i) -- y else loc(i)
View more...
Comments