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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rytter (dyskusja | edycje)
Nie podano opisu zmian
m Zastępowanie tekstu – „<math> ” na „<math>”
 
(Nie pokazano 11 wersji utworzonych przez 4 użytkowników)
Linia 1: Linia 1:
=='''Zadanie 1'''==
=='''Zadanie 1'''==
Dane sa teksty x, y, oblicz najdłuższy tekst z (który oznaczamy LCS(x,y) od ang. Longest Common Subword)
Dane teksty x, y. Oblicz najdłuższy tekst <math>z</math> (oznaczany LCS(x,y) od ang. Longest Common Subword),
który jest jednocześnie podsłowem x, y.
który jest jednocześnie podsłowem x i y.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Linia 7: Linia 7:


<div class="mw-collapsible-content" style="display:none">
<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  
Konstruujemy drzewo sufiksowe dla tekstu x#y$. LCS(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
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
się w x, i numer sufiksu zaczynającego się w y. Drzewo trzeba odpowiednio ''wstępnie przetworzyć'' bottom-up, żeby
można było potem łatwo wyliczyć odpowiedni węzeł. Podobnie rozwiazujemy dla wiely słów x,y ,.. .
można było potem łatwo wyliczyć odpowiedni węzeł. Podobnie rozwiązujemy problem dla wielu słów x,y ,.. .
  </div>
  </div>
</div>
</div>
Linia 17: Linia 17:


Niech <math>lcp</math> będzie tablicą najdłuższych wspólnych prefiksów dla słowa x oraz niech
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  
<math>SUMA(lcp)</math> będzie sumą elementów tablicy <math>lcp</math>. Uzasadnij, dlaczego liczba  
wszystkich niepustych podsłów x wynosi
wszystkich niepustych podsłów x wynosi




Linia 26: Linia 26:


<div class="mw-collapsible-content" style="display:none">
<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  
Liczba ta jest równa sumie wag krawędzi drzewa sufiksowego. Wzór z zadania wynika z konstrukcji drzewa  
sufiksowego opiuerającej się na tablicy sufiksowej i tablicy <math>lcp</math>.  
sufiksowego opierającej się na tablicy sufiksowej i tablicy <math>lcp</math>.  
  </div>
  </div>
</div>
</div>
Linia 34: Linia 34:
=='''Zadanie 3'''==
=='''Zadanie 3'''==


Policz wzór na <math>|Subwords(F_n)|</math>
Wyprowadź wzór na <math>|Subwords(F_n)|</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">
Oznaczmy <math> Sub(n)=|Subwords(F_n)|</math>, niech <math> \Phi_n</math> będzie n-tą liczba Fibonacciego.
Oznaczmy <math>Sub(n)=|Subwords(F_n)|</math> i niech <math>\Phi_n</math> będzie n-tą liczba Fibonacciego.
Wtedy
Wtedy


<center><math>Sub(n+1)\ =\ Sub(n) + \Phi_{n-3}\cdot \Phi_{n-1} + \Phi_{n-2}\cdot (\Phi_{n-1}+2)
<center><math>Sub(n+1) = Sub(n) + \Phi_{n-3}\cdot \Phi_{n-1} + \Phi_{n-2}\cdot(\Phi_{n-1}+2)
</math></center>
</math></center>


