Zaawansowane algorytmy i struktury danych/Ćwiczenia 13: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rytter (dyskusja | edycje)
Nie podano opisu zmian
m Zastępowanie tekstu – „<math> ” na „<math>”
 
(Nie pokazano 3 wersji utworzonych przez 2 użytkowników)
Linia 3: Linia 3:


Dany jest ciąg nawiasów otwierających i zamykających jednego rodzaju:  
Dany jest ciąg nawiasów otwierających i zamykających jednego rodzaju:  
( lub ). Sprawdzić czy jest to ciąg poprawny nawiasowo w czasie log n
( lub ). Sprawdź, czy jest to ciąg poprawny nawiasowo w czasie log n
z pracą liniową.
z pracą liniową.


Linia 9: Linia 9:
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


Zasosować algorytm na sumy prefiksowe, lewy nawias +1, prawy nawias -1. sumy musza być nieujemne a nakońcu zero.
Zastosuj algorytm na sumy prefiksowe, lewy nawias +1, prawy nawias -1. Sumy musza być nieujemne, a na końcu musi być zero.
</div>
</div>
</div>
</div>
Linia 17: Linia 17:
=='''Zadanie 2'''==
=='''Zadanie 2'''==


Dany jest ciąg nawiasów okrągłych lub kwadratowych ''('' , '')'', ''['' , '']'', sprawdzić czy jest to ciąg poprawny nawiasowo w czasie log n
Dany jest ciąg nawiasów okrągłych lub kwadratowych "(" , ")", "[" , "]". Sprawdź, czy jest to ciąg poprawny nawiasowo w czasie log n
z pracą liniową.
z pracą liniową.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
Linia 28: Linia 28:
==Zadanie 3==
==Zadanie 3==


Uzasadnić dlaczego algorytm  $A_{k+1}$ liczenia minimum w tablicy n-elementowej działa w czasie O(1) używając  <math> P_{k+1}(n))</math>
Uzasadnij, dlaczego algorytm  $A_{k+1}$ liczenia minimum w tablicy n-elementowej działa w czasie O(1) używając  <math>P_{k+1}(n))</math>
procesor"ow, gdzie <math> P_k(n)= n^{1+\epsilon_k}, \epsilon_k\ =\ \frac{1}{2^{k}-1} </math>
procesorów, gdzie <math>P_k(n)= n^{1+\epsilon_k}, \epsilon_k= \frac{1}{2^{k}-1} </math>
Zakładamy, że dwa procesory nie mogą próbować wpisać jednocześnie dwie różne wartości w to samo miejsce
Zakładamy, że dwa procesory nie mogą próbować wpisać jednocześnie dwóch różnych wartości w to samo miejsce
(ale mogą jednocześnie tę samą wartość).
(ale mogą jednocześnie tę samą wartość).


Linia 36: Linia 36:
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


<math> \max\{(\frac{n}{n^{\alpha}})^{1+\epsilon_k},\  \frac{n}{n^{\alpha}}
<math>\max\{(\frac{n}{n^{\alpha}})^{1+\epsilon_k},\  \frac{n}{n^{\alpha}}
\times (n^{\alpha})^{1+\epsilon_k}\}\ =\ O(P_{k+1}(n)) </math>
\times (n^{\alpha})^{1+\epsilon_k}\}= O(P_{k+1}(n))</math>


gdzie <math> \alpha=\frac{1}{2^{k}+1} </math>
gdzie <math>\alpha=\frac{1}{2^{k}+1}</math>


</div>
</div>
Linia 46: Linia 46:
==Zadanie 4==
==Zadanie 4==


Oblicz na CRCW PRAM minimum w tablicy n-elementowej w czasie O(log log n) używając O(n / log log n) procesorów.
Oblicz na CRCW PRAM minimum w tablicy n-elementowej w czasie O(log log n), używając O(n / log log n) procesorów.
Zakładamy, że dwa procesory nie mogą próbować wpisać jednocześnie dwie różne wartości w to samo miejsce
Zakładamy, że dwa procesory nie mogą próbować wpisać jednocześnie dwóch różnych wartości w to samo miejsce
(ale mogą jednocześnie tę samą wartość).
(ale mogą jednocześnie tę samą wartość).


