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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rytter (dyskusja | edycje)
Rytter (dyskusja | edycje)
Linia 210: Linia 210:


Przprowadź dokładny dowód tego, że algorytm Oszczędny KMP wykonuje co najwyżej 3/2 n porównań
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)
<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">
 
<br>
By wykazać, że algorytm Oszczędny-MP wykonuje co najwyżej <math> \frac{3}{2}n</math>   
By wykazać, że algorytm Oszczędny-MP wykonuje co najwyżej <math> \frac{3}{2}n</math>   
porównań, pogrupujemy te porównania w dwie szufladki: <math> A</math>  i <math> B</math> . Pokażemy, że
porównań, pogrupujemy te porównania w dwie szufladki: <math> A</math>  i <math> B</math> . Pokażemy, że
w szufladce <math> A</math>  będzie co najwyżej <math> n</math>  porównań, a w szufladce <math> B</math>  co najwyżej
w szufladce <math> A</math>  będzie co najwyżej <math> n</math>  porównań, a w szufladce <math> B</math>  co najwyżej <math> \frac{n}{2}</math>  porównań. Do szufladki <math> A</math>  wrzucamy:
<math> \frac{n}{2}</math>  porównań.
Do szufladki <math> A</math>  wrzucamy:


<br>
<br>
Linia 225: Linia 224:


<br>
<br>
Wszystkie nieudane porównania pierwszej litery wzorca <math> x'</math>  (czyli litery
Wszystkie nieudane porównania pierwszej litery wzorca <math> x'</math>  (czyli litery <math> b</math> ), dokonane w trakcie szukania wzorca <math> x'</math> .
<math> b</math> ), dokonane w trakcie szukania wzorca <math> x'</math> .


<br> Wszystkie porównania początkowych liter <math> a</math> , za wyjątkiem porównań
<br> Wszystkie porównania początkowych liter <math> a</math> , za wyjątkiem porównań
na tych pozycjach, gdzie wcześniej szukaliśmy litery <math> b</math>  --- pierwszej litery
na tych pozycjach, gdzie wcześniej szukaliśmy litery <math> b</math>  (pierwszej litery
wzorca <math> x'</math> --- i nie znaleźliśmy jej.
wzorca <math> x'</math>) i nie znaleźliśmy jej.
<br>
<br>


Linia 236: Linia 234:


<br>  
<br>  
Wszystkie nieudane porównania dokonane w trakcie szukania wzorca <math> x'</math> ,
Wszystkie nieudane porównania dokonane w trakcie szukania wzorca <math> x'</math> , za wyjątkiem nieudanych porównań pierwszej litery; są to nieudane porównania dokonywane w momencie, gdy znaleźliśmy już jakiś niepusty prefiks <math> x'</math> .
za wyjątkiem nieudanych porównań pierwszej litery; są to nieudane porównania
dokonywane w momencie, gdy znaleźliśmy już jakiś niepusty prefiks <math> x'</math> .


<br> Porównania początkowych liter <math> a</math>  na tych pozycjach, gdzie wcześniej
<br> Porównania początkowych liter <math> a</math>  na tych pozycjach, gdzie wcześniej
Linia 250: Linia 246:
Dodatkowo, zarówno algorytm MP jak i algorytm Oszczędny-MP ma taką właściwość,
Dodatkowo, zarówno algorytm MP jak i algorytm Oszczędny-MP ma taką właściwość,
że jeśli na pewnej pozycji tekstu było udane porównanie, to ta pozycja
że jeśli na pewnej pozycji tekstu było udane porównanie, to ta pozycja
tekstu już nigdy nie będzie porównywana --- o niej ,,wiemy już wszystko''.  
tekstu już nigdy nie będzie porównywana (o niej ,,wiemy już wszystko'').  
W związku z tym każde porównanie z szufladki <math> A</math>  wykonuje się na innej
W związku z tym każde porównanie z szufladki <math> A</math>  wykonuje się na innej
literze tekstu, czyli tych porównań jest co najwyżej <math> n</math> .
literze tekstu, czyli tych porównań jest co najwyżej <math> n</math> .
Linia 256: Linia 252:
Spójrzmy teraz, jak zmienia się wskaźnik, na jakiej pozycji szukamy teraz
Spójrzmy teraz, jak zmienia się wskaźnik, na jakiej pozycji szukamy teraz
wzorca <math> x</math> . Zauważmy, że prefikso-sufiks słowa <math> x[1\ldots s]</math>  dla <math> s > k</math>  
wzorca <math> x</math> . Zauważmy, że prefikso-sufiks słowa <math> x[1\ldots s]</math>  dla <math> s > k</math>  
jest długości co najwyżej <math> s - k - 1</math>  --- litery <math> a</math>  tego prefikso-sufiksu
jest długości co najwyżej <math> s - k - 1</math>  (litery <math> a</math>  tego prefikso-sufiksu
muszą się zaczynać za literą <math> b</math>  na pozycji <math> k+1</math> . W związku z tym
muszą się zaczynać za literą <math> b</math>  na pozycji <math> k+1</math> ). W związku z tym
w momencie nieudanego porównania, które wystąpiło  
w momencie nieudanego porównania, które wystąpiło  
gdy znaleziony już został niepusty prefiks słowa <math> x'</math> , wskaźnik ,,gdzie
gdy znaleziony już został niepusty prefiks słowa <math> x'</math> , wskaźnik ,,gdzie teraz szukamy'' przesuwa się o conajmniej <math> k+1</math> . Tak też jest, gdy znajdziemy całe słowo <math> x'</math>  ( przesuwamy się do prefikso-sufiksu
teraz szukamy'' przesuwa się o conajmniej <math> k+1</math> . Tak też jest,
słowa <math> x</math>) . Dodatkowo, każde nieudane porównanie litery <math> b</math>  z pozycji
gdy znajdziemy całe słowo <math> x'</math>  --- przesuwamy się do prefikso-sufiksu
słowa <math> x</math> . Dodatkowo, każde nieudane porównanie litery <math> b</math>  z pozycji
<math> k+1</math>  w słowie <math> x</math>  przesuwa wskaźnik o jeden.
<math> k+1</math>  w słowie <math> x</math>  przesuwa wskaźnik o jeden.



Wersja z 18:02, 18 gru 2006

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

Udowodnij poprawność algorytmu na cykliczną równoważność słów.

Rozwiązanie


Zadanie 5

Dla jakich tekstów algorytm na cykliczną równoważność słów wykonuje maksymalną liczbę porównan symboli?

Rozwiązanie

Zadanie 6

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 7

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 8

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 9

Udowdnij poprawność algorytmu KMP realtime

Rozwiązanie

Zadanie 10

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