ASD Ćwiczenia 14: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
=='''Zadanie 1'''== | =='''Zadanie 1'''== | ||
Linia 5: | Linia 4: | ||
Dane sa teksty x, y, oblicz najdłuższy tekst z, który jest jednocześnie podsłowem x, y , | Dane sa teksty x, y, oblicz najdłuższy tekst z, który jest jednocześnie podsłowem x, y , | ||
z = nwpodsłowo(x,y) | z = nwpodsłowo(x,y) | ||
=='''Zadanie 1'''== | |||
Dane sa teksty x, y, oblicz najdłuższy tekst z (który oznaczamy LCS(x,y) od ang. Longest Common Subword) | |||
który jest jednocześnie podsłowem x, y. | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
Linia 18: | Linia 21: | ||
=='''Zadanie | =='''Zadanie 2'''== | ||
Niech <math>lcp</math> będzie tablicą najdłuższych wspólnych prefiksów dla słowa x oraz niech | |||
<math>SUMA(lcp)</math> będzie sumą elementów tablicy <math>lcp</math>. Uzasadnij dlaczego liczba | |||
wszystkich niepustych podsłów x wynosi | |||
<center><math>{n+1\choose{2}}-SUMA(lcp)</math></center> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
Rozwiązanie | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Liczba ta jest równa sumie wag krawędzi drzewa sufiksowego. Wzór z zadania wynika to z konstrukcji drzewa | |||
sufiksowego opiuerającej się na tablicy sufiksowej i tablicy <math>lcp</math>. | |||
</div> | |||
</div> | |||
=='''Zadanie 3'''== | |||
Policz wzór na <math>|Subwords(F_n)|</math> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
Rozwiązanie | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Oznaczmy <math> Sub(n)=|Subwords(F_n)|</math>, niech <math> \Phi_n</math> będzie n-tą liczba Fibonacciego. | |||
Wtedy | |||
<center><math>Sub(n+1)\ =\ Sub(n) + \Phi_{n-3}\cdot \Phi_{n-1} + \Phi_{n-2}\cdot (\Phi_{n-1}+2) | |||
</math></center> | |||
<center><math>{Sub(n)\ =\ | |||
\Phi_{n-1}\Phi_{n-2}+2\cdot \Phi_{n-1}-1</math></center> | |||
</div> | |||
</div> | |||
=='''Zadanie 4'''== | |||
Niech <math>lcp'[k]\ =\ lcp[rank[k]-1]</math>. | |||
Udowodnij, że <math>lcp'[k]\ge lcp'[k-1]-1</math> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
Rozwiązanie | Rozwiązanie | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Wynika ze struktury tablicy lcp, oraz stąd że kolejno rozważane słow powstają z poprzednich | |||
przez obcięcie pierwszej litery. | |||
</div> | |||
</div> | |||
=='''Zadanie 5'''== | |||
Opisz liniowy algorytm liczący tablicę ROT, zakładając, że mamy liniowy algorytm liczenia tablicy sufiksowej. | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
Rozwiązanie | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Zastosuj algorytm na liczenie tablicy sufiksowej do słowa xx | |||
</div> | |||
</div> | |||
=='''Zadanie 6'''== | |||
Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x) to można łatwo policzyć SUF[M] w czasie liniowym | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
Rozwiązanie | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Tablica sufiksowa dla słowa compress(x) składa się z dwóch ''połówek'', kodują one ślowa zaczynające się na pozycjach | |||
odpowiedni i mod 3 =1, oraz i mod 3 =2. | |||
</div> | |||
</div> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
Rozwiązanie | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Konstruujemy drzewo sufiksowe dla tekstu x#y$. nwpodsłowo(x,y) odpowiada węzłowi w drzewie, który | |||
reprezentuje najdłuższe podsłowo, oraz z którego prowadzą ścieżki do liści reprezentujących numer sufiksu zaczynającego | |||
się w x, i numer sufiksu zaczynającego się w y. Drzewo trzeba odpowiednio ''przeprocessować'' bottom-up, żeby | |||
można było potem łatwo wyliczyć odpowiedni węzeł. Podobnie rozwiazujemy dla wiely słów x,y ,.. . | |||
</div> | </div> | ||
</div> | </div> |
Wersja z 09:26, 12 wrz 2006
Zadanie 1
Dane sa teksty x, y, oblicz najdłuższy tekst z, który jest jednocześnie podsłowem x, y , z = nwpodsłowo(x,y)
Zadanie 1
Dane sa teksty x, y, oblicz najdłuższy tekst z (który oznaczamy LCS(x,y) od ang. Longest Common Subword)
który jest jednocześnie podsłowem x, y.
Rozwiązanie
Zadanie 2
Niech będzie tablicą najdłuższych wspólnych prefiksów dla słowa x oraz niech będzie sumą elementów tablicy . Uzasadnij dlaczego liczba wszystkich niepustych podsłów x wynosi
Rozwiązanie
Zadanie 3
Policz wzór na
Rozwiązanie
Zadanie 4
Niech . Udowodnij, że
Rozwiązanie
Zadanie 5
Opisz liniowy algorytm liczący tablicę ROT, zakładając, że mamy liniowy algorytm liczenia tablicy sufiksowej.
Rozwiązanie
Zadanie 6
Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x) to można łatwo policzyć SUF[M] w czasie liniowym
Rozwiązanie
Rozwiązanie