Linia 53: Linia 53:
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


Dzielimy tablicę na kawałki długości <math> \sqrt{n} </math>. Z otrzymanymi kawałkami robimy to samo, aż  
Dzielimy tablicę na kawałki długości <math>\sqrt{n}</math>. Z otrzymanymi kawałkami robimy to samo, aż  
długość będzie pewną stałą.
długość będzie pewną stałą.
</div>
</div>
Linia 61: Linia 61:
==Zadanie 5==
==Zadanie 5==


Zmień algorytm ParallelMerger tak aby scalał dwa ciągi w czasie logarytmicznym używając tylko
Zmień algorytm ParallelMerger, tak aby scalał dwa ciągi w czasie logarytmicznym, używając tylko
<math> O(\frac{n}{\log n})</math> procesorów.
<math>O(\frac{n}{\log n})</math> procesorów.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


Podziel ciągi które trzeba scalić na segmenty długości log n.
Podziel ciągi, które trzeba scalić, na segmenty długości log n.
</div>
</div>
</div>
</div>
Linia 73: Linia 73:
==Zadanie 6==
==Zadanie 6==


Jaka jest asymptotycznie liczba operacji w układzie arytmetycznym odpowiadającym algorytmowi PrefSums1.
Jaka jest asymptotycznie liczba operacji w układzie arytmetycznym odpowiadającym algorytmowi PrefSums1?


<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


<math> O(n \log n) </math>
<math>O(n \log n)</math>
</div>
</div>
</div>
</div>
Linia 84: Linia 84:
==Zadanie 7==
==Zadanie 7==


Jaka jest asymptotycznie liczba operacji w układzie arytmetycznym odpowiadającym algorytmowi PrefSums2.
Jaka jest asymptotycznie liczba operacji w układzie arytmetycznym odpowiadającym algorytmowi PrefSums2?


<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


<math> O(n ) </math>
<math>O(n )</math>
</div>
</div>
</div>
</div>

Aktualna wersja na dzień 22:18, 11 wrz 2023

Zadanie 1

Dany jest ciąg nawiasów otwierających i zamykających jednego rodzaju: ( lub ). Sprawdź, czy jest to ciąg poprawny nawiasowo w czasie log n z pracą liniową.

Rozwiązanie


Zadanie 2

Dany jest ciąg nawiasów okrągłych lub kwadratowych "(" , ")", "[" , "]". Sprawdź, czy jest to ciąg poprawny nawiasowo w czasie log n z pracą liniową.

Rozwiązanie


Zadanie 3

Uzasadnij, dlaczego algorytm $A_{k+1}$ liczenia minimum w tablicy n-elementowej działa w czasie O(1) używając Pk+1(n)) procesorów, gdzie Pk(n)=n1+ϵk,ϵk=12k1 Zakładamy, że dwa procesory nie mogą próbować wpisać jednocześnie dwóch różnych wartości w to samo miejsce (ale mogą jednocześnie tę samą wartość).

Rozwiązanie

Zadanie 4

Oblicz na CRCW PRAM minimum w tablicy n-elementowej w czasie O(log log n), używając O(n / log log n) procesorów. Zakładamy, że dwa procesory nie mogą próbować wpisać jednocześnie dwóch różnych wartości w to samo miejsce (ale mogą jednocześnie tę samą wartość).

Rozwiązanie


Zadanie 5

Zmień algorytm ParallelMerger, tak aby scalał dwa ciągi w czasie logarytmicznym, używając tylko O(nlogn) procesorów.

Rozwiązanie

Zadanie 6

Jaka jest asymptotycznie liczba operacji w układzie arytmetycznym odpowiadającym algorytmowi PrefSums1?

Rozwiązanie

Zadanie 7

Jaka jest asymptotycznie liczba operacji w układzie arytmetycznym odpowiadającym algorytmowi PrefSums2?

Rozwiązanie