Zadanie 1 Zadanie 2 Zadanie 3 Zadanie 4 Zadanie 5 Zadanie 6
Transkrypt
Zadanie 1 Zadanie 2 Zadanie 3 Zadanie 4 Zadanie 5 Zadanie 6
1 Zadania przykładowe do kolokwium z AA2 Zadanie 1 Dla tekstu ALA MA KOTA ALE ON MA ALERGIĘ zilustruj działanie algorytmów: a) LZ77, b) LZ78, c) LZSS. Załóż, że maksymalna długość dopasowania to 4, rozmiar okna to 8. Zadanie 2 Odczytaj tekst 010100111100011010000 zakodowany kodem Huffmana wiedząc, że częstość występowania symboli w tekście jest następująca: A (3), B (1), K (1), R (4), M (1). Gdyby w trakcie budowy drzewa Huffmana miała miejsce sytuacja, że do wyboru są więcej niż dwa węzły, wybierz węzły opisane literami najwcześniejszymi w porządku alfabetycznym. Zadanie 3 Wygeneruj wszystkie możliwe kody Huffmana dla tekstu ABRACADABRA. Zadanie 4 Poznany kod Huffmana jest kodem binarnym. Możliwe, i czasami stosowane w praktyce, są jednak także niebinarne kody Huffmana. Kod taki tworzy się w analogiczny sposób jak binarny kod Huffmana. Zamiast łączenia węzłów w pary łączy się je w grupy po k węzłów oraz opisuje krawędzie symbolami od 0 do k − 1 otrzymując drzewa k-arne. Utwórz w ten sposób: • trójkowy kod Huffmana dla tekstu ABRACADABRA, • czwórkowy kod Huffmana dla tekstu KALORYFEROWNIA. Zadanie 5 Przy założeniu, że maksymalna długość dopasowania wynosi 256, rozmiar okna to 65536, a rozmiar alfabetu to 4 oszacuj dla algorytmu LZSS minimalny współczynnik kompresji (wyrażony w bps). Dla uproszczenia załóż, że kodowany tekst jest bardzo długi i nie bierz jego rozmiaru pod uwagę. Przez minimalny rozumiemy taki współczynnik kompresji, który ma miejsce w sytuacji, kiedy tekst kompresuje się najgorzej jak to jest możliwe. Zadanie 6 Podaj przykład tekstu długości 6 (wliczając wartownika), dla którego łączna liczba symboli opisujących krawędzie w drzewie sufiksów jest maksymalna. Podaj regułę tworzenia takich „najgorszych” tekstów. 2 Zadanie 7 Zbuduj drzewa sufiksów dla tekstów: • mississippi, • katarakta. Zadanie 8 Zbuduj uogólnione drzewo sufiksów dla zbioru tekstów: {Ola, Ala, Ania, Asia}. Zadanie 9 Zbuduj uogólnione drzewo sufiksów dla tekstów {tekstowy, rajstopy} i znajdź za jego pomocą najdłuższe wspólne podsłowo tych tekstów. Zadanie 10 Zilustruj proces wyszukiwania najdłuższego podsłowa, którego wersja zapisana od końca także występuje w tekście abarcdrabde. W tym celu: zbuduj uogólnione drzewo sufiksów, wyznacz węzeł o największej głębokości, odczytaj pozycję znalezionego podsłowa. Zadanie 11 Zaproponuj liniowy algorytm znajdujący najdłuższe powtarzające się podsłowo w tekście. Przykładowo dla tekstu abracadabra wynikiem ma być abra. Zastanów się nad dwoma wersjami tego problemu: • podsłowa nie mogą na siebie nachodzić, • podsłowa mogą na siecie nachodzić. Zadanie 12 Zbuduj tablice sufiksów dla tekstów: • mississippi, • katarakta. Zadanie 13 Federacja kolarska musi utworzyć reprezentację na Wielki Wyścig Tandemów. W trakcie dobierania zawodników w pary doszło do konfliktu, gdyż okazało się, że część zawodników nie chce wystąpić ze sobą w jednej parze. Aby rozwiązać problem rozesłano wśród zawodników ankiety, w których każdy miał się wypowiedzieć, 3 z kim może utworzyć parę. Jeżeli zawodnicy o numerach X i Y mogą utworzyć jedną parę, to fakt ten zapisujemy w następujący sposób: X – Y . Mając dane wyniki ankiety należy dobrać zawodników w pary tak, aby liczba utworzonych par była maksymalna i oczywiście każdy zawodnik był przypisany tylko do jednej pary. Zaproponuj algorytm (zapisz jego pseudokod) umożliwiający rozwiązanie powyższego problemu. Wykonaj algorytm (przedstaw kolejne etapy działania) dla listy podanej poniżej: 1 2 3 4 5 6 7 8 9 – – – – – – – – – 6 7 6 5 2 4 1 3 1 Zadanie 14 Zaproponuj modyfikację procedury FWUC (rys. 1), która umożliwi wyznaczenie ujemnego cyklu, a nie tylko jego wykrycie. Zapisz treść zmodyfikowanej procedury FWUC. Zadanie 15 Bankring polega na przełamywaniu prawno-technicznych zabezpieczeń związanych z funkcjonowaniem banków nie naruszając ich regulaminów. Wiele banków za zdeponowanie pieniędzy wypłaca prowizję. Tak więc przelewając pieniądze z banku X do banku Y ponosimy z jednej strony koszty związanie z opłatą za przelew bankowy, z drugiej strony za zdeponowane pieniądze bank przelewa nam prowizję. Cała operacja kosztuje nas kwotę jaką stanowi różnica pomiędzy opłatą za przelew, a prowizją. Zakładając, że mamy założone konta w różnych bankach można wyobrazić sobie sytuację, w której po wprowadzeniu w obieg stałej kwoty, stan kont będzie ciągle wzrastał. Jeśli przelew z banku X do banku Y kosztuje nas K złotych, to fakt ten zapisujemy: X → Y K, np. zapis: Bank A → Bank B 10 oznacza, że przelew z Banku A do Banku B będzie nas kosztował 10 złotych (różnica między opłatą, a prowizją). Zaproponuj algorytm (podaj pseudokod), który dla zadanej listy opisującej przelewy i ich koszty wyznaczy ciąg banków, który będzie generował wzrost stanu na koncie. Wykonaj algorytm (przedstaw kolejne etapy działania) dla listy podanej poniżej: Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank 1 1 1 2 2 2 3 3 3 3 4 4 5 → → → → → → → → → → → → → Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank Bank 2 3 5 1 3 5 1 2 4 5 1 5 4 2 4 −3 2 8 1 6 −2 4 3 1 5 1 Zadanie 16 Mrówki postanowiły dokonać zapasów na najbliższą zimę. Mapa mrowiska została przedstawiona na poniższym rysunku. 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 {Wejście: macierz D będąca macierzą wag łuków} {Wyjście: informacja o występowaniu w grafie ujemnego cyklu} procedure FWUC(D); begin uc := false; k := 1; for i := 1 to n do {wyznaczenie macierzy D0 } d[i, i] := 0; end for; while not uc and k ¬ n do i := 1; while not uc and i ¬ n do {wyznaczenie macierzy Dk } if d[i, k] 6= ∞ then if d[i, k] + d[k, i] < 0 then {znaleziono ujemny cykl} uc := true; else for j := 1 to n do d[i, j] := min{d[i, j], d[i, k] + d[k, j]}; end for; end if; end if; i := i + 1; end while; k := k + 1; end while; end. Rys. 1. Algorytm wykrywania ujemnego cyklu za pomocą algorytmu Floyda–Warshalla 5 2 * HH @ 9 HH4 6@ 2 HH ? R @ j 10 7 - 7 4 3 H * HH 15 6 HH 5 j H 6 1 Mrowisko ma dwa wejścia znajdujące się odpowiednio w punktach 1 i 2, a także jedną spiżarnię znajdującą się w punkcie 7. Mrówki transportują pokarm z wejść do spiżarni, przy czym korytarzem łączącym dwa punkty mogą w ciągu jednego dnia przenieść ograniczoną ilość pokarmu (na rysunku zaznaczono ile maksymalnie pokarmu są w stanie przenieść mrówki). Stosując jeden z algorytmów przedstawionych na zajęciach, wyznacz maksymalną ilość pokarmu jaką są w stanie przenieść mrówki z wejść do spiżarni w ciągu jednego dnia. Nazwij zastosowany algorytm i przedstaw kolejne etapy jego działania. Zadanie 17 5 Stosując algorytm Forda-Fulkersona wyznacz maksymalny przepływ w sieci ze źródła s = 1 do ujść t1 = 6 i t2 = 7. Przedstaw kolejne kroki wyznaczania rozwiązania. Przy wyznaczaniu ścieżki powiększającej do ścieżki jest zawsze włączany wierzchołek o jak najmniejszym numerze. - 4 - 6 2 4 6 @ 9 @ @ 3@ 5 8 1 @ @ @ 10 @ ? @ R R 8 @ 2 - 5 - 7 3 Zadanie 18 Bajtolini zamierza otworzyć swoją firmę programistyczną, niestety zamieszkuje on krainę gdzie panuje ogromna biurokracja. Przed założeniem firmy należy odwiedzić szereg urzędów gdzie należy pobrać odpowiednie druki, które z kolei należy złożyć w innych urzędach. Czasem nie jest możliwe pobranie druków z urzędu jeżeli wcześniej nie zostały w nim złożone druki pobrane z innego urzędu. Jeżeli w urzędzie X należy pobrać druk, który ma być złożony w urzędzie Y , to fakt taki zapisujemy w następujący sposób: X → Y . Dla tak podanego opisu składania druków w urzędach należy zaproponować algorytm, który umożliwi odpowiedź na pytanie, w jakiej kolejności należy odwiedzać poszczególne urzędy aby założyć firmę (należy skorzystać z jednego z algorytmów, które zostały przedstawione w trakcie zajęć). Zaproponowany algorytm należy wykonać dla następujących danych: 1 1 2 3 3 3 4 7 → → → → → → → → 5 6 1 1 2 5 1 1 Zadanie 19 Wykonać algorytm Johnsona dla grafu składającego się z czterech wierzchołków, opisanego macierzą wag. 1 2 3 4 1 ∞ 5 1 ∞ 2 ∞ ∞ ∞ 2 3 ∞ -3 ∞ ∞ 4 -4 ∞ 2 ∞ Zadanie 20 Wykaż, że jeżeli graf nie zawiera cykli o ujemnej długości, to po wykonaniu algorytmu Bellmana-Forda dla każdego łuku (u, v) spełniona jest zależność: d[v] ¬ d[u] + w(u, v), gdzie d[v] i d[u] są równe długości 6 najkrótszej ścieżki z ustalonego wierzchołka źródłowego do wierzchołków odpowiednio v i u, a w(u, v) jest wagą łuku (u, v). Zadanie 21 Zilustruj działanie operatora krzyżowania PMX dla genomów (reprezentacja ścieżkowa): • 15348627 oraz 31528647 jeśli punkty cięcia to: 2 i 5, • 32154876 oraz 12345678 jeśli punkty cięcia to: 3 i 5. Zadanie 22 Zilustruj działanie algorytmu krzyżowania jednopunktowego genomów (reprezentacja ścieżkowa): • 15348627 oraz 31528647 jeśli punkty cięcia to: 2, • 32154876 oraz 12345678 jeśli punkty cięcia to: 4. Zadanie 23 Zilustruj działanie algorytmu krzyżowania dwupunktowego genomów (reprezentacja ścieżkowa): • 15348627 oraz 31528647 jeśli punkty cięcia to: 2 i 5, • 32154876 oraz 12345678 jeśli punkty cięcia to: 3 i 5. Zadanie 24 Zilustruj działanie algorytmu krzyżowania jednopunktowego genomów (reprezentacja binarna): • 0110101011 oraz 1101010110 jeśli punkty cięcia to: 5, • 0110101101 oraz 0010001010 jeśli punkty cięcia to: 4. Zadanie 25 Zilustruj działanie algorytmu krzyżowania dwupunktowego genomów (reprezentacja binarna): • 0110101011 oraz 1101010110 jeśli punkty cięcia to: 2 i 5, • 0110101101 oraz 0010001010 jeśli punkty cięcia to: 4 i 7. Zadanie 26 Celem jest znalezienie ciągu bitowego zawierającego same jedynki. Wobec tego funkcja oceny zwraca wartość będącą liczbą jedynek w genomie. Populacja początkowa składa się z następujących osobników: 7 • 0101001011, • 0110110110, • 1010111010, • 0101000110, • 0000110100, • 1110100111. Stosując metodę ruletki wyznacz osobniki do krzyżowania zakładając, że generator liczb losowych generuje następujący ciąg liczb z zakresu [0, 100): 15, 12, 58, 35, 47, 91. Następnie wykonaj krzyżowanie jednopunktowe przy założeniu punktów cięcia: 3, 5, 7 oraz oceń uzyskane osobniki. Podaj średnią wartość funkcji przystosowania w populacji początkowej oraz populacji otrzymanej. Zadanie 27 Dany jest problem komiwojażera dla 7 miast. Odległości pomiędzy miastami definiuje poniższa tabela. A B C D E F G A — 3 5 4 3 12 8 B 3 — 7 11 8 15 4 C 5 7 — 22 4 10 8 D 4 11 22 – 8 9 7 E 3 8 4 8 — 13 6 F 12 15 10 9 13 — 4 G 8 4 8 7 6 4 — Zilustruj 10 etapów algorytmu symulowanego wyżarzania rozwiązującego ten problem przy następujących założeniach: • początkowe rozwiązanie to ABCDEFG, • przez ruch należy rozumieć zamianę kolejności dwóch miast sąsiadujących z sobą w aktualnej trasie, • kolejne temperatury w schemacie schładzania to: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, • kolejne liczby losowe z zakresu [0, 1) generowane przez generator to: 0.3, 0.4, 0.9, 0.2, 0.4, 0.5, 0.9, 0.1, 0.3, 0.8, • w kolejnych etapach losowane są następujące ruchy: 1–2, 3–4, 4–5, 5–6, 1–2, 7–1, 3–4, 2–3, 1–2, 5–6.