Dr hab. Andreas Zastrow, Prof. UG Sem. Zim. 2017/18 Przyk ladowe Kolokwium z Algorytmów i Struktur Danych (Zad. obu kolokwiach) Dla wszystkich zadań: Proszȩ uzasadnić wszystkie odpowiedzi. Proszȩ albo uzasadnić przekszta lcenia wzorów albo zaprezentować przekszta lcenia wzorów z tak a szczegó lowości a, aby zasady przekszta lceń by ly jasne. Podczas kolokwium nie wolno korzystać z komputerów, kalkulatorów, ksiażek, tablic matematycznych ani z osobistych notatek z wykladu lub ćwiczeń. Aby uzasadnić odpowiedzi mog a państwo nie tylko korzystać z naszych ćwiczeń i wyk ladów, ale z ca lego z a p a m i ȩ t a n e g o materia lu nauki nabytego w trakcie studiów i szkol ly aż do stanu znajomości państwa jako studentów drugiego roku.!!! Nie wolno cytować wyników konkretnych przypadków, trzeba je na nowo obliczyć!!! Z a d a n i a: I/1) Uzasadnij, czy prawdziwe s a równości a) f(n) = O(g(n)), b) f(n) = Θ(g(n)), c) f(n) = Ω(g(n)) (n N) dla f(n) = 3 7 n+6 (5 n+4) 8 (ln(3 n n4 +2)) 9 i dla wszystkich g {n a n n m (log(n)) k a 1, k,m 0} := W I/2) Przypuśćmy, że zastȩpujemy fragment algorytmu INSERTION-SORT ( sortowanie przez wstawenie ) wstawiaj acy w odpowiedniej pozycji element A[k] w posortowan a listȩ (A[1],...,A[k 1]) przez inny fragment podany poniżej (k 3): IF (A[k] A[k 1]) THEN Wstaw A[k] po A[k 1] GOTO (**) ELSE-IF (A[k] A[1]) THEN Wstaw A[k] przed A[1] GOTO (**) d := 1 g := k 1 (*) j := (d+g)/2 IF (A[k] > A[j]) d := j IF (A[k] A[j]) g := j IF (g d 2) GOTO (*) Wstaw A[k] bezpośrednio przed A[g] (**)... Druck am 7. 10. 2018 um 17:1 Uhr 1 Datei: Poprawke WS17/18
Za lóżmy, że trzymamy dane w takich strukturach, że polecania typu"wstaw... przed/ po..." s a wykonalne w sta lym czasie c niezależnym od d lugości listy. Proszȩ odpowiedzieć na nastȩpuj ace pytania: (a) Jaki jest optymistyczny i pesymistyczny czas dzia lania powyżej podanej podprocedury? Proszȩ podać wynik w formie Ω(f 0 (k)) lub odp. O(g 0 (k)), gdzie f 0 i g 0 s a najlepszymi możliwymi oszacowaniami przez typowe funkcje wrostu (t.zn. przez funkcje zawarte w zbiorze W z Zad.I/1). (b) Jaki jest optymistyczny i pesymistyczny czas dzia lania algorytmu sortowania listy o n elementach, jeśli algorytm różni siȩ od algorytmu INSERTION-SORT, w sposób podane powyżej? Proszȩ podać wynik w formie Ω(f(n)) lub odp. O(g(n)), gdzie f i g s a najlepszymi możliwymi oszacowaniami przez typowe funkcji wrostu. I/3.) Dany jest nastȩpuj acy ci ag liczb: [76,78,64,62,73,61,71,68] Dla podanego ci agu zdecyduj, które z poniżej podanych operacji s a dopuszczalne, jeśli a) nasz ci ag jest podany w stosie. b) nasz ci ag jest podany w kolejce. Pokaż jak zmienia siȩ nasz ci ag liczb w trakcie dzia lania ci agu dopuszczalnych operacji. A1.) wstaw "67" miȩdzy czwartym a pi atym elementem, A2.) dodaj "66" jako element, A3.) dodaj "73" do końca ci agu, A4.) dodaj "77" na pocz atku ci agu, A5.) dodaj "72" jako element, A6.) usuń jeden element, A7.) usuń szósty element, A8.) usuń jeden element na pocz atku ci agu. c) Wykonaj te operacje interpretuj ac podany powyżej ci ag jako listȩ dwukierunkow a. Proszȩ też dopisać, jak zmienaj a siȩ wskaźniki w ci agu dopuszczalnych operacji. Niejednoznacznie zdefiniowane operacji maj a być zignorowane. I/4a) Traktuj ac podany ci ag [55,45,50,56,52,51,46,42,41,43,59] jak kopiec, wykonej nastȩpuj acy ci ag tych operacji, które s a dopuszczalne i jednoznacznie zdefiniowane: B1) dodaj liść z wartości a "58", B2) dodaj liść z wartości a "57" do liścia o najniższym numerze, B3) dodaj liść z wartości a "48" do wȩzl/a nr.6, B4) dodaj liść z wartości a "47" do wȩzl/a z wartości a "51", B5) usuń wȩzel/ z nr.6 i pol/ acz jego dzieci z jego rodzicem, B6) dodaj liść z wartości a "40" do wȩzl/a nr.4, B7) Usuń najbardzej skrajny na lewo liść. B8) Pol/ acz krawȩdzi a wȩzl/y nr.5 i nr.3. Druck am 7. 10. 2018 um 17:1 Uhr 2 Datei: Poprawke WS17/18
Czy wyniki dla a) zmieni a siȩ, jeśli próbujemy wykonywać operacje B1) B8) dla tych samych danych wejściowych b) na drzewach ogólnych, c) na drzewach binarnych. Jeśli tak, to proszȩ powiedzieć w jaki sposób one siȩ zmieniaj a. Przedstaw wszystkie odpowiedzi tego zadania rysunkowo na drzewach. I/5.) Rozpatrujemy zwyk le wyrażenia matematyczne typu [ 17 ] 13 (a b)k (c 5) m + (a 2 k b 2 k) /(c 2 m d 2 m) = 1 k=1 o nieznanej d lugości n. Chcemy sprawdzić programem poprawność budowania takich wyrażeń. Wyrażenie jest trzymane jako ci ag znaków w kolejce. Program ma pamiȩc robocz a o ma lej ustalonej ilości miesc, i ma jako dodatkow a pamiȩc jeden pocz atkowo pusty stos. Dostȩp do danach trzymanych w kolejce i w stosie jest ograniczone regu lami definuj acymi kolejkȩ lub odpowiednio stos. a) Czy to zadanie jest wykonalne w czasie O(n)? b) Czy państwo uważaj a, że powyższe wyrażenie jest formalnie poprawnie zbudowane? Jeśli Tak, to czy powyższe wyrażenie zawiera aspekt, który lepiej unikać w pracach matematycznych? Dod1) Dane s a kolejka i pocz atkowo pusty stos. Elementami kolejki s a bloki. Każdy pojedynczy blok jest tak duży, że nie mieście siȩ w pamiȩci roboczej, i że należy unikać ich podwajania. Opisz s lowami lub w pseudokodzie lub w diagramie m adre dzia lanie programu, który sortuje bloki w kolejce. Program może czytać jedynie pierwszy blok w kolejki, oraz pierwsze blok stosu. O blokach w kolejce wiadomo, że nie wystȩpuje w nich określone kombinacje danych. II/1) Nastȩpuj acy program drukuje kilka linii typu FROM (x 0,y 0 ) TO (x 1,y 1 ), które stanowi a iston a czȩść polecenia dla programu graficznego rysuj acego fraktal. Znaczeniem każdego z poleceń jest narysowanie odcinka miȩdzy wspó lrzȩdniami (x 0,y 0 ) i (x 1,y 1 ). a) Proszȩ opisać dzia lanie tego programu, w szczególności pokazać jak rozwija siȩ stos iterowanych wywo lań procedury rekurencyjnej zawartej w tym kodzie. b) Proszȩ naszkicować wynik dzia lania programu. PROGRAM DRAW x := 0.5 y := 0.5 v := (1,0) l := 0.4 CALL DRAWNEXT(x,y,v,l) v := v CALL DRAWNEXT(x, y, v, l) END (PROGRAM) -------------------------------------------------- Druck am 7. 10. 2018 um 17:1 Uhr 3 Datei: Poprawke WS17/18
PROCEDURA DRAWNEXT(x, y, v, l) IF (l < 0.1) GOTO (**) x 0 := x y 0 := y x 1 := x + v(1) * l y 1 := y + v(2) * l PRINT FROM (, x 0,,, y 0, ) TO (, x 1,,, y 1, ) l 2 := l * 0.5 v 2 := ( ) ( 0 1 v(1) 1 0 v(2)) wed lug zasad mnożenia macierzy CALL DRAWNEXT(x 1,y 1,v 2,l 2 ) (**) END(PROCEDURA) Wskazówek: W Archiwum, jako AStD/C/Przkl/.1, illustracja dzial/ania tego programu jest podana. II/2a) Dane jest tabela TAB posiadaj acy m wierszy i n kolumn (n,m 2), w którym element stoj acy w i-tym wierzu i j-tej kolumny oznaczamy przez TAB[i, j]. Proszȩ podać formalny dowód poprawności dzia lania podanego poniżej algorytmu, którego celem jest znalezienie kolumny w tabeli liczb TAB, że maksimum spośród liczb tej kolumny jest nie wiȩksze niż analogiczne maksima innych kolumn. PROGRAM FIND-MINodMAXs C := 1 FOR j FROM 1 TO n B := TAB[1,j] A := 1 FOR i FROM 2 TO m IF (TAB[i,j] > B) THEN A := i B := TAB[1,j] END(FOR) IF (j=1) THEN D := A E := B ELSE IF (E > B) THEN E := B C := j D := A END(FOR) PRINT... END(PROGRAM) Druck am 7. 10. 2018 um 17:1 Uhr 4 Datei: Poprawke WS17/18
b) W powyższym pseudokodzie linia "PRINT" przedstawiaj aca końcowy wynik nie jest uzupe lniona. Proszȩ uzupe lnić t a liniȩ, tak, aby wynik (wartość najmniejszego maksimum wśród wszystkich kolumn, i jego pozycjȩ) by l podany w wygodnej dla użytkownika postaci. [Dla prawdziwych kolokwiach nastȩpuj ace zadanie bȩdzie raczej podane dla konkretnych omówionych algorytmów. Z natury przykl/adowego kolokwium wynika, że tutaj wybral/em też algorytm podany w pseudokodzie:] II/3a) Opisz s lownie dzia lanie algorytmu, który jest wersj a algorytmu BUBLESORT, ale dla danych zawartych w liście o nieznanej d lugości (wiȩc aby wykonywać parȩ z poniższych poleceń, trzeba wywo lywać lub wywo lywać iterowanie procedurȩ LIST SEACH). Nastȩpnie zilustruj dzia lanie podanej wersji BUBLESORT na przyk ladzie listy [2,4,3,1]. PROGRAM SORT LISTA (*) "aktualny element" staje siȩ ostatnym elementem listy. i := 0 (**) IF (aktualny element jest pierwszym elementem listy) THEN IF (i = 1) GOTO (*) IF (i = 0) THEN PRINT Lista posortowana skończ program poprawnie ELSE skończ program z b lȩdem IF (aktualny element jest mniejsze niż poprzedni element) THEN zamien kolejność obu elementów w liscie i := 1 aktualny element staje siȩ poprzednim elementem listy GOTO (**) END(PROGRAM) Wskazówek: W Archiwum, jako AStD/C/Przkl/.2, illustracja dzial/ania tego programu jest podana. II/4.) Dany jest kopiec [29,25,36,26,37,22,34,33,28,31,39,35,23,24] a) Proszȩ pokazać jak zmienia siȩ dany kopiec w trakcie dzia lania procedury BUILD MAX HEAP. b) Kopiec, który jest wynikiem dzia lania procedury z podpunktu (a) zostaje wykorzystany jako kolejka priorytetowa. Zdecyduj, które z poniżej podanych operacji s a Druck am 7. 10. 2018 um 17:1 Uhr 5 Datei: Poprawke WS17/18
dopuszczalne na kolejkach priorytetowych. Pokaż jak zmienia siȩ kopiec w trakcie dzia lania ci agu dopuszczalnych operacji. C1) Zmień priorytet wȩzl/a nr.12 na "21". C2) Podaj wartość korzenia. C3) Zmień priorytet "22" na nowy równy "38" C4) dodaj liść z priorytetem "20" do wȩzl/a nr.7 C5) dodaj liść z priorytetem "30" do liścia z priorytetem "25" C6) dodaj element z priorytetem 27 do kolejki. C7) Zmień priorytet wȩzl/a nr.11 na 32. C8) Usuń najbardzej skrajny na lewo liść. C9) Podaj maksimum i usuń je. C10) Usuń liść z najmniejszym priorytetem. C11) Podaj minimum. C12) Usuń liść z priorytetem 24. Przedstaw rozwi azanie rysunkowo na drzewach. II/5a) W zadaniu II/3 wystȩpuje wersja algorytmu BUBBLESORT zaadoptowana dla danych trzymanych na liście. Podaj aspekty zastosowania tej wersji algorytmu, gdzie on wystȩpuje istotnie różnie niż w standardowej wersji, omówionej na ćwiczeniach. b) Rozważ czy w aspektach podanych w punkcie (a) dzia lanie algorytmu zwalnia czy przyśpiesza w porównaniu z wersj a standardow a. Czy tak siȩ dzieje zawsze czy jedynie dla pewnych danych? Oszacuj w jakim stopniu to zachodzi. c) Rozważmy sytuacjȩ, gdy lista z zadania II/3 jest umieszczona na dysku konkretnego typu. Bior ac pod uwagȩ aspekty zwalniaj ace algorytm BUBBLESORT podane w punkcie (a), rozważ czy można ulepszyć standardow a wersjȩ tego algorytmu dla danych na liście aby unikn ać takiego spowolnienia programu. Opisz s lowami jak to zrobić. Spróbuj w ten sposób rownież ulepszyć pseudokod z zadania II/3. Dod2a) W zadaniu I/2 wystȩpuje wersja algorytmu INSERTION-SORT zaadoptowana dla struktur danaych, które dopuszczaj a proste operacje typu "wstaw...przed/po...". Proszȩ opisać przeszkody w realizacji tego pomys lu przyspieszenia czas dzia lania obliczonego w rozwi azaniu zadania I/2, jeśli dane s a trzymane (i) w stosie, (ii) w kolejce, (iii) w liście dwukierunkowej, (iv) w kopcu typu max. b) Jaki rodzaj struktur danych umówionych na wyk ladzie nadaje siȩ nalepiej aby zrealizować pomys l przyspieszenia algorytm INSERTION-SORT, o którym by la mowa w Zad. I/2 oraz w czȩṡci a). Druck am 7. 10. 2018 um 17:1 Uhr 6 Datei: Poprawke WS17/18