<center><math>{Sub(n)\ =\
<center><math>Sub(n) = \Phi_{n-1} \Phi_{n-2}+2\cdot \Phi_{n-1}-1</math></center>
\Phi_{n-1}\Phi_{n-2}+2\cdot \Phi_{n-1}-1</math></center>
  </div>
  </div>
</div>
</div>


=='''Zadanie 4'''==
=='''Zadanie 4'''==


Niech  <math>lcp'[k]\ =\ lcp[rank[k]-1]</math>.
Niech  <math>lcp'[k]= lcp[rank[k]-1]</math>.
Udowodnij, że <math>lcp'[k]\ge lcp'[k-1]-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">
Linia 59: Linia 57:


<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
Wynika to ze struktury tablicy lcp oraz z tego, że kolejno rozważane słowa powstają z poprzednich
przez obcięcie pierwszej litery.
przez obcięcie pierwszej litery.
  </div>
  </div>
Linia 65: Linia 63:


=='''Zadanie 5'''==
=='''Zadanie 5'''==
Opisz liniowy  algorytm liczący tablicę ROT, zakładając, że mamy liniowy algorytm liczenia tablicy sufiksowej.
Opisz liniowy  algorytm obliczania tablicę ROT, przy założeniu, że mamy liniowy algorytm obliczania tablicy sufiksowej.
<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">
Zastosuj algorytm na liczenie tablicy sufiksowej do słowa xx
Zastosuj algorytm obliczania tablicy sufiksowej do słowa xx.
  </div>
  </div>
</div>
</div>
Linia 76: Linia 74:
=='''Zadanie 6'''==
=='''Zadanie 6'''==


Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x) to można łatwo policzyć SUF[M] w czasie liniowym
Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x), to można łatwo obliczyć SUF[M] w czasie liniowym.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
Rozwiązanie
Linia 83: Linia 81:
Tablica  sufiksowa dla słowa compress(x) składa się z dwóch ''połówek'', kodują one słowa zaczynające się na pozycjach  
Tablica  sufiksowa dla słowa compress(x) składa się z dwóch ''połówek'', kodują one słowa zaczynające się na pozycjach  
odpowiedni i mod 3 =1, oraz i mod 3 =2.  
odpowiedni i mod 3 =1, oraz i mod 3 =2.  
</div>
</div>
=='''Zadanie 7''' ==
''(Teksty-> Grafy)'' Dany jet zbiór tekstów długości dwa. Wyznaczyć długość minimalnego tekstu, zawierającego teksty wejściowe.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
<br>
Zadanie sprowadza się do policzenia minimalnego ( w sensie liczności) zbioru rozłącznych ścieżek w grafie
skierowanym, które zawierają wszystkie krawędzie. Krawędzie odpowiadają słowom wejściowym,
wierzchołki grafu odpowiadają literom.
<br>
Zadanie było na olimpiadzie informatycznej pod nazwą ''Pierwotek abstrakcyjny'', miało rozwiązanie w czasie liniowym.
</div>
</div>
=='''Zadanie 8''' ==
Dany jest zbiór X tekstów binarnych. Sprawdzić czy istnieje nieskończenie wiele słów  binarnych nie
zawierających żadnego elementu z X jako podsłowo.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
<br>
Opiszemy operacje redukcji tekstu. Jeśli w zbiorze X są teksty ua, vb, gdzie a,b są różnymi cyframi binarnymi
oraz u jest sufiksem v (np. gdy <math>u=v</math>) , to zastępujemy w X słowo vb przez słowo v. Inaczej mówiąc wykonujemy operację:
<br>
''redukcja'': vb -> v
<br>
Algorytm wykonuje wszelkie redukcje póki się da (w dowolnym porządku). Jeśli otrzymamy słowo puste
to odpowiedź jest ''NIE'', w przeciwym wypadku ''TAK''.
<br>
Zadanie było na olimpiadzie informatycznej pod nazwą ''Wirusy'', miało rozwiązanie w czasie liniowym.
</div>
</div>
=='''Zadanie 9''' ==
Udowdnij, że dla słów Fibonacciego kończących się na literę 'a'
tablica sufksowa jest postępem arytmetycznym modulo długość słowa.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
<br>
Zobacz jakie są zależności między słowami Fibonacciego i zapisem kolejnych liczb
naturalnych w systemie liczbowym Fibonacciego.
</div>
</div>
</div>
</div>

Aktualna wersja na dzień 10:36, 5 wrz 2023

Zadanie 1

Dane są teksty x, y. Oblicz najdłuższy tekst z (oznaczany LCS(x,y) od ang. Longest Common Subword), który jest jednocześnie podsłowem x i 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

Wyprowadź 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 obliczania tablicę ROT, przy założeniu, że mamy liniowy algorytm obliczania tablicy sufiksowej.

Rozwiązanie

Zadanie 6

Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x), to można łatwo obliczyć SUF[M] w czasie liniowym.

Rozwiązanie


Zadanie 7

(Teksty-> Grafy) Dany jet zbiór tekstów długości dwa. Wyznaczyć długość minimalnego tekstu, zawierającego teksty wejściowe.

Rozwiązanie


Zadanie 8

Dany jest zbiór X tekstów binarnych. Sprawdzić czy istnieje nieskończenie wiele słów binarnych nie zawierających żadnego elementu z X jako podsłowo.

Rozwiązanie


Zadanie 9

Udowdnij, że dla słów Fibonacciego kończących się na literę 'a' tablica sufksowa jest postępem arytmetycznym modulo długość słowa.

Rozwiązanie