ASD Ćwiczenia 14: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
mNie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
=='''Zadanie 1'''== | =='''Zadanie 1'''== | ||
Dane sa teksty x, y, oblicz najdłuższy tekst z ( | Dane sa teksty x, y, oblicz najdłuższy tekst <math>z</math> (oznaczany LCS(x,y) od ang. Longest Common Subword), | ||
który jest jednocześnie podsłowem x | który jest jednocześnie podsłowem x i y. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
Linia 7: | Linia 7: | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Konstruujemy drzewo sufiksowe dla tekstu x#y$. | Konstruujemy drzewo sufiksowe dla tekstu x#y$. LCS(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 | 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 '' | się w x, i numer sufiksu zaczynającego się w y. Drzewo trzeba odpowiednio ''wstępnie przetworzyć'' bottom-up, żeby | ||
można było potem łatwo wyliczyć odpowiedni węzeł. Podobnie | można było potem łatwo wyliczyć odpowiedni węzeł. Podobnie rozwiązujemy problem dla wielu słów x,y ,.. . | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 17: | Linia 17: | ||
Niech <math>lcp</math> będzie tablicą najdłuższych wspólnych prefiksów dla słowa x oraz niech | 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 | <math>SUMA(lcp)</math> będzie sumą elementów tablicy <math>lcp</math>. Uzasadnij, dlaczego liczba | ||
wszystkich niepustych podsłów x wynosi | wszystkich niepustych podsłów x wynosi | ||
Linia 26: | Linia 26: | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Liczba ta jest równa sumie wag krawędzi drzewa sufiksowego. Wzór z zadania wynika | Liczba ta jest równa sumie wag krawędzi drzewa sufiksowego. Wzór z zadania wynika z konstrukcji drzewa | ||
sufiksowego | sufiksowego opierającej się na tablicy sufiksowej i tablicy <math>lcp</math>. | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 34: | Linia 34: | ||
=='''Zadanie 3'''== | =='''Zadanie 3'''== | ||
Wyprowadź wzór na <math>|Subwords(F_n)|</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"> | ||
Oznaczmy <math> Sub(n)=|Subwords(F_n)|</math> | Oznaczmy <math> Sub(n)=|Subwords(F_n)|</math> i niech <math> \Phi_n</math> będzie n-tą liczba Fibonacciego. | ||
Wtedy | Wtedy | ||
Linia 59: | Linia 59: | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Wynika ze struktury tablicy lcp, | Wynika to ze struktury tablicy lcp oraz z tego, że kolejno rozważane słowa powstają z poprzednich | ||
przez obcięcie pierwszej litery. | przez obcięcie pierwszej litery. | ||
</div> | </div> | ||
Linia 65: | Linia 65: | ||
=='''Zadanie 5'''== | =='''Zadanie 5'''== | ||
Opisz liniowy algorytm | Opisz liniowy algorytm obliczania tablicę ROT, przy założeniu, że mamy liniowy algorytm obliczania tablicy sufiksowej. | ||
<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"> | ||
Zastosuj algorytm | Zastosuj algorytm obliczania tablicy sufiksowej do słowa xx. | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 76: | Linia 76: | ||
=='''Zadanie 6'''== | =='''Zadanie 6'''== | ||
Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x) to można łatwo | Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x), to można łatwo obliczyć SUF[M] w czasie liniowym. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
Rozwiązanie | Rozwiązanie |
Wersja z 15:32, 26 wrz 2006
Zadanie 1
Dane sa teksty x, y, oblicz najdłuższy tekst (oznaczany LCS(x,y) od ang. Longest Common Subword), który jest jednocześnie podsłowem x i 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
Wyprowadź wzór na
Rozwiązanie
Zadanie 4
Niech . Udowodnij, że
Rozwiązanie
Zadanie 5
Opisz liniowy algorytm obliczania tablicę ROT, przy założeniu, że mamy liniowy algorytm obliczania tablicy sufiksowej.
Rozwiązanie
Zadanie 6
Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x), to można łatwo obliczyć SUF[M] w czasie liniowym.
Rozwiązanie