Algorytmy i Struktury Dnyh, Rozwiązni zń z kolokwiów 2017-11 1 Klsówk 2007 (1), zni 1 Opruj strukturę nyh, któr pozwl wykonywć nstępują oprj: Ini(k):: inijj struktury nyh i ustlni ługośi krotk liz łkowityh n k Insrt(< 1, 2,..., k >):: oj o struktury krotkę < 1, 2,..., k > Min:: poj njmnijszą lksykogrfizni krotkę w strukturz ExtrtMin:: usuw njmnijszą lksykogrfizni krotkę z struktury W Twoim rozwiązniu oprj Insrt i ExtrtMin powinny y wykonywn w zsi O(log n + k) 2 Klsówk 2007 (1), zni 1 Uowonij, ż jśli lgorytm sortująy tlię A[1..n] porównuj i zmini wyłązni lmnty olgł o njwyżj o 2007 (tzn. jśli porównuj A[i] z A[j], to i j 2007), to jgo psymistyzny zs ziłni jst o njmnij kwrtowy. Rozwiązni: Pojynz zmin usuw O(1) inwrsji wię l iągu owrotni uporząkowngo (który m O(n 2 ) inwrsji) lgorytm wymg zsu Ω(n 2 ). 3 Klsówk 2008 (1), zni 2 Zproponuj wzogni kop zupłngo w tki sposó, ży fktywni w zsi zmortyzownym wykonywn yły oprj: Min, DltMin, Insrt, CountMin. Osttni oprj polg n poniu ktulnj lizy lmntów w kopu o wrtośi równj Min. Przprowź nlizę kosztu zmortyzowngo wykonni poszzgólnyh oprji. Rozwiązni: Wzogmy węzły kop o tryut ounteq oznzjąą lizę węzłów w porzwi zwirjąyh intyzną wrtość o tn zpisny w kluzu. Dzięki tkimu tryutowi CountMin jst oprją trywilną. Możmy tż ktulizowć wrtość tgo tryutu przy wszystkih oprjh kopowyh. 1
4 Klsówk 2009 (1), zni 1 Dn jst tli n n, n > 1, w którj w kż pol wpisno lizę łkowitą. Chmy przjść z olngo lwgo rogu (z (1, 1)) o górngo prwgo rogu (o (n, n) ) i wróić, ią w roz z (1,1) zwsz w prwo lu w górę, z powrotm - w lwo lu w ół. Z ngo pol możn przjść tylko n pol sąsini (współrzęn różnią się o 1 n okłni jnj pozyji). Żn pol ni moż się pojwić n łj trsi (zyli tm i z powrotm) więj niż rz, poz polm (1,1), któr pojwi się n pozątku i n końu trsy. Zprojktuj lgorytm znjowni njtńszj trsy, zyli tkij, n którj sum wrtośi pól jst njmnijsz. Rozwiązni: ynmik po przkątnyh 5 Klsówk 2010 (1), zni 2 Wykż, ż kży lgorytm znjująy minę w ziorz 5-lmntowym wykon w psymistyznym przypku o njmnij 5 porównń. Zproponuj lgorytm okonująy tgo z pomoą o njwyżj 6 porównń. Rozwiązni: Doln grni: zilimy wszystki prmutj {1,..., 5} n klsy strkji: (pozyj miny, ziór pozyji lmntów mnijszyh o miny). N przykł prmutj (5, 1, 4, 3, 2) nlży o klsy strkji (4, {2, 5}). Tkih kls strkji jst 5 (4 2) = 30. Dowoln rzwo porównń któr rozróżni wszystki klsy strkji musi mić wysokość h log 2 30 > 4. Zuwżmy, ż jśli lgorytm utożsmi jkiś wi klsy strkji to możmy skonstruowć n l któryh uzili niprwiłowj opowizi. Algorytm wykonująy 6 porównń. Porównj i, porównj i, porównj mx(, ) i mx(, ). Bz utrty ogólnośi > > i >. Nstępni: Konfigurj pozątkow < > < > > < 2
6 Klsówk 2011 (1), zni 1 Dnyh jst n słów o tkij smj ługośi k, zuownyh z znków n-lmntowgo, uporząkowngo lftu. Rozmirm zni w tym przypku jst R = nk. Zproponuj lgorytm, który l ngo i, 1 i k, olizy w zsi O(R) lizę wszystkih pr słów, któr różnią się tylko n i-tj pozyji. Zproponuj lgorytm, który olizy w zsi O(R) lizę wszystkih pr słów, któr różnią się tylko n okłni jnj pozyji. Rozwiązni: Zkłmy ż wszystki słow n wjśiu są różn (możmy to łtwo sprwzić). Dl owolngo i, j przz prf(i, j) oznzmy ko prfiksu słow w i ługośi j, hmy ży koy yły lizmi z zkrsu 1..n tkimi, ż, w i [1..j] = w q [1..j] wtw prf(i, j) = prf(q, j) (zyli mogą służyć o porównywni prfiksów ustlonj ługośi) Anlogizni finiujmy l sufiksów: suf(i, j). Rozwiązujmy w zsi O(n) kży prolm z oson l j 1..k (w tym kroku ęzimy lizyć pry słów któr różnią się okłni n j-tj pozyji) P = for i:=1..n o P += (prf(i, j 1), suf(i, k j), i) (zyli zpisujmy ko słow z j-tgo znku) posortuj lksykogrfizni trójki z P il:=0 forh grupy G trójk o tyh smyh wrtośih pirwszyh wóh lmntów o // owoln pr słów z G różni się jyni n j-tj pozyji il+ = G ( G 1)/2 Wrto zuwżyć, ż jśli jkiś w słow różnią się n okłni jnj pozyji to istnij tylko jn wrtość j w którj zostną zlizon Poniwż kż fz zjmuj zs O(n) i fz jst k wię ły lgorytm zjmuj O(nk). Pozostj jszz powizić jk olizyć prf/suf - roimy to pooni jk w izomorfizmi rzw, trz po prostu komprsowć koy: 3
for i:=1 to n o prf(i, 1) = w i [1] for j:=2 to k o P = for i:=1 to n o P += (prf(i, j 1), w i [j], i) posortuj lksykogrfizni trójki z P zgrupuj trójki o tyh smyh wrtośih pirwszyh wóh lmntów w G 1, G 2,..G p for t:=1 to p o forh (p, q, i) G o prf(i, j) = t 7 Klsówk 2011 (1), zni 2 W tym zniu rozwżmy n-lmntow iągi k-uporząkown (i-ty lmnt iągu jst ni większy o lmntu i + k), 1 k n. (5 pkt) Uowonij, ż kży lgorytm sortująy przz porównni wymg w psymistyznym przypku Ω(n log k) porównń o posortowni n-lmntowgo iągu k-uporząkowngo. (5 pkt) Zproponuj lgorytm sortująy tki iągi w zsi O(n log k). Rozwiązni: TODO 8 Klsówk 2012 (1), zni 2 Powimy, ż w npisy są poon wty i tylko wty, gy zwirją jnkow lizy wystąpiń tyh smyh znków. Dnyh jst n npisów n lftm m-znkowym {1, 2,..., m}. Zproponuj lgorytm, który stwirz, il jst wśró nih różnyh kls npisów poonyh. Twój lgorytm powinin ziłć w zsi O(R + m), gzi R jst sumą ługośi wszystkih npisów. Rozwiązni: Postwow i: l kżgo słow w i oliz jgo ko o(w i ) = sort(w i ), gzi sort(w) oznz słowo w z uporząkownymi nimljąymi znkmi (np. sort() = ) posortuj słow o(w 1 ),..., o(w n ) używją lgorytmu z ćwizń (sortowni lksykogrfizn słów różnj ługośi) usuń uplikty z posortownj listy. Kroki rugi i trzi w uzywisty sposó zjmą zs O(R + m) Nistty jśli pirwszy krok tgo lgorytmu zimplmntujmy niwni, to moż się okzć, ż olizni o(w i ) zjmi nm zs O( w i + m), o w sumi moż ć O(R + nm). N szzęśi możmy wygnrowć koy słów w fktywnijszy sposó. Kży znk z w 1,..., w n zstępujmy przz trójkę (, i, j) oznzjąą ż w i [j] =. 4
Sortujmy wszystki trójki w jnym kroku. Trz zięki tj posortownj liśi mmy uporząkown wszystki litry z łgo zioru słów i możmy j koljno opisywć o koów słów: T = [] for w_i in w_1,...,w_n o for j in 1,..., w_i o oj (w_i[j], i, j) o T posortuj T for i in 1,...,n o o[w_i] = "" for (, i, j) in T o o[w_i] += Dzięki ziorzmu sortowniu listy T uło się olizyć koy wszystkih słów w w zsi O(R + m). Przykł: w_1 = w_2 = w_3 = w_4 = T = [ (, 1, 1), (, 1, 2), (, 1, 3), (, 2, 1), (, 2, 2), (, 3, 1), (, 3, 2), (, 3, 3), (, 4, 1), (, 4, 2) ] posortown T = [ (, 1, 1), (, 1, 3), (, 2, 2), (, 3, 2), (, 3, 3), (, 4, 1), (, 1, 2), (, 2, 1), (, 4, 2), (, 3, 1) ] 5
o(w_1) = o(w_2) = o(w_3) = o(w_4) = 9 Klsówk 2012 (1), zni 3 Dn jst 2n-lmntow tli zwirją n zr i n jynk. Chmy ją uporząkowć tk, ży zr i jynki yły ułożon n przmin, poząwszy o zr, tj. 010101... Zproponuj fktywny lgorytm, który wykon to w mijsu i stilni (tj. koljność zr i koljność jynk z wjśi muszą yć zhown). Rozwiązni: Posortuj stilni (l MrgSort) nstępni rkurnyjni poprzpltj. Algorithm 1: Sort(A) if A 2 thn (Z l, O l )=Sort(A[1..n/2]) (Z r, O r )=Sort(A[n/2 + 1..n]) Exhng(O l, Z r ) rturn (Z l + Z r, O l + O r ) ls rturn (A, ) (if A=[0]) or (, A) othrwis Algorithm 2: Unpk(A) if A > 2 thn l = A /4 ; r = A /4 ; // zmiń iąg 0 A /2 1 A /2 n 0 l 1 l 0 r 1 r Exhng(A[(l + 1)..2l], A[(2l + 1)..(2l + r)]) Unpk(A[1..2l]) Unpk(A[(2l + 1)..n]) 10 Klsówk 2013 (1), zni 1 Zprojktuj optymlny lgorytm po wzglęm psymistyznj lizy porównń, który znjuj w śrokow lmnty w ziorz ztrh lmntów. Dowiź poprwnośi swojgo rozwiązni. Rozwiązni: TODO 11 Klsówk 2013 (1), zni 2 Drzwm klsówkowym nzywmy płn rzwo inrn, w którym kluz są rozmiszzon zgoni z nstępująą rgułą: l kżgo węzł x njmnijszy kluz w porzwi o korzniu x znjuj się w jgo lwym porzwi. Zproponuj implmntję rzw klsówkowgo w sposó, który umożliwi wyjn wykonywni oprji koljki prioryttowj: Ini:: mją n n = 2 k 1 kluzy zuuj n-węzłow rzwo klsówkow 6
Min:: poj wrtość njmnijszgo kluz w rzwi ChngKy(x,k):: zmiń wrtość kluz w wskznym węźl x n k Uzsnij poprwność swoih rozwiązń orz okonj nlizy ih złożnośi olizniowj. Rozwiązni: 5 / \ 3 8 / \ / \ 1 5 2 7 Przykł rzw klsówkowgo: Wzogmy węzły v o otkowy tryut min, który zwir njmnijszy lmnt z porzw (łązni z wrtośią v.x). Formuł n ktulizję tgo tryutu: v.min := min(v.lf t.min, v.right.min, v.x) Tk jk w kopu jstśmy w stni zfiniowć oprję DownHp(v): jśli v jst liśim to ni ni ró, jśli v.lf t.min > v.right.min -> swp(v.lf t, v.right) jśli v.x < v.lf t.min, v.right.min -> zmiń v.x i v.lf t.x, zktulizuj v.min i wykonj DownHp(v.lf t) Anlogizni U php(v): jśli v jst korznim to ni ni ró, nih p = prnt(v), zktulizuj p.min, jśli p.lf t.min > p.right.min -> swp(p.lf t, p.right) wykonj U php(p) Implmntj oprji: Ini:: utwórz rzwo nstępni wykonj DownHp l wszystkih węzłów ią o wrstwy k to 1 (tk jk w liniowym lgorytmi tworzni kop) Min:: zwróć root.min ChngKy:: zmiń kluz i wykonj DownHp(v) i U php(v) 7
12 Klsówk 2013 (1), zni 3 Dnyh jst k uporząkownyh list o ługośih ęąyh prmi różnymi potęgmi wójki. Zproponuj wyjny lgorytm slni tyh list w jną listę uporząkowną. Uzsnij poprwność swojgo lgorytmu i okonj nlizy jgo złożonośi olizniowj z wzglęu n lizę porównń wykonywnyh pozs slni. Rozwiązni: Uporząkuj listy rosnąo wług ługośi i slj o njkrótszj o njłuższj. Złożoność zsow: O( L i ). Złożoność pmięiow: O(k) (n potrzy uporząkowni list, ni potrzujmy otkowj pmięi n slni o oprujmy n listh, któr możn slć w pmięi O(1)). 13 Klsówk 2014 (1), zni 3 Dn są lizy łkowit otni n, k, przy zym k (n). W tliy [1..n] zpisno n liz łkowityh o o njmnij k różnyh wrtośih. Nlży zprojktowć lgorytm, który stilni i w mijsu przmiśi k prmi różnyh liz n pozątk tliy i uporząkuj j rosnąo. Stilność w tym przypku oznz, ż koljność występowni w tliy liz o tyh smyh wrtośih zostj zhown. Twój lgorytm powinin ziłć w zsi O(n log n). Rozwiązni: Algorithm 3: Solution1(A, k) Nih B oznz lok A w którym ęzimy gromzić posortown rosnąo różn lmnty z A Pozątkowo B jst pusty lokim n smym pozątku A forh i 1,..., n o if inrysrh(a[i], B) thn // lmnt A[i] jst już znny wię go ignorujmy ls // lmnt A[i] jst nowy i hmy go oć o B nih X oznz lok zzynjąy się z B i końząy n A[i 1] Exhng(B, X) oj A[i] o B if B k thn rk przniś lok B n pozątk A Anliz: Koszt O(n log n) z wzglęu n wykonywn O(n) rzy wyszukiwni inrn. Pozostł oprj zjmują O(n) zsu: koszt owni nowyh lmntów to O(k 2 ) zyli O( n 2 ) = O(n)s, koszt wszystkih oprji Exhng to O(n) poniwż p j=1 X j n (zuwżmy, ż wszystki ziory X j są rozłązn), orz p j=1 B j k 2 n. 8
14 Klsówk 2015 (1), zni 3 Rozwżmy ynmizni zminijąy się iąg A =< 1, 2,..., n >, prmi różnyh n liz łkowityh. N iągu A ozwolon jst jyn oprj N P oztk(i), 1 i n, któr przsuw lmnt i n pozątk A. Przykł: Dl A =< 4, 1, 3, 5, 2 >, po wykonniu N P oztk(3) ostjmy A =< 3, 4, 1, 5, 2 >. Intrsuj ns iąg oprji NPozątk o minimlnj ługośi, któryh wykonni posortuj A. Nzwijmy go minimlnym iągim sortująym. ) [3 punkty] Zprojktuj lgorytm, który w zsi O(n) wyznz pirwszy lmnt minimlngo iągu sortujągo. ) [2 punkty] Zprojktuj fktywny lgorytm wyznzjąy ły minimlny iąg sortująy. ) [4 punkty] Uowonij poprwność swoih rozwiązń. Dokonj nlizy złożonośi zsowj zproponownyh lgorytmów. Rozwiązni: Zuwżmy, ż jśli lgorytm sortująy wykon prznisini lmntu i = x to w koljnyh ruhh musi równiż przniść wszystki lmnty o wrtośih 1,..., x 1. Dotkowo optymlny lgorytm sortująy ni prznosi żngo lmntu więj niż 1 rz. Popunkt (): Nlży wyznzyć, minimln k n, tki, ż k +1, k +2,..., n jst poiągim A. Możn to zroić w zsi O(n) nlizują iąg A o prwj strony i szukją koljno n, n 1, it. Pirwsz oprj to NP oztk(a 1 (k)) (prznisini lmntu o wrtośi k). Popunkt (): Koljn oprj to NP oztk(a 1 (k 1)), NP oztk(a 1 (k 2)),..., NP oztk(a 1 (1)). Nistty ży fktywni wykonywć oprję A 1 konizn jst struktur nyh, któr pozywl n: znlzini inksu lmntu o wrtośi x usunięi lmntu o wrtośi x z iągu oni lmntu o wrtośi x n pozątk iągu Przy pomoy rzw zrównowżonyh, kżą z tyh oprji możn wykonć w zsi O(log n). Co j lgorytm o złożonośi (n log n). Przykł: A = 4 1 5 6 3 7 2 k=3, poniwż [4,5,6,7] jst poiągim A NPoztk(A^{-1}(3)=5) A_1 = 3 4 1 5 6 7 2 NPoztk(A^{-1}(2)=7) A_2 = 2 3 4 1 5 6 7 NPoztk(A^{-1}(1)=4) A_3 = 1 2 3 4 5 6 7 9
15 Klsówk 2016 (1), zni 2 Nih n ęzi otnią lizą łkowitą. Dl otnij lizy łkowitj k powimy, ż iąg liz [1],..., [n] jst k-ory, jśli kż inwrsj (i, j), 1 i < j n, spłni j i + k. ) [8 punktów] zproponuj symptotyzni optymlny z wzglęu n porównni lgorytm sortująy iągi k-or. Uzsnij symptotyzną optymlność swojgo lgorytmu. Uwg: w tym zniu rgumntmi funkji złożonośi są k i n. ) [5 punktów] zproponuj fktywny zsowo i pmięiowo lgorytm, który sprwz zy iąg liz [1],..., [n] l znj lizy łkowitj k, jst k-ory. Uzsnij poprwność lgorytmu i okonj nlizy zsowj i pmięiowj Rozwiązni: () Dowolny lgorytm sortująy oprty o porównini musi wykonć Ω(n log k) porównń: istnij o njmnij (k!) n/k różnyh prmutji n-lmntowyh, któr są k-or. Stą lgorytm sortująy musi wykonć o njmnij log((k!) n/k ) porównń, zyli Ω(n/k k log k) = Ω(n log k). Konstrukj tj roziny prmutji: pozil lizy n loki B 1 = 1..k, B 2 = k + 1..2k, it. prmutj otrzymn z owolngo przmiszni loków p(b 1 ) + p(b 2 ) + p(b 3 )... jst k-or. Algorytm: sortuj koljno loki ługośi 2k zzynją się n pozyjh 1, k + 1, 2k + 1,.... () Nih pmx[i] oznz mx [1..i] (mksymln wrtośi l wszystkih prfiksów tliy). Tli jst k-or, jśli pmx[i k] [j] : k j n 10