ASD Ćwiczenia 13: 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 25: Linia 25:


<math> P'[i]=j,\ P'[j]=k>0\ \Rightarrow \ i\ge k+j </math>
<math> P'[i]=j,\ P'[j]=k>0\ \Rightarrow \ i\ge k+j </math>
Fakt ten wynika z lematu o okresowości i z definicji tablicy P'.
Fakt ten wynika z lematu o okresowości i z definicji tablicy P'.
  </div>
  </div>
Linia 218: Linia 217:


''(Rozwiązanie opracował Marcin Pilipczuk)''
''(Rozwiązanie opracował Marcin Pilipczuk)''
</div>
</div>
=='''Zadanie 9''' ==
Słowa cykliczne (de Bruijna):
Słowo binarne w długości dokładnie <math> 2^n </math> 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 := \emptyset ; wynik :=  słowo puste;
3  while istnieje <math>b \in \{0,1\}</math> takie, że <math>Append(Cutfirst(x),b)\notin  Z</math>  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.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
Zadanie ma to związek z pewną metodą konstrukcji cyklu Eulera, chociaż zadanie pozornie wydaje się nie mieć nic wspólnego z grafami.
Mamy tu do czynienia z grafem ktorego węzłami są wszystkie słowa binarne długości n-1.
Istnieje krawędż u \rightarrow v o etykieci a, gdy Append(Cutfirst(u),a)=v.
Ciąg operacji w algorytmie Słowa-Cykliczne odpowiada zachłannej ścieżce Eulera która startuje z węzła <math>1^{n-1}</math>. patrz zadania w module Algorytmy grafowe.
</div>
</div>
</div>
</div>

Wersja z 17:02, 31 sie 2007

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 := \emptyset ; 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