ASD Ćwiczenia 14: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rytter (dyskusja | edycje)
Nie podano opisu zmian
Rytter (dyskusja | edycje)
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 lcp będzie tablicą najdłuższych wspólnych prefiksów dla słowa x oraz niech SUMA(lcp) będzie sumą elementów tablicy lcp. Uzasadnij dlaczego liczba wszystkich niepustych podsłów x wynosi


(n+12)SUMA(lcp)

Rozwiązanie


Zadanie 3

Policz wzór na |Subwords(Fn)|

Rozwiązanie


Zadanie 4

Niech lcp[k] = lcp[rank[k]1]. Udowodnij, że lcp[k]lcp[k1]1

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