View
159
Download
0
Category
Preview:
DESCRIPTION
Ako trazite odlicno uradjen seminarski evo prilike.
Citation preview
GENERISANJE PERMUTACIJA I KOMBINACIJA
GENERISANJE PERMUTACIJA I KOMBINACIJA6.1 UVOD
Nabrajanje kombinatornih objekata zauzima znaajno mesto u kompjuterskoj nauci zbog mnogobrojnih primena u nauci i ininjerstvu. U ovom odeljku opisujemo niz paralelnih algoritama za dva fundamentalna problema generisanja permutacija i kombinacija. Poinjemo nekim definicijama.
Recimo da S predstavlja skup koji se sastoji od n razliitih elemenata, recimo prvih n celih brojeva; dakle S = {1, 2, ... n}. Jedna permutacija m-te klase skupa S dobija se odabirom m razliitih celih brojeva iz n i ureivanjem 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 razliite ukoliko se razlikuju u pogledu elemenata koje sadre ili u pogledu redosleda nekih elemenata. Broj razliitih permutacija m-te klase od n elemenata oznaava se sa n P m, gde jen P m = n!/(n - m)!.Dakle, za n = 4 postoje dvadeset etiri razliite 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. Kaemo 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, budui da je S = {1, 2, 3, 4}, leksikografski redosled poklapa sa porastom numerikog redosleda. Da smo za elemente S imali slova abecede, leksikografski redosled bio bi ekvivalentan redosledu koji se koristi da izlista rei u reniku.
Jedna permutacija m-te klase skupa S dobija se odabirom m razliitih celih brojeva iz n i ureivanjem 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 razliite ukoliko se razlikuju u pogledu elemenata koje sadre. Broj razliitih permutacija m-te klase od n elemenata oznaava se sa n C m [i ponekada (nm)] gde jen C m = n!/m!(n - m)!.
Dakle, za n = 4 postoje etiri razliite permutacije 3-ce klase. Budui da su kombinacije m-te klase poseban sluaj permutacija m-te klase, definicija leksikografskog redosleda primenjuje se na njih, takoe. 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 moe biti izraunat sekvencijalno u O(mn) vremenu.
Ovaj odeljak bavi se problemom generisanja svih permutacija i kombinacija m-te klase od n elemenata u leksikografskom redosledu. Poinjemo 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 numerika 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 vri se u O(nPmlog m) vremenu. Drugi algotitam bazira se na numerikom 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 = 2k1 i
y[n 1] sadrzi citavu sumu x(0 : n 1).
U protivnom, za n = 1 vredi m = 0.}
{Spustanje}
for j := 1 to k 2 do {j-ti korak spustanja - koristi samo y} begin
m := 2 m; {m = 2j} step := step div 2; {step = n div (2m) = 2k(j+1) = 2kj1} 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 = 2k1 = n div 2}
{ovdje ne treba: step := step div 2; jer izlazi tacno step = 1}
parallel begin
y[0] := x[0];
for i := 1 to m 1 parallel doy[2 i] := y[2 i 1] + x[2 i]; {= x(0 : 2i)} parallel end;
Ako je n = 1, onda se petlja po j ne izvrsava, a u zadnjem bloku je m = 0, pa
se ne izvrsava 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) racuna
y[i2j 1] := x((i 1)2j : i2j 1) , i = 1, . . . , 2kj ,
4. BRZI ALGORITMI NA STABLIMA PARALELNI PREFIKS 54
a u j-tom koraku spustanja (za j = 1, . . . , k 1) racuna
y[i2kj + 2kj1 1] := x(0 : i2kj + 2kj1 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)
Recommended