|
|
Linia 9: |
Linia 9: |
| </div> | | </div> |
| </div> | | </div> |
|
| |
| <font color=darkred>
| |
| '''Zadanie 1''' </font>
| |
|
| |
| Słowem pokrywającym tekst x taki tekst y, którego wystąpienia w x
| |
| pokrywają cały tekst x. Na przykład aba pokrywa ababaaba, natomiast nie pokrywa tekstu abaaababa.
| |
| Obliczyć długość najkrótszego słowa pkrywającego dany tekst x.
| |
|
| |
| <div class="mw-collapsible mw-made=collapsible mw-collapsed">
| |
| Rozwiązanie
| |
|
| |
| <div class="mw-collapsible-content" style="display:none">
| |
| Niech <math>S[i]</math>
| |
| będzie rozmiarem minimalnego pokrywajćego słowa dla prefiksu <math>x[1..i]</math>. Algorytm wykorzystuje następujący
| |
| fakt: \ <math>S[i]=i \ \textrm{lub}\ S[i]=S[P[i]].</math> \ Następujący algorytm liczy długość minimalnego słowa
| |
| pokrywającego tekstu x. Liczymy wartości <math>S[i]</math> najmniejszej długości minimalnego słowa pokrywającego <math>x[1
| |
| \ldots i]</math> dla każdego <math>1 \le i \le n</math>.
| |
| W <math>i</math>-tej
| |
| iteracji algorytm pamięta jaki jest ``znany zakres'' każdego minimalnego słowa pokrywającego.
| |
|
| |
| <center> [[Grafika:Minpokslowo.jpg]]<br>
| |
|
| |
| Rysunek 3: <math>i</math>-ta iteracja algorytmu, dla <math>i=15</math>, oraz słowa <math>x\ =\ abaabababaababa\ldots</math>. Tuż przed
| |
| rozpoczęciem tej iteracji mamy <math>P[i]=8</math>, <math>q=S[8]=3</math>, <math>Zakres[3]=13</math>. Po zakończeniu <math>i</math>-tej iteracji
| |
| mamy <math>S[15]=3,Zakres[3]=15</math>, ponieważ <math>i-Zakres[3] \le q</math>. </center>
| |
|
| |
| {{algorytm | Rozmiar-Minimalnego-Pokrycia|algorym_rozm_min_pokr|
| |
| '''for ''' <math>i:=2</math> '''to''' <math>n</math> '''do'''<br>
| |
| <math>Zakres[i]=i, S[i]=i</math><br>
| |
|
| |
| '''for ''' <math>i:=2</math> '''to''' <math>n</math> '''do'''<br>
| |
| '''if''' <math>P[i]>0</math> oraz <math>i-Zakres[S[P[i]] \le S[P[i]]</math> '''then'''<br>
| |
| <math>S[i] := S[P[i]]</math>; <math>Zakres[S[P[i]] := i</math>;<br>
| |
|
| |
| '''return''' <math>S[n]</math>;
| |
| }}
| |
| </div>
| |
| </div>
| |
|
| |
|
| |
|
| <font color=darkred> ---------------------------------------------------------------------- | | <font color=darkred> ---------------------------------------------------------------------- |
Wersja z 10:34, 24 sie 2006
Uzasadnić opoprawność algorytmu obliczającego długość najkrótszego słowa pokrywającego dany tekst.
Rozwiązanie
Niech
będzie rozmiarem minimalnego pokrywajćego słowa dla prefiksu . Poprawność wynika z następującego
faktu: \
----------------------------------------------------------------------
Zadanie 2
Udowodnić, że w wersji on-line algorytmu KMP mamy
Rozwiązanie
Wystarczy wykazać, że
Fakt ten wynika z lematu o okresowości i z definicji tablicy P'.
----------------------------------------------------------------------
Zadanie 3
Udowodnić, że w wersji on-line algorytmu KMP mamy
Rozwiązanie
Słowa Fibonacciego definiujemy następująco:
Na przykład:
Niech oznacza słowo Fibonacciego z obciętymi ostatnimi dwoma symbolami. Jeśli jako wzorzec weżmiemy słowo Fibonacciego , a jako tekst słowo to przy wczytywaniu -ego symbolu algorytm ma opóżnienie logarytmiczne, iterujemy razy operację: .
----------------------------------------------------------------------
Zadanie 4
Udowdnij poprawność algorytmu na cykliczną równoważność słów.
Rozwiązanie
Zdefiniujmy:
oraz dla pewnego ,
oraz dla pewnego .
Skorzystamy z prostego faktu:
Jeśli lub , to nie są równoważne.
Poprawność algorytmu wynika teraz z tego, że po każdej głównej iteracji zachodzi niezmiennik:
\ oraz \ .
----------------------------------------------------------------------
Zadanie 5
Dla jakich tekstów algorytm na cykliczną równoważność słów wykonuje maksymalną liczbę porównan symboli
Rozwiązanie
Dla tekstów postaci o tej samej długości.
----------------------------------------------------------------------
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
Wezmy graf, węzłami są litery, słowa wejściowe odpowiadają krawędziom.
Wystarczy znalezć minimalną liczbę krawędzi które trzeba dołożyć do grafu by miał on
ścieżkę Eulera.
----------------------------------------------------------------------
Zadanie ?
???????
----------------------------------------------------------------------
Zadanie ?
???????