ASD Ćwiczenia 14: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „<math> ” na „<math>” |
|||
(Nie pokazano 14 wersji utworzonych przez 4 użytkowników) | |||
Linia 1: | Linia 1: | ||
=='''Zadanie 1'''== | =='''Zadanie 1'''== | ||
Dane są teksty x, y. Oblicz najdłuższy tekst <math>z</math> (oznaczany LCS(x,y) od ang. Longest Common Subword), | |||
Dane | 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 8: | 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$. | 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 '' | 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 | można było potem łatwo wyliczyć odpowiedni węzeł. Podobnie rozwiązujemy problem dla wielu słów x,y ,.. . | ||
</div> | </div> | ||
</div> | </div> | ||
=='''Zadanie 2'''== | =='''Zadanie 2'''== | ||
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 | wszystkich niepustych podsłów x wynosi | ||
Linia 29: | 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 | Liczba ta jest równa sumie wag krawędzi drzewa sufiksowego. Wzór z zadania wynika z konstrukcji drzewa | ||
sufiksowego | sufiksowego opierającej się na tablicy sufiksowej i tablicy <math>lcp</math>. | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 37: | Linia 34: | ||
=='''Zadanie 3'''== | =='''Zadanie 3'''== | ||
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> | 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) | <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> | <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] | 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 62: | Linia 57: | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Wynika ze struktury tablicy lcp, | 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 68: | Linia 63: | ||
=='''Zadanie 5'''== | =='''Zadanie 5'''== | ||
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 | Zastosuj algorytm obliczania tablicy sufiksowej do słowa xx. | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 80: | Linia 74: | ||
=='''Zadanie 6'''== | =='''Zadanie 6'''== | ||
Pokaż, że jeśli mamy tablicę sufiksową dla słowa compress(x) to można łatwo | 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 | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Tablica sufiksowa dla słowa compress(x) składa się z dwóch ''połówek'', kodują one | 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 (oznaczany LCS(x,y) od ang. Longest Common Subword), który jest jednocześnie podsłowem x i y.
Rozwiązanie
Zadanie 2
Niech będzie tablicą najdłuższych wspólnych prefiksów dla słowa x oraz niech będzie sumą elementów tablicy . Uzasadnij, dlaczego liczba wszystkich niepustych podsłów x wynosi
Rozwiązanie
Zadanie 3
Wyprowadź wzór na
Rozwiązanie
Zadanie 4
Niech . Udowodnij, że
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