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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m Zastępowanie tekstu - "\ =\" na "="
m Zastępowanie tekstu – „.</math>” na „</math>.”
Linia 8: Linia 8:
Niech <math>S[i]</math>
Niech <math>S[i]</math>
będzie rozmiarem minimalnego pokrywającego słowa dla prefiksu <math>x[1..i]</math>. Poprawność wynika z następującego  
będzie rozmiarem minimalnego pokrywającego słowa dla prefiksu <math>x[1..i]</math>. Poprawność wynika z następującego  
faktu: \ <math>S[i]=i \ \text{lub}\ S[i]=S[P[i]].</math>  
faktu: \ <math>S[i]=i \ \text{lub}\ S[i]=S[P[i]]</math>.
</div>
</div>
</div>
</div>
Linia 43: Linia 43:
<center><math>F_0=a,\ F_1=ab,\ F_{n+1}= F_n\cdot F_{n-1}</math></center>
<center><math>F_0=a,\ F_1=ab,\ F_{n+1}= F_n\cdot F_{n-1}</math></center>


Na przykład: <math>F_3=abaab,\ F_4=abaababa,\ F_5=abaababaabaab.</math>
Na przykład: <math>F_3=abaab,\ F_4=abaababa,\ F_5=abaababaabaab</math>.


Niech <math>F'_n</math> oznacza słowo Fibonacciego z obciętymi ostatnimi dwoma symbolami. Jeśli jako wzorzec weźmiemy słowo Fibonacciego <math>F_n</math>, a jako tekst słowo <math>F'_ncc</math> to przy wczytywaniu <math>|F_n-1|</math>-ego symbolu algorytm ma opóżnienie logarytmiczne, iterujemy <math>\Omega(\log n)</math> razy operację: <math>j:=P'[j]</math>.  
Niech <math>F'_n</math> oznacza słowo Fibonacciego z obciętymi ostatnimi dwoma symbolami. Jeśli jako wzorzec weźmiemy słowo Fibonacciego <math>F_n</math>, a jako tekst słowo <math>F'_ncc</math> to przy wczytywaniu <math>|F_n-1|</math>-ego symbolu algorytm ma opóżnienie logarytmiczne, iterujemy <math>\Omega(\log n)</math> razy operację: <math>j:=P'[j]</math>.  
Linia 131: Linia 131:




<center> <math>|Kolejka|<m-j.</math><br></center>
<center> <math>|Kolejka|<m-j</math>.<br></center>





Wersja z 09:19, 5 wrz 2023

Zadanie 1

Uzasadnij poprawność algorytmu obliczającego długość najkrótszego słowa pokrywającego dany tekst.

Rozwiązanie


Zadanie 2

Udowodnij, że w wersji on-line algorytmu KMP mamy delay=O(logm)

Rozwiązanie



Zadanie 3

Udowodnij, że w wersji on-line algorytmu KMP mamy delay=Ω(logm)

Rozwiązanie



Zadanie 4

Mamy zbiór słów, każde długości dwa, obliczyć długość minimalnego tekstu który zawiera wszystkie słowa.

Rozwiązanie



Zadanie 5

Udowodnij następującą ciekawą własność kombinatoryczną okresowości w tekstach. Niech nwd(p,q) oznacza najmniejszy wspólny dzielnik p,q.


Lemat [Lemat o okresowości]

Jeśli x ma okresy p, q oraz p+q|x|, to nwd(p,q) jest również okresem x.


Rozwiązanie


Zadanie 6

Lemat o okresowości można wzmocnić, osłabiając założenia. Udowodnij następujący lemat.

Lemat [Silny lemat o okresowości]

Jeśli x ma okresy p, q oraz p+q|x|+nwd(p,q), to nwd(p,q) jest również okresem x.

Rozwiązanie

Zadanie 7

Udowdnij poprawność algorytmu KMP realtime

Rozwiązanie

Zadanie 8

Przprowadź dokładny dowód tego, że algorytm Oszczędny KMP wykonuje co najwyżej 3/2 n porównań (schemat dowodu był już opisany w odpowiednim module)

Rozwiązanie

Zadanie 9

Słowa cykliczne (de Bruijna): Słowo binarne w długości dokładnie 2n nazwiemy cyklicznym (słowem de Bruijna, który to wymyślił) rzędu n gdy każde słowo binarne długości n jest podsłowem słowa ww.

Następujący algorytm generuje takie słowo, co więcej jest ono leksykograficznie pierwsze spośród wszystkich możliwych

Niech Cutfirst(x) oznacza obciecie x o pierwszy symbol, a Append(x,b) dopisanie litery b do słowa x na końcu.


Algorytm Słowa-Cykliczne

1 x := 1111..1 (n jedynek);

2 Z :=  ; wynik := słowo puste;

3 while istnieje b{0,1} takie, że Append(Cutfirst(x),b)Z do

4 wybierz minimalne takie b ;

5 Append(Cutfirst(x),b);

6 insert(x,Z) ;

7 Append(wynik,b);


Na przykład dla n=3 wynik = 00010111, a dla n=2 wynik = 0011


Udowodnij poprawność algorytmu.

Rozwiązanie