[PARPRO] Gradivo
Ollie
koji je neutralni element za xor?
---
Ollie rekao bih 0, jer
0 xor A -> A
0 xor 1 -> 1
0 xor 0 -> 0
MsBrightside
ja bih to ovako
viliml
MsBrightside ali to je slijedno i ne može se paralelizirati, za temp_arr[i]
ti uvijek treba temp_arr[i-1]
Pepper Pogledaj najnovije rješenje koje sam dodao u google dokument za 1.10. Samo treba zamjeniti niz isti
s uzlazni
i radit će i na ovom zadatku.
Logika je zapravo fundamentalno više manje ista kao ovo od MsBrightside samo sam tu for petlju izveo u više koraka koji se zapravo mogu paralelizirati.
viliml
MsBrightside Aha ček, misliš li tu for petlju realizirati kao scan? Ili što znače ti komentari?
Je li ta operacija uopće asociativna…? Možda je… Ali trebalo bi to razbiti na dijelove.
sekiro
Sto ako u algoritmu iskoristimo neki reduce, jel se on uviejk izvodi preko binarnog stabla i ima složenost logn pa onda poveca i slozenost cijelog algoritma na logn?
Daeyarn
sekiro slozenost za reduce je uvijek logn tako da kad racunas ukupnu slozenost taj dio koda(reduce operacija) doprinosi ukupnoj slozenosti sa O(logn), za ukupnu slozenost moras gledati i slozenost ostatka koda npr. ako imas i dio koda koji je O(n) onda ce ukupna slozenost biti O(n) + O(logn) = O(n + logn) = O(n) (jer n brze raste od logn)
MsBrightside
viliml da, mislila sam ga kao scan, samo mi se nije dalo odvojenu funkciju radit, ja bi rekla da donekle je asocijativna ali ne znam vise
MOXY
Rene jel mozes poslati link?
MOXY
aha, mislio sam da ce tu biti i rjesenja MI-jeva, jel netko rijesio MI 2015/16?
MsBrightside
MOXY koji ti zadaci trebaju
MOXY
MsBrightside 4. i 6. za provjeru
MsBrightside
MOXY Ako sam ja dobro skontala 6 bi trebao bit
(n/p + d - 1) + B + n/p + (n/p + d - 1) + B
znaci citanje, ograda, lokalne instrukcije, pisanje i ograda.
A 4.
n = [0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0]
r = [-1] * len(n)
# ovaj for je kao paralelno jer svaki procesor pise samo na svoju lokaciju
for i in range(len(n)):
if n[i] == 1:
r[i] = i
print(r)
max1 = reduce(max, r)
print(max1)
min1 = reduce(min_reduce, r)
print(min1)
one_sum = reduce(sum1, n)
print(one_sum)
zeros = max1 - min1 - one_sum + 1
print(zeros)
Rene
Jel’ iko vidi grešku u ovom pristupu za 1.10 (nisam baš skužio kako je +_scan u ostalim rješenjima točan):
PARALELNO(i=0 DO n-1) {
isti[i] = 0
poc[i] = 0
kraj[i] = 0
k[i] = P[i] //kopija ulaznog niza
}
PARALELNO(i=0 DO n-2) {
AKO (P[i] == K[i+1]) {
isti[i] = 1
}
}
PARALELNO(i = 0 DO n-1) {
AKO (i == 0 || isti[i-1] == 0) {
poc[i] = i // ako je prvi element niza, ili prethodni nije isti kao on, onda je pocetak
}
AKO(isti[i] == 0) {
kraj[i] = i // ako nije isti kao sljedeci, na njegovom indeksu zavrsava podniz
} INAČE {
kraj[i] = i + 1 // podniz se "nastavlja"
}
}
start = MAX_SCAN(poc[]) // pronađi zadnji indeks na kojem je neki podniz započeo
end = MAX_SCAN(kraj[]) // pronađi zadnji indeks na kojem je neki podniz završio
PARALELNO(i = 0 DO n-1) {
REZ[i] = end[i] - start[i] + 1
}
max = MAX_REDUCE(REZ[])
Primjer izvođenja za niz P[] = [1 2 2 4 7 3 3 3]
isti[] = [0 1 0 0 0 1 1 0]
poc[] = [0 1 0 3 4 5 0 0]
kraj[] = [0 2 2 3 4 6 7 7]
start[] = [0 1 1 3 4 5 5 5]
end[] = [0 2 2 3 4 6 7 7]
rez[] = [1 2 2 1 1 2 3 3]
max = 3
viliml
Rene Čini mi se da bi moglo biti točno, ali nekako mi se ne sviđa ovo s kraj[i]=i+1
.
Što ti smeta s +_scanom?
Ovo je moje rješenje s google docsa:
isti[N-1] = {}
PARALELNO(i=0 DO n-2)
isti[i] = 0
PARALELNO(i=1 DO n-1)
AKO(P[i-1] == P[i])
isti[i-1] = 1
duljina = +_scan(isti[])
PARALENO(i=0 DO n-2)
AKO(isti[i] == 1)
duljina[i] = 0
duljina = max_scan(duljina[])
PARALENO(i=1 DO n-2)
AKO(isti[i] == 0)
isti[i] = duljina[i-1] - duljina[i]
duljina = +_scan(isti[])
najdulji = 1 + max_reduce(duljina[])
Primjer izvođenja:
isti[]= [0 1 0 0 0 1 1 0]
duljina[] = [0 1 1 1 1 2 3 3]
duljina[] = [0 0 1 1 1 0 0 3]
duljina[] = [0 0 1 1 1 1 1 3]
isti[] = [0 1 -1 0 0 1 1 -2]
duljina = [0 1 0 0 0 1 2 0]
Me1
MsBrightside zar neće u min uvijek bit -1?
anon00
Ovi zadaci za PRAM koji su tipa “Napisati algoritam za CRCW/EREW PRAM računalo”
Je li ovo znaci napisati 2 algoritma tj 1 za svaku vrstu ili napisati samo 1 algoritam na odabir
Takoder ako treba oba - je li dovoljno napraviti EREW pa ce on raditi i na CRCW ili bas treba prilagodeni za CRCW
Bisolvon
anon00 Mislim da je dovoljno napisati samo EREW, u slučaju da ne znaš EREW onda možeš probat CRCW da se skupi neki bod.
MsBrightside
Me ne jer sam koristila svoju modificiranu min funkciju
def min_reduce(a, b):
if a == -1:
return b
elif b == -1:
return a
else:
return min(a, b)