Download as pdf
Download as pdf
You are on page 1of 147
Lech Banachowski Kraysztof Diks i Woiciech Rytter Reaktor Hebieta Beermann hla sy uo aol Spis tresci Pred Ge: Raharsowsts Praygoowranie do de Mariana Scingrn, Marana Zona COpraowie tcniezse 4 Podstawowa ensudy antsy olgorytm6w veessesssesseee HB eee 1.2. Réwhnania vekurencyjne 20 tin nko toe X ine ste re prea unde peek and roxpowsaectiny 1.5.8, Graf. as Petia semen ere Uta ken a ii ot i area 4.6. Kliminagja rekursji ni | 17. Kasal aamortyzowany operagi w slrukturze danych 38 Isp s2-a0e3224-3 ae “ ‘A wy 72, Ak deuk. 1825 Symbol EUSHISTIWNT (Geezyska Daksa Wydawaicns 2h Si 22. Insertionsor ~sorlowanie preez wstaveianie 2. Quieksort ~sortowanie szybkie lectionsort ~ surtawanie prawn selekee 6 Spice wreset Spis tes a Dolne ogranieronic a alotonos® probleme sortowania oe 5.12. Algorytm KMP (Knutha-Morrisa-Pratia) fc Sortowania pozyeyine 66 5.13. Algoryim Kiniowy dha probleme wyszakiwanin wzorea Kolejki prirytetawe | algurytm heapsort 70 diwuwyaniarowee, ext algorylen Bakera 169 in Cerin) eenlayea tel 7 Scie, ‘Algmryim GS (wersja algorytinn Galila-Seiferasa la pose) Sigbhkie algorytmy wyznaezania {Logo najwighse elenwenta w igs. 8 at i Sealunio siagéw uporzylkowanyeh 36 5.45, Alqmytan KML (Karpa-Millon-Rosenboug) ve eater ute wo 5.18. Algoryla KR (KarpaRabina) im 240.1. Sealanio wielieowe #4 pliku 0 ett essai ou nasee ore ts (02 Sealanie wieltizowe #3 plikaani ot Rae eas ees ne a o Draewa sufksowe i geal palslow 180 5.2.1. Nisnwarta reprozontacia drzcwasuliksowego 10 Slowniki ss 66cseeeeee secrete eeeeee eee eee 5.2.2, Tworssnie draswa sufksonregs ise 3.1. Implementasia Histowa nicuporzadkowana 23, ‘Tworenie grat podsliw 185 52 Implementaca istowa uporzqdhorana 5.3. Inne alyorytiny toksonee 169 J, Drzewa poszukiwa’ hinarayeh Ohliceanie najdhuzszogo wspolnego prdslowa 139 Sa.1. Drown AVL Oblicanie najdlvzszayo wspelaexo pei 190 32.2. Samoonganinajyee sig deaewa BST Wysuukiwanie sow podwtjnyeh 190 A, Mieszania Warsukiwei slow symebrycznyeh 193 it Wybor fenkejt mioseniqe Ievenowaznost even so4 A.2. Struktury danych stosowane do roswigarwania prema kolizi Agorytm Huffmana 195 1.5, Wyszukiwanie pozyeyine 2.7. Oblienunio lokaykogralicnnie maksymalnego sufiksu 196 ft. Drzowa RST 118. dadnoanacnne Kodweanie 199 62, Drews ‘HI 5.29. icone Kerby pose 200 5533. Draws PATRICIA Yadania 200 5.6. Wysnukivanio zewngtrzne 8.6.1. PIiki nieuporzdkowane 362. Pili x fankejq mioszajey BG. Seleweneyjne pliki indeksowane 1.6.4. Bulrzewo jako wivloposiomosry indekes rvadhi 5.6.5. -draawo jake wieloporiomovy indoks geet antania 4, Zloione struktury danych dia zbioréw clementéw . ve 148 4.1. Problem sumowania vexqeznyel zbiondve Mas 4.11, Tmplomentasia Histave Ma 4.1.2. Implementacia drzvio us, 4.2. ‘Zigenalno kolojki priorytetowe 15, Yewdani . we 3. Algorytmy tekstowe . 164 5.1, Problem wysaukiwania wuores 168, 5.1. Algorybm N (,naiwny") 165, & Algorytmy réwnolegie . . 6.1. Rawnol obliczanie wyrades i prosiyeh programéw sekweneyinyeh 62, Sortowanie ehwnologle Zain Algorytmy grafowe .... TA. Spine skladonee 72. Devuspiine siadoowe 13. Silnie spojne skladowe i silna orientacia TA. Gyldle Bolero 75. S-kolorswane grate phanarnyeh 7.6. Najkrétsve Seiviki i min Zaudania mnalne devesco roapinaiqee Algorytmy geometryezne 8.1. Hlementarne algorylmy qeometryexne 8.2. Prublom pexynatea 821. Wypulla oloczka 8a, Metoda zamintania 841. Najenniej odlegt pars punk 8A2, Pary praceinajyeyeh sip odeinkive ‘adania Bibliografia ... Skorowi 2681 am aia 284 286 Przedmowa inigjsz ksiyzka jest pracznaczona dla czytelnikéw interesujgeyeh sky wlebie} infor rmatyks, lym prade wszystkim dla students informatyki. W szezeyilnosei moe slu/yé jako podreeznik do wyklulow: Algorytmy i struktury: danyeh’ i Analiza algoryimaw" dla studentow studidw informatyeanyeh, Je) fragmenty mo; bye takze wykorzystane w naezaniv przedmiow Metody programowania” i «Kms binatoryka i teoria urafow" w ujgeiu algorytmicznym, Sqdzimy, ze ksiqrka moze wz zainteresowaé szersze kregi ezytelniks, ny? daje elementare wprawadzenie do now: ezesnych melo tworzenia i analizy algorytindw. Melody te oraz bogaclwve réinorcdlnyeh struktur danych, praedstawionych w ksiazce, moga by€ pomocne w projektowaniy efek- tywnych algoryindw dla problemow pojawiajaeyeh sie w praktyce programistyezne} tub pracy badawere} Yakladamy, ie czytelnik ma pewne padstwowe przyzotowanie x kombinstoryki i ra nie uklndaé alyorytmiy Metouly peo ianiu to} ksiazki, le nie ‘hunku prawdopodobieristwa (ha pozionie szkoly Srednie]) 1% ww Pascal. Zmjomesé praediiotow: ,Wstep do inforruatyk nin" i Analiza matematyezna £ jest pozaydana pray konieezna Ksiazka powstala z notatek do wykladow: ,Algorytiny i struktury danyeh” oraz Analiza alyoryiméw", prowadzonyeh przez nas dla studentéw informatyki Uniwersytet Wa siwakiegn W latiel 1986-1994, Pienwsza je) wersja ukiwala sig w postaci skeypia Uni wersyietu Warszawskiego [BR] Ninicjsza ksigZki skludn sig 7.8 rozdzialow, Rozzial 1 stanowi wprowalzenie do izie~ dziny analizy algorytmdw. Zletiniowalismy w nim takie pojgcia, jak alozonos€ oblicz iowa i poprawnose semantyezna algoryinun, Onxéwilismy rozswigzy ante rowna ek reneyjnyeh i podstawowe struktury duyeh: listy, zbiory, grafy, drzewa i ich realize, Prsedlstawiligmy takie clementarne metely algorytmicznege rozaviyzy ania problemi. 10. Przedmown Rozdzial 2 zawiera oméwienie ghiwaych algorytmow sortowania wraz 2 ich analiza i zastosowanianti wprowadzonych struktur danych do rozsviqzywanin pokrewnyeh prob: lene, Rozdzial 3 jest poswigcony zadaniv wyscukiwania element6w w zbiorze. Pract stawiligmy w nim podstawowe struktury danych i ezesciowg ich analize. W rozdziale 4 omwilismy i zanalizowaligmy dwie zlodone struklury danyeh, umozliwiajace saybkie ‘wykonywanie aperacji na zhiorach rozdaeznyeh. Opisalismy rozwiazanie problem su mowanit zbiorde rozlgeznyeh + preedstavilismy implementacje zlyezalnych kolejek prioryletmwych za pomoca drzew diwumi 8 “one wowych, Rovdzinly 5, 6, 2, 8 s3 paswi vividzinom informatyki teoretyczne}, w kiGrej badania nad algorytmami rozawijaly sig wv ostatnich latach najseybeig). Pracistawilismy w nich algorytmy tekstowe, a take algoryimy néwnolegle, grafowe i geometryezne. Kary ror vem zulai umozliwiajacych poglebienie zlobywane} wiedzy. Celem naszym nie byte Uostirezenie programéw_gotowych do uruchomienia. Peina implementaeja nicktrych Zz zaprerentowanych algoryimow wymaga pewnego wysilku progeamistycznego. Zache- ccamy Cig do podjgeia go. poniewa dopiero pela, paprawna implementacia swiadezy ‘dobry zrazumieniy przerabianego nvaterial jest zakoitezony 7e algorytmoy i struktur danyeh user siy ju dais ra Klay mom Wigks7esé preedstawionye ‘eave, Morina je znaleaé (soaproszone) w ligzych ksigzkach poswigeonych algo (niestety w wigksansei w jezyku angielskim). Czytelnikowi zainteresowancme spojrzeniem na omawian temalyke oraz poszerzaniem wiedzy dotyerace}_probleniw poruszanyeh w tym opracowaniu polecamy podane nize) pozyeie ALY. Aho, J.B: Hoperoft, J. D. Uilma komputerowyeh [ANU] ie F analiza algorytmiw Projekt fest to ksi poswigeona algorytmam i strukturon d informatyki teoretyezne) 1. anachowski, A. Kreezmar: flementy analizy algorytmdw [2K] Jc tej praedstawiono podstawowe zasady anatizy algorytmow, rilustrowane cic kawymit praykladann 1a Banchowshi, AK yeh [BKR] ry W. Rytt algoryiméw { steuklur dae W sige te) omowione “lazane metody projektowania i analizowania algoryiméw ori strut cany VU Cormen, CB, Leiserson, Re Le ICLRI ivest: Wprowaclzenie do W ksiazce te] preedstawiono najyaniejsze (ol elementanyeh do zlozonych) algorytiny i straktury danych 2 wielt niznych dziedzin informatyki Praeelmows nu M. Crock ore, W. Rytler: Test algorithms [CR] lest to ksii?ki poswigeona alorytmom na tekstach, AL sibbons, W. Rytlers Efficient parallel algorithis [GR] W ksigzce te) méwiono algorytmy réwnolegle 2 wielu rznych Uzialdw informatyhi leoretyezne J. Jaja: An introduction to parallel algorithms [I] Jest 10 wprowadzenie do problematyki gorytméw i obliezefi rownoleglyeh, ter progr searehi Sorting IKI W kssiace te] oméwinno klasyczne metody sortowanin 1 wysaukiwani. W. Lipski: Kombinat I Jest to ksiazha poswigcona poxlstawnerym algorytinom grafowyin, K. Mebthorn: Mult ryka dl programisté 1 andl comps geometry [MI ematem kiki sa problemy i algorytmy geometryezne, ML. SI jos: Compu ral geometry introduetion) [PS] Jest to doskonale wprowadzenie do problematyki geomettii obliczeniowe) R, Sedge jek: Algorithms [ W ksiavee tej bardzo praystepnie oméwiona rene algorytmy i steuktury danyeh, Na preccisawione) a Bseis nie ma oczywifcie wszystkich pozyeji poswigeonych algoryt rom i straktwroni danyeh, Wymienilismy tylko te, kidre wykorzystalismy do praygoto- wana notatek do wykladow, a nastepnie tej Ksigaki. Opis wiekszosci omawianych tu problems, aleoryim6w i struktur danych mozna znaleaé w ksigakaeh 2 te lsty. W rave fodsigpsiwva od powyasze} zasidy podajemy berposrednie Zr8dlo omawianege tema, Warsz 1996 Abawa cho-rls dja d He Weodlst Niles 1 Podstawowe zasady analizy algorytmow lym roatziale preedstawiamy podstawawe pojgcia slosawane pray badaniv gorytindw i straktur danyeh, Praede wszystkin wyjasiiamy, na ezyn pole analiza algorytmu w dwéch gkiwnych aspektach: poprawnosei semantyezne) 1 zloamnosei obliczeniowe). Onawiany elementarne struktury dunych definiowane abs- Uakeyjnie (jako listy, zbiory, wraly, dezewa itd), 2 moxliwymi réznyini konkretnym implementacjami (reprezentagjami). Na Koriew roulzialu praedstawiamy padstawowe metody konstruowania efektywnych algorytméw (metods ,dlziel i zwycigza", progr na, metoda kolejnyeh transform) mowanie dynamiczie, metoda zach Analiza algorytindw to dlzialinformatyki zajnnujaey sig szukaniem majlepszyeh alporyt- row di zada komputerowyeh, Analiza algoryimow polega migdzy ianymi a znalezie niu odpowiedi na podane t pytania 1. Czy dany problem moze byé rozwiqeany nit komputerze w dostepnym ceasie i prunigci? 2. Ktdry ze znunych algoryimiw nalezy zastosowas w danych okolicaneseiach? - Cay istnigje lepszy algorytm od eazwazanego? A moze jest on oplyinalny’? 4. Jak: uzasadnié, 2e stosujge dany algorytm, rozwiaze sig zammierzone zadanie? Dokonujae analizy algorytmu, zwracamy uwage na jego poprawnusé semrantyezna, pros: Lote, czas dzialania, ilosé zajmowane} pamigci, oplymalnosé oraz okolicznesei, w jakich 2y go waywac, a w jakich nie, i. Dlozonogé obliczeniowa ‘Aoxones€ obiezentows alyorysnu definiuje sig jake Hose zasnbdw Kompunetos wych, patrzehnych do jezo wykonania, Podstawowymi zasobsami eozavazanyint w anal gorvimow sat czas dyialania 1 ilosé zajmowane} pamieei 14 1, Podstawowe zasady analizy algorytonow i Zawwarmy, He nie jest na ogsl moeliwe wynaczenic alozonosei obliczeniowe) jako fankeji danych wefsciowyeh (lakich jak elgg, tublice, drzewa exy wraly). Zwykle, co haturaine, % zestawem danyeh wejselowych jest zwiqainy jego roamiar, rozumiany swine agshie ~ jako liezba pajedynczyeh danych wehodzacych w jezo sklad, W problemie sortowania na praykld za cozmiar przyjmuije sie zazwyezaj liezby elemen- aw ww eiquu wejseiowym, Ww problemie precigeia draewa binarnego ~ liezbe wezlow Ww odezewie, a W problemie wyznaczenia wartosei wiclomianw ~ stopieh wielomiant Rozmiiar zestawu danyeh d bedziemy eznacze prez [dl Aby mae wyznacza€ zlozonosé obliezeniowa algorytmu, musimy sig jeszcze umawi, |v jukieh jednostkach bedziemy ja liczyé. Na zlozonosé obliezeniow:, sklada sig zlozo hase pamiguiowa 4 zlozonose ezasowa, W wypadku zlozonnse! pamigciowe| za jedno- sike prayitne sig zwykle slowo pamigei maszyny, Sytuae} plikwwanar w wypadkt alazonasel czasowe). Zlozonosé ezasowa powinna byé whist cia siimego tylko algorytmu jako metady rozsviqzania problem ~ niezaleanie od kom putera, jezyki programewania ezy sposobu jego zakodowania, W tym cclu wyrGania sig |v algoryimie charakterystyezne dla niego operaeje, nazywane operacjami dominujaey ani take, 2e hycena ich liczba jest proporcjonalna uo liczby wykonait wszysikich opera ji jednostkowyeh w dowolne} komputerowe} walizacji algorytiu, jest nieco hardzie} skont Dia algorytméw sontowania na pezyklad 2 operacig dominates prayimuje sig zwykle pordwnanie dwoch element w ci nie elemen: Gow w cia dh algorytméw prasgladania drzewa binamego peeyjmuje sig presiseie dowiqzania mieizy werlumi w drzewie, a dla algorytmdw wyznaezania wartosei wielo nviann = operacje arytmetyczie =, © 1 1 wejseiowym, a exasem te? przestaw) ‘a jednostke doiamasei ezasowe] przyimule sig wykonanie jedne} operacji dominujace) vaaniary danyeh 1, Wyr62- zasob6w komputerowych, ‘Aotows€ oblicreniowa algorytau traktuje sig jako funkeje hi sigs zlozonasé pesymisty definiowvan jake ilos «0 potwzenych pray wtlajgorszych" danych wejSciowych wzinian m, on elozonosé ocr wana — deliniowang jako ilosé zasubiw komputerowyeh, potrzebnych prry typo: wyeh™ danyeh wejsciawyeh rozmiaru 1 [Aby aaletiniowvad precyzyjnie pojgcia pesymistyezne| i aepekiwane} zlozonosei ezasowe, wprowadzimy nastepujace oznaczenia 1, — aide zestawwow danyeh wejSciowyeh roziniar a sil) ~ liceba operseji dominujaeyeh da zestawu danyeh wejsciowyeh a 3, — zinicnna losown, Kore] wartoseig jest Cd) dla d & By Po rucklad prowdopodobienistwa zmienne] losowe) X,, (an. prawdopodabieistwe, de dla danyeh rozmiara 1 algoryun wykona k operae]i dominujaeyeh (k 2D) ene} losowe] X, wyemueza sig: ma poxlstawie infor algorytins, Gay na prayklad zbidr D, jest skovte oak prawdopodobi mei a zastosowaniach rozwazaney 1.1. Zlazonosé obliezeniowia 15 ‘cxony, prayimuje sig ezgsto model probabilistyezny. w kiGrym kavdy zestaw danych rozmiarun moze sig pojawié na wejsciu do algorytms z jednakowym prawelopado- bietstwem, " Prac pesym 1 wlozonosé exasowra algorytamu roramie sig funkejg Wea) = suplidy: d © Dyke zie sup eznacza kres gory zbiony reer oczekiwan sows, algorytanu rozumie sig funkeje Etna Aun mn, wartesé aczekiwany ave(X,) zmiienne} losowe} Aby stwierdzié, ma ile funkeje WO) i A(n) sa reprezentatywne dla wszystkich das nych weisciowyeh rozmiara m, rozwada sig miary wruzliwosei algorytmu: m ymistyezne}, ezyli A(n) = supfi(d,) ~ Hd): dye © By). ori. mia iwosel oezekiwane}, czyli 5(a) = dev(X,), adie dev(X,) jest standardowym odchyle- Your) i vartx,) = De = ave) ew (varGX,) jest warianeja zmienne} losowe) X,). Im wigksze sx wartosed funkeji AQ) 150). lym algorytm jest bardzie} wradliwy ma dane wejgciowe i tym bardziej jeyo zachowanie Ww wypadkar rzeczywistych dnych moze edbiegaé el zachowania opisanego funkejami Wu) i Ato. hiem zmienne| losowe| Xy tan. dev(X, OT Prayetap: P -mukiwanie sekwer eyjne el Dane weiseiowe: 1, Ny at gazic AV jest liezba naturalna N 2 0, a jest poszukiwanym elementem, L[1.N + 1] jest tablica, w klGrej na miejseach od 1 do W znajduja sig ele- meaty eiqyur Wynik: Zmienna | «a majduje sig w LL] Algorytm: begin jee bins 1) sa: white 617} ¥ ao 7 ena ating algorytn n=N pporswnamie: Lj) #2 Wu) =n | Pesymistycza wea An) =0 A jiaka jest oczekiwana zlozonose czasowa? Zalisimy, Ze prawdopadobietistwo ss lezienia a na kaddym % 0 modliwych micjse jest taki sume i wiadomo, %e 4 jest w LUM] tn, He Pa Wowenas fd ame wel Aq 7 ~ Las HOt 20+) wae 6 2 2 +f 4))- HNOn+) net 6 + exyli Bu) = 290 ego algorytiny, jak i funkeje jego ierby operaeji dominujacyel na Zauwadmy, Ze zarGveno Cunkeje wradliwosei powy2 ‘lofonosei $4 liniowe; wynika stad duza wrazliwo dane wejsciowe. Faktycana rlozono$é ezasowa algorytmu (ezas dzialania) w ebivili jogo wayeia jako pro gram r62ni sig od wyliezone} teoretyeanie wspélezynnikiem proporejonalise, kGey zalezy od konkrelne} realizacji tego algorytmu. Istotna zatem czgseia informaeji, ktOra jest Zawarta w hunkejaeh zlozonosel Wr) LAH), jest leh rad wielkused, ezyli jer zaclinwanic ly ndady Uo nieskoriczonosei. Zwryke staramy sig pods jak najprosisza eryaujaca read wielkosei Win) 1 AGE), na prayklad a, ulogn, 0°, 1 11. Zlozonasé obliczeniowa W Usywamy w tym cela nastepujacyeh oznaezei dks rzgdéw wielkoset funkeji, Nice fog te N—> RU (DO), eavie NR, oznaezaia zbiory fiezb — od powiednio ~ naturaluyel ‘ rvecaywistyeh dadutnich, Mowwimy, e Fest eo najwyzel reed, co zapisujeny jako s(n) = Otg(a) jest ineja st raecaywisae > Oi sta naturalnay, ako, 2e nietswnosé fea) en) zachonzi dln kvale 112 ng, Oto prayklad: w+ 2s = Ota), bo w+ vs nl ke huaturalney Mowimy, 2 0 go = Oyun). est co najmnie} rzedu g, co zapisujemy jako flr) = Qtew)), jeslh Mowimy, #e £ jest doktadnie rzedu g, ev zapisujemy jako flu) = OC), jesli zawya Jia) = OGgln)), jak + fu) = 24yGN), Popraway jest we termin € Jest asymplotyezic réwnowazne % i wataczenie fin) = gla). Oto prayklad: 2+ nn", bo zardwno 2S 3°, jak in + Qn 20 ia kavalego n 2 0, Redziomy takie wzywae ozmaezenia f(a) = win) + Ola), edy fla) ~ who = OUND. m8 prayklad (i2)s0° + 5 a+ 1 = (2)n + O(n, Zauwaany, 2e w ten sposdb zachowujeny wspolezynnik proporcjonalnosei pray najbantziej znaezacyn sktadniku sumy i pomijamy wspotezynniki pray mnie} zmaezieyeh skladnikach sum. Rawaly wielkosei dwéck funkeji fin) i gn) moga byé porswa w prez obliczenie praniey tim we 80 +, 10 s(n) = OYUN), ale nie FW) = OCgin). = 0 > 0,10 J) = ga). 0, 10 fl) = Ofg), ale nie gla) = OYn) Jest esti F Stosujae na prayklad regule de 1’ Hospitaa, olzzymujemy nlogn Finn 228. n= OW), cexyli log e nie a? = Olulogn. Vieliseose rozavazanyel algorytmsw ana zlozonos czaKows proporcions » paxdanyel tw Funkej do jednej loga ~ slozonosé logaryt Cras dziatania logaryimiezny wystgpuje ma prayklad dla algorytmow ypu: zaxdanie roz= imiant m zostaje sprowadzone do zadania rozmiare n/2-+ pewna stata Tiez'n dtalai na preyklad pascukiwanie binarne w efagu uporzdkow: 184, Pordstawowe zasady by stwierdig, czy x-zmajduje sie w tym cing, portwnnjemy x npn % say? Jest Fe ey yay, 0 Sakamy dle] AW GMBH ay Sy Sa Oya} STE Ma > A fo sztkamy 8 Cag dy yay y 1 Som S ey (astepny Podeiag jest zawsze co najonnic} 1 polowy Krotszy = alogunesé Tiniowa Czas dziatania liniowy wystepuje nit prayklad dln algoryindw, w Rusryeh jest wykony= wana pewna stata Tiezba daialan dla kazdego % 1 elementow danyeh wejsciowyeh, Prey laden takiego algorytmu jest algorytm Homera wyztacrania waitasei wielomianu, logs ~ vlozenogé slog or Cus dria fn wystepyje na prayklad dla algorytmow typu: zadanie eoziian 1 zostaje sprowadzone do dww6eh podzadan sozmiaru n/2 plus pewna liezba data Finiowa wagledem roamiaru n, potrzebnych do wykonania najpierw rozbicia, a nastgpnie scalenia corvineats rozmiare w/w rozwigaanie rozsniari a. W ten sposob drial mer= gesort ~ algoryim sortowania przez scalanie, Aby uporzilkow: ly yy sn Oy S08 Iujemy najpieew niezaleznie podcigei: 4 nastgpnie seaamy posortowane padciygi w jeden uporeadkowany cing. i ozonosé kwadratowa Cras crialinia kwadeatowy wystgpuije na pezyklad dl midi, w kibryeh jest wy hywana pewna stakt liczba dziatai dla kzdej pary elementiw danych wejseiowych ieracyina). fonulojna insteuk ‘Aozonosel wielonianowe astept = 2!" alojonosé podwyltadniex 2" = nlokonasé wykadnicza 2" Cras drialania 2" ma na preyklad algorytm, w ktdrym jest wykonywana stata Tiezba rial dla kavzdego podzbioru danych wejseiowyeh, nl Bofonosé wykladnieza a Gras dvialania nl ana mn preyklad algorytm, w kt6rym jest wykonywana stala Tiezba leialni dla kaze) permutacji danych wejSeiawyed. © Di Beahy rzccaywinte) 1 rapis Lc.) wnnacea majwigksey Hebe ealkowila, nie wicks wit ya zaps Px] uinnieig Veeck, ie mica ie 1.1. Zlozon0sé obi 19 Zauwaamy, 28 algoryim 0 zlozonosei wykladnicee| moze by erealinowany jedynie dla malych rozmiar6w danych. Istnieje prog, of ktGrego funkeja wykladnicza 2 sosngé tak szybko, Ze realizacia algorytmu na komputerze staje sig niemozliva, ZalGimny tna prayklad, 2 dla danych rozmiarn a jest wykonywanych 2" operaeji jednostkowych i ae kids operacia jednostkowa zajmuje adpowiednio 10% i 10" sekund na dwoeh sanyeh komputerach, Czas dzialania potraebny do realizaci algoryimu jest praedsta- wiony w tabeli 1 Tahela 1.1, Prdsranic evan realize olgorytme wyBidnicgego mt ssl komputer Rone » so 1 20 Cons drialania | 1.04 357 aro 510 en s iat wick wiektw Cas dristaia | oan 0 eC envy ‘ ai Wek wick Widaé, 2e nawwet 1000-kroine przyspiesnenie szybkosei dzin pomaga algoryimowi wykladniczemu, Niercalizowalnesé uwaza sie za wewnetrza ce che algoryimn o zlozonosei wykladniczej, Aby jednak micé pelny obraz.sytuneji, powin- nismy jesneze rozwazyé wraeliwosé algorytmu na dane weisciowe, Moze sig 2 dla danego algoryimu WO) = 2" + OCI), ale kde A(n) = 2" + O(L). Woweras nie moze my Awviendzié, 26 algorytm jest nierealizowalny dla reprezentatywnych danych. Dane Lioryeh czas dzialanin jest wykladniczy, moga sig nigdy nic pojawie sw Freceywisiyeh okolicanosciach! Wiagnie taka sytuacja zachodzi dla melody simplex programowania liniowexo. Choé metoda ta ma zlozonosé wykladnieza dla ,.najgor- szych” danych, dla pojawiajacych sig w praktyce danych wejsciowych uziala w ezasic ‘wiclomianowym, a-nawet liniowym. Co wigcej, w wypadku takich danych pracwyzs metode elipsoidalna, ktOre) pesymistyezna zlozonosé ezasowa jest wiclomianowa! Pray koraystaniu 2 wynik6w nasignujqe uwarunkowwania aluoryint i jego realizacja przezmeceona do wykonania sa zwykle wyrazone w dwich cealkowieie néényeh jezykach: «© wradliwosé algorytmu na dane welSelowe mode spowodowas, 2e faktyezne zachowa- niv sig algorytnm na wywanyeh danych, bedzie odbiegaé od zachowania opisanexo Fuunkejami elozonesei Win) + An © moze byé trudno preewidizi losowe} # dla nicktoryeh algoryimow nie sa znane matematyezne oszacowania wielkose! Won) i Aim: szczegslnie wyznaczenie A(a) dla reeczywistego rozkladu prawdopodobi moge slanowié bardzo trudny problem matematyezny; i «© cxasami dziahnie davieh algoryiméye tetuno jest jednoznacznie porbwnaé; jeden Uzia- la lepiej dla pewne) Kkasy zestawove clanych, drug dla innyeh. wlizy zlozonosei algorytmu nalezy zatem brag pod uwage rreczywisly rozklad prawdopodobiertstwa_rzmienne} wove zasady analizy algorytinow ‘cochiy alyoryin jest jeuo prostota, % kiGnej zwykle wynika mniejszy wspalezyn- nik proporejonaluosei pray zlozonosci oblicaeniowe| oraz lutwose realizae)i (zapmogrt- mowania), Szezegdlnie wige w dwieh praypadkach: ‘= program, ktOrym jest stosowany masz algorytm, ma byé wyKonany raz tub tylker kitka vz ++ algoryim ma byé stosowany tylko dla malyeh rozmiarow danyeh; nalezy wybieraé algoryim raze} pod katem jego prostoty niz male] zlozonosei obliexe- niowej Coczywiseie najlepie} waywad zawsze algorytmdw zarowno prostyclt, jak i s7yb~ kieh w sensie asymptotycznym), 2. Rownania rekurencyjne Wyrnaczenie zhozonosei algoryimu sprowadza sie cagsto do rozwvigania. tw: rekureneyjnego. Stosowane su zwykile dwie metody: rozwinigeie roynania do sumny (Ie toda 1) i znalezienie funkejt tworzjce) (mretod 2), Metous 2 zajmiemy sig w nastepnym podrozdziale. Tera pokazemy zastosowanie: meto- dy 1 do rozwigzania tizech ezesto pojawiajgeych sig riwnas rekurencyjnych (¢ oznaeza stata naturalna do oO ee 0 Tin) = MLnid |) +e dia n> 1 (Rownanie to otrzymujemy jako réwnanie zlozonosei weedy, Kiedy problem eeziaru 1 sprowadza si¢-do podprobiemu rozmiaru polows mniejszezo) Metoda rozwiqzatnia takiego réwnania polega na podstawieni n= 2! (i. potegi dwojki), rozwiazania powstajqcego mwnania, Stad mozemy juz wnioskowaé (zob, zad. |), 26 ral wick’ rozwiazania oryginalnego eownania jst aki sam jak rownaia la pote ck Podstawmy wige 1 TI) = TE!) +e = TAY) He HE = TD) + he = Stad wynika, 22 Otlogn) nLaas) + 1P wl) +e dla n> 1 1.3, Funlaje tworzace 21 (Rownanie © otezym jemy jako riiwnanie zlozonosei wledy, kiedy probleny rvzaniar nn sprowalza sig do dwwéch podproblemiw rozmiaru 0/2 + stat liczba dzialai), Pest } my wige = 2) Weedy TA) = IN") +e = IAN Yr) He = DTA) Bow Bo = = PID beh a en) Stud, jak poprzedniv, wnioskujemy, 7 Tw) = 8m) @ ;Mh=0 Ten = THLat jy en nD) + en dla n> 1 (Rownanis 10 oxrzy amy jako rGwnanie zlozonosei wedy, Kiedy problem rwzniarw 1 sprowadza sig do dwech podprubleméw rozmiarw n/2 + liniowa licabs dzialai). Pod- stawmy w= 2% Wiedy 2 = 22TH SPT) 4 ett + et 712) + ket! = 0-4 enlogn Mamy zaitem Tu) = @tntons) 1.3. Funkeje tworzace mii trudoo wyznuczyé rozwigaunie rownania Tn) bezpasrednio. 7% rvsenania rekureneyjnego (inode nie istnie€ zwivzly webs), Mozna wéwezas sprobowa etude funkeji wore Fh, kid poly ni ztilezienin Funkeji Ka= Liz Tin), i na jej podstawie wnioskowae © wlasnoseiach same} Metode ig stosuje sig ezesto w analizie probubilistyezne) wartosel oezekin rytindw (do wyzhaczeuia ie] 1 warianeji zmienne| losowe) X,). Rozwazmy funke 221, Podstawowe nasady analizy alyorytmdw i razkladu pravdopadobiessiwa py zmienne} losowe} X, (2 wna rekureneyjnyeh na pu trudno jest ezeste, wyznaczyé rozwigvanie) PCI= ZPat auuearony, 2e wawenis Lu Wartesé oczekiwang i warianeje zmienne} losowe) X, mozna wyrazi€ za pomacy warto- ei pochodnych lunkeji P,(2) dla 2= 1 w nastepajacy sposity aavelN,) =P (1) Pe) + PL = PE Poicy= So ktk = Pye Sta PLA) = Shag PEC = Sb ~ Vypage tzatern want) = k= PLP tae = EE Pa = 2 E bar + PED Pre = Sw Dg bg = BPE PLUS = PEAY + PGT) = PROD Moana wige wyenaczye wielkase’ ave(X,) i var(X,) (a 60 ra tyon idzic réwnie? lvzon0sé oezekiwan i vezekiwinsy wrazliwosé algorytme), nie zajae explicite rozkadu psa tyl- ko joao funkeje tworzaea, Ld. Poprawnoéé semantyczna ze program wykonuje postawione praed wim 2 Poprawnesé semantyezna wznae danie. Stosowana metoda dawodu jest indukeja matematyeza wegledem liezby pow A, Poprawnosé somantyerns 28 rei instrukeji iteraeyjne} bald poziomu zagniezdzenia realizaejt procedury rekw nej. Rozwazmy na prayklad algorytm binary potegowania: ency= in20) white m#0 do ogin {7:37 = ya" am> OF LE oa (me) then y 2= yt sem aiv end, tyes") Warunek 7, nazywany niezmiennikiem instrukeji iteracyjne}, opisuje wartoset zmien- nych w swakeie realizaeji programy, Zamieszczony warunek y jest spelniony na poczatku, uly rozpoczyna sig realizacja instrukeji itetaeyjne), i kuzde powt6rzenie tej instrukejt zachowuje go. Zachodzi on zatem, guy koriezy sig realizacia insirukeji iteracyjne}, 2 exe 0 kano wyprowaulzié warunck koricowy y = x", Niezmiennik jost zwrykle rozszerzeniem \warunku kofcowego, jak to zwykle bywa pray dowoilach indukeyinych. Choc praed stawiony dowd dowodzi warunku {y= "J to jednak nie dumaezy dzialania algorytmu. Aby zrozumieé, jak dziala algorytm, przypatramy sie postaci binarne} liezby a wewnatra algorytin waite m> 0 do begin BY me aye ads xber tole a D2 ema SE odd (m) then yr yt; mi mai 2 Zenwycesj wymaga sig od dowod6w poprawnosei, aby na ich podstuvie mozna bylo srzumieg, jak fuktyeanie dziala algoryim i dlaezego jest poprawny. Aby dowd popravsnose! by! kompletny, musimy jeszeze dodatkowo udowodnié die whasnosel © wykonilnoss operacii_ czgsciowych, jak dvielenie, pracchodzenie po dowinvaniy lenic sania) ineksovwavn is » skoiiezonosé dvialania kutdej instrukeji iteracyine) 1 Kazdego wywolania procedury rekurencyinel w dheewie lub Fiseie, o 24 1, Podstawawe zasndy anatizy alyory W wypadkt: algoryime polggowanis binamego jedyna ezeSciowa operacja div jest 2a wee wykonalna (gdy® deiclimy przez 2) oraz obliczenie instrukeji iteracyne} jest koi zone na moty nastepujqes) wlasnosei liezb naturalnych: dla kagdej Rezby naturale} 1 wykonujae dzielenie calkowite n wielokrotnie przez 2, pa skesiczone} liezbie krakow olrzymamy 0, Co wigee), liezba wykonailinstrukeji iteraeyine} jest ribwe lieabie dziel cealkovwitych przez. 2, ezyli dlugose binarne] a. Dla n> G-mssuy zaten Won) = AQ togn d+ | og + OI) Aan bn) (rozmiarem danyeh jest n, 2 operacja dominujaca ~ dziefenie calkowite przez 2). Wilri- my, Ze w tym wypadku dowodzenie skoiiezonosei drialania instrukeit iteracyjne} jest pe winwane ze znajdowaniem pesyiistyezne} zlozonosei czasowe}. Jako preyklad algorytmu rekurencyjnego rozwa2my alyoryti Euklid rnajwiekszego wspélncgo Uzielnika dwich dodatnich lier naturalnych A znaidowania function NuD(x, y + integer) : integer; var r+ integer: pagan (a: > 0 ay>0} erent if r= 0 then NWD := yelse NND :=NWD(y, 1) {Beno x, 71} ena Praex (x, y) oznaczylismy najwiekszy wspélny dzielnik dodatnich Tier’ maturalnych si y Poprawnose funkeji NWD wzgledem podanych warunkéw pokazujemy dowodzac, 2e dl: kazdych dadatnich wastoset naturalnych x i y obliczenie wywolania funkeji NWDC, ») kosezy sig 2 wartosciy NWD = (x, y). Stosujemy indukejg wzgledem wartasei y. Za kladujae poprawnose dla wszystkich 0 < yl © rear ¥ injec ‘agi podw6jne] eyklicznej: te operacje co wyze} plus ejeer, wstawinnie im, usuwanie danezo elem Listy. 2 iinpleme jednego elementu pezed doug Kavala zatem operacja dotyezaca kolejki podwojne} ma pesymistyezng zlozonos€ e7asor vw OC} imiplementae}i porlwajne) eykliczne}, Wael tej implementa}i jest wzycie OU) konwirek pomocnieze) pamigel na pamigtanie dowiazai (i jest rozmiatem listy). Festi jest znana maksymalna dlugosé m kolgjki podwijnej, to bardzie} oszenedna pax migviowe jest implementaej Listy za pomoea tablicy eykliczne] QfO.m — 1]. w ki6rej nastepnikiem pozyeji OSES m~1 jest poryeia Gt Domed m, Woweras jesli = [it oo hyh 60 OLE 4 D mod se] = x, dla 1-7 Sn i pewne] porycfi 0S Praykladowo operacja popta ma imple poptk, mis tene 0 ‘chen exvor” else bagin kim (+ Lmod mi nisnad ond; crs pera wee 1.5, Podstawawe struktury danyeh 20 sj pas, 3) nk, my x) 2 df= else begin Ole = Jes (k= 1) mod m end 1.5.2. 2bidr W prreciwieistwie do elementéw listy elementy w zhiorze 8= [xy 25, a0 %} nie podane w zadnym ustalonym porzadku, (Zawsve bedziemy zakladaé, 2e rozwaany bir jest skoviezony). Liezhg 1 elementow w zbiorze S oznaczamy prace |S] i nazywamy rormiarem zbiort 5. Podstawowymi operaejansi na zbiorach ss (a) fnseri(s, SS = 8 {a} (wstawienie element x ado ebiors 8); (b) delete(x, Sys * S == $= Ex} (asunigcie ctementu x ze xbioru 8 rrue, jesli xe 8 (©) meaner 8s wynikiem jest wanase | i es (sprawdzenie, ezy x jest elementem zbioru 5}: a) minty ravrdcenie najmniejszego element w zbioree pewnego ustalonego liniowego porzadku =: (e) deleremin(Ss 8 = S = (mingS)} (8) anion(S, Sp: obliczenie S, WS; (pray zalozeniu, 2e zbiory S, 1S, sq rozlacene), zuwaglednieniem Oto podstavowe implementacje zbiorn $= cee «& Wektor charakterysty Pray zaloenia 2 nies U moze sy jako zh nds dla abiey C, amy true, jest ve 8 ad false, jesli xe S Opertcje srr, delete | menaber maja pesynisyeana rozanose ezzsow O(1). Zoi jest proporcjonalna do rozmiaru zbioru indeksSw tabliey C (ezyli Faktycenie do eozmiags univsersum U). © Implementacje stone Oorywiseie ustawiajqe clementy zbioru Sw pewnym porzadku, otrzymujemy Fite Wavysthie implementaeje listy moga byé uéyle do reprezentowania chiar. Pray 28 1, Podstawowe xasady analiny algorytmow rozwatanych wezesnie} implementacfach listy pesymistyezna clozonosé exasowa perl slawowych operae]i na zbiorach jest proporejonalna do rozsiaru zbioebw COpisujae algorytmy, bedziemy ezesto stosowae razszerzenia jeayka Pascal, Nalezy 10 teaktowae jako postaé robocza ~ poseedaiy pravd ostatecznym,Scislym zapisem algoryt miu w jezykw programowania, Postaé posrednia ulawia zrezumienie isoty rigoryimu, Trzcba pamiglaé, 26 postaé ostateezna, zapisana w jezyku prog dawiera czesto taka lene szezeysliw, #2 trudno wyehwycié idey algorytin. 7 ti wwlasnie wagke przyjlo sig stosowaé w dokumentali oprogramowania posrednia po- sae zapigu algorylmn, Preyktadem waytecane} abstrakej algorytmiczne jest konsteukeja fox each x indo I zy wana do opisw daialan f, wykonywanych dla kaddeyo elementu x nalezacego do listy lub zbiora S. Nie bierzemy ti pod uwage mechanizinu preeglqdania elementcry mnitujemy sig na opisie praetwarzania kazdego 4, danego algoryémnu, Insteukeje oo zwykle stanowi istate for each x in Sao sums preedlstawiaja sumowanie liceb w zbiorze 3. Opis reprezentacji zhioru 5 i sposobu wybo: fu jeyo clementéw odkladamy na pédniej, Koneentrujac sig w dune] chwili tylko na Jednym problemie Gv tym wypadku na sumowaniu elementéw zbiort S), |W nastepnym podrozdlziale podajemy wigee| praykladow zwigzanyel 2 odkladan Péénig} dakladnego opisu pewnych aspektdw alporytmu. 1.5.3. Graf Graf to system, ktry zapisujemy jako G = (V, B), gdzie V omnacza zbiér skor- ‘czony, kirego clementy su nazywane wierzcholkarl (xdy bedziv nam zalezalo na pol- kresleni, 2e graf jest strukturg danych, uzywac tez bedziemy nazwy wexly), a E ~ zbidr krawedzi, ezyli par wierzcholkiw ze zbioru V, pray czym, dokladniej, albo £ jest pout- ‘bionem zbioru par uporadkowanych (x. ye Ay ¢ WA xz y} i wledy gral nazywa sig zorientowany, a kriwedzie s vznaceane stezalkami Iyezacymi wierzcholki (ys. 1.280, albo jest podzbiorem zbiora wszystkich dwuclementowych podzbiogdw zbion Vi wte- day gra navzywa si owany, «1 krawedzie sa oznaczane liniami (rys. 1.2b) co) + 7 pys 12 om malaj kee wr grace (4) are zene © yam Ow pre neers W obo tyeh wypadkach krnwedé Ijezaea wierzchalki x iy oznaczamy jako (3, 9). Roz: ming yeni G = ( VEim= (EL Ble erate 1) jest wiwwny sumie dich Hiezbs wt ny 1) = 2). ala gorientowamege w= m1 — z niezorientowanego (co wezywiste) 1 0 ) (rakladamy, 2e zbi6r wezlow ¥ moze to posta bye hiore implementagje wrafa G = (¥, indeksiw dia tablic), © Listy sasiedatwa Din kazdego x V budujemy tiste (oenaezana przez Lfxl) wierzehotko y bedieyeh sasiadami #41). (9) © 2. W tej implementac)i jest potrzebnit pumieé OCH + 0). oM ssasiedztya [1 jesli Oy ype AUG = to, jes (x, 99 1g) implementaeji jest potezebna pamigé OOF) Definieje dotyezace prafw sa zamieszezone w rozdziale poSwigconym nlgerylmont na ach. Tera rozsvadymy tylko jeden prayklad problemu pratowexo. A PravKtan: Algorytm precchoulzenia gratie cod wierzchotkar p, watery ede ale % p. Doswolonyny mie Nivch G = (¥, £). IM= a, [B= m, pre Ve Wychods wiedzié kaddy wieracholek 1 kaialg krawedf, kidre sit oxi z exlwiedronego jh wierzevolka, chem jest preeiscie krawedzia graf wychod W jednym kroku bedziemy odwiedza¢ jeden 2 wierrcholkGw ore jedna % kraweu geal i zaunacuné je jako odwietzone, Na pocaatku wszystkie wieracholki i wszystkie Krave die sq ntanacrone jako nie odwiedzone, 1. Odwied wierzcholek pri zaznaez wo jako odwiedszony 2. Dopaki x jednego 7 edwiedzonych wierzcholkow wychodzi nie odwiedama jesacze krawed, wykonn} pode czynnosei ai) wybierz dwiedzony wierzcholek, powiedzny v, 2 kiGrego wychadai nie odwie- anna krawedi: by) swybierz nie exiwiedzona krawed2, powiedzmy (v1), wyehenlzaca zavienzcholka vs ©) venir. krawyld (¥, 1») jako adwiedz0na: A) jest wierzcholek w nie zostat odwiedzony, exwiedd yo i zazaiae jako ed wiesiony uly analizy algorytinine 801, Podstawowe 2a Stosujae indukeje weghedem odleglosei danego wietzcholka od wierzeholka poczatko- wegu p, movemy udlowadnig, Ze w kazdlym algorylinie stosujacym sig do powyzszez0 schemata musi nastapié odwiedzenie jeden raz kaddego wierzcholka i Kazde} kraweelzi alu G asinine) % p- Nie biorge pod uwage same) provedury exlwiedsania wier7chul kow i Krawedzi, alozonosé kaddego takiego algorytine jest proporgjonalna do kyezne} liczhy wierzcholkve i krawedei (4 wige jest liniown wagledem rozmiars grat) Povwyasay opis stanowi schema klasy algorytmdw. Aby otrzymaé konkrety aigorytin, nalezy wykonaé podane tu kroki 4. Prayjaé odpowiednia reprezentacie wrafu, na prayklad V= (1, 2,04} i listy sasieda- wa Lv] dla ve V. 2. Ores, e0 to znaezy aatanacz wierzcholek jako odwiedzony”, Mozna ui prayklad dlolyezyé do kavzdego wierzcholka pole visited|»] i praying, te false oznacea ,wierz- ccholek nie odwiedzony”, a true ,wwierzcholek odwiedzony” L--Okreslic sposd wybort odwiedzanogo wierzcholka, zkiGrego wychod7i nie odwiedzona kraweald, Mozna na prayklad praechowywae takie wierzcholki w Kkolejee tub nt stoic. 4, Okeeslig spossb odvidniania (dla danego wierzchotka) krawedzi odwiedzonych od nie pudwiedzonyeh, Morn aa preyklad trzyma€ na liscie sasiedztwa danego wierzcholka swskuznik current|o] do pierwsze} nie odwiedzone} Krawedzi (everrentfy| = nil azn. za, 4 wsrysthic krawedzie wychoxlzace 2 dango wierzcholka zostaly odwiedzone), Priyimujae te prxykhalowe ustalenia, wzyskujemy hardzie} uszenegstowiony sehemat pracchotvenia gral (isi jest procedura yexwiedzania” wierzeholka; zrezygnowalismy 2, procedury odwiedzania krawedzi), Oto on: gor y = Ltonao ogin vinicedv| += false; Ustaw wokainik current[v] na plerwany wiergchotek na Ligele vl ona viait(ph: visitedtpl = bru Af current{p| © aid then borin ses (ple while § <> 0 ae kia pdwiedzane do tej pory wierzcholki, zone keawadziel kidrych wychodaa nic odwiedzone Fe: bouin wybiers wierzchotek ve sbioru wiernchotkiem wskazywanyn przes current{vl ypnego wierschotka na przesuh wekasnik cuerently] dona: riseie Hf L€ cucrent{v] =i then #2 9~ {vty Ag not visited) then 1.5, Podstawowe struktury danyeh an bouin visit (wr visitedl 1 eruer A€ current|w] © nil chen 5 := SU {u) ond end Dwie podstawowe implementacje zbioru 5 w tym schemaeie algorytmdw to stos i Kole ka, Najpierw uszezeglowimy schemat przechodzenia grafu, pracdstawinjae S za pomocs stost i intempretujae operacje na S jako operacje na stosie (Prayjmujemy, 2 operaeje pop 1 push beda realizowane jako procedury, a front jako Funkeja). Otrzymujemy algorytm przechodzenia gratu w glyb (metoda DFS), procedure dfs; begin for vis Leonde begin visitedy) ustaw waka: ligeie Hv] end; fatse: nik current|v] na pierwszy wierzchotek na elp): visitedtp] := true: A currene|p] <> ail then begin I; push(s, pl: while s> 0 40 {stos Szawiera wonyathicodwiedzonedo te} porywierschotts, 2 ktOrych wychodaa nie odwiedzone jeszcze krawpdzic} begin vis fronts}: nicch wbodaic wierscholkiem wekaxywanywe prze current brace wakagnike current| vido nastepaogo wierzchotka ha Lideie Llvl: Af currently] = ni then pop(5); Lf not visitedlw] then begin visietw) visited := true: Lf currentlvl & ail then puch(s, w) ena ond ond Zapisvemy torus schemat preechndeenia graf, preedstawinte 9 jako Kolejky inter pretujqe opericje wa S jako operacje na kolejee. (Pezyjmujemy, Ze uperaeje pop i inject bed realizowane jako procedury, a frou jako funkeja). Oirzymujemy algorytm prac chodvenia geafu wszere (netoda BFS). procedure brs; begin for v begin viaitedvl ustaw wski uy ko nae false: énik current|v| na pierwozy wierzchotek na Liscie ena. visitipl: visitedlp| Lf current{p] <> mil then begin S:=U; inject(s, pb while 5 = 0 de {kolejka 5 zawiera wazystkie odwiedzone do te} pory wierzcholki, x ktérych wyehodza nie odwiedsone jeszcze keawedzie} begin = Eront(s}; niech wbedzic wiersi -anelvl: hotkiem wakazywanym prc inik current|v] do nastepnego wierschotka na ligeie Hv]; Af current(v] = nd then pop(s); Af not visitedlu| then begin visiet) visited := bre LE currentlw] < nil then inject (S, w) ond end ena end 6 Ryw 18, Praladoy yar 1.5, Podstawowe stnuletany danyel 83 Wermy cal ayumi 13, esti p= 1, LIN] = [2 3), 121 = 4,51, L131 = 15, 6, £4] = (5) LIS] = 11, £16) = [te podcaas wykonywania algoryimu dhs nastypi odwiedzenie wierzcholkiw ral wna Stgpujace} holgjuasei: 1, 2, 4, 5, 3, 6, Natomiiast w wyniku realizacji algorytma brs nastapi odwiedzenie wierzcholkow grata W nastepuace] Koleos Zastosowana powyze} metods konsivukejtalgoryimiw nazywa sig metod transformagii. Wychodze od ogdlnego wytmu, dokoaujemy koleinyeh \wyhorsw transfortjaeyeh zapis algorytmu na eorae bardziej szezegsitowy. W proced rach df hfs wstawilismy jeszcze do loprucowania” kilka spray, na poy kwestig inc ist ssid § wskaaihow current, pezesuwajaeyeh si po ie sai dias wierzcotia » w teakeie odwviedzania Kolejiyel krawedzi wychoaljeyeh 1» Osfeczuyeh (pra reaizacia algorytmu) wanstormacji dokonyje kompilater, pree- waaleajge program w binainy kod muszynowy, 154. Notacja funkeyjna dla atrybutow obiektow Do unnaczenia atrybutéw obiekt6w bedziemy stosowné notacig: funkeyin}. fest X jest zbiowm wezliv w strukturze danych, a Y dowalnysn zhioner i jest okr funkeja > ¥, 10 bedziemy to zapisywae jako f(x), na pray fx) = Slows Nic bedziemy zatem stosowaé notaeji wskazujaeyeh, jak dana funkeja jest realizowana pizez konstrukeje jezyka programowania, to znaezy notacji obiektowe) (wekuZaikavwej) Wf (f= mvzwa pola rekordu), na preyklad x f= y, allbo notaeji tablicowels is} (nazwa tabliey), ni preyklad fle] = y. Jest 102 nine zasada prayiigty przez nas W tej ksi ibstrakeyj konkretne; ee keyjaymi strukturami danych, dopuszerajacymi rzne implementaeje. tnstrukeja prey pi- sania f(s) y jest abstrakeyjng opernejg na obiekeie bclacym Funke}a (odwzorawwinien) f akarujaca oakdzickanie poziorn , charakteryzayjacego radia i whasnasei obiektGw ora, aperacji, ox! ich izacji. Funkeje okreslone ns obicktach steuktury danyeh si rtwnied abstrae LBB. Drzewo Dezewo to dowolny niezorientowany graf spiiny | seyklivzny. (Prayponiinamy, 2 spojnose oznacza, i kaze Uwa wierzchalli grafu sa polwezone Seie2ka ulworzan 2 kr 0") wedi gral, Acyklieznosé omnes brak eykli prastyeh ulworzonyeh % krawed Dezewo 7 korze sm to drzewo % wystznionymy jedaym wierzeholk’ 1. Podstawowe zasady analizy algoryt £5, Podstawowe strultury danych 35, reo 2. korzeniem i korZett Korzeniem. Je2eli z kontekstu bedvie wynikug, i chodei 0 rzewi jes! ustalony, lo bedziemy po prostu pisaé ,drzewn ‘Zakladamy Drogi Czytelniku, Ze znase podstawowe pajgein dotyezace drzew, Praypo= Imnijmy je na praykladzie drzewa (2 korzeniem) % rysunku 1.4. Wierzcholek 2 ma tray nastgpnikit 1, w iw. Kaddy wierzcholek, ktory ma nastepnik, jest wierzcholkiem wev agtemym, » przeciwnym nizi¢ jest Hisciem (na przyklad y). Zbide nastepnik6w wien cholka x w dezewie T bedziemy oznaezaé jako children jx). (Beuziemy porn T wledy, Kiedy bedzie jednoznacznie wiadomo, o kiGre drzewo chodai}. Kardy wiern= ccholek z wyjatkiem korzenia ma poprzednik (na preyklad v ma poprzednik u). Popreeil= nik wierzcholka x w drzcwie Tbedziemy eznaczaé jako p,(s). (Bedziemy pow ‘T wteuy. kivdy bedzie jednozmaeznie wiadomo, © kt6re drzewo ehodz’). Poto wierzcholka 2s zaréwno on sam, jak i jego nastepniki 1, 1» iw. ale takZe nastpnik, » wierscholkt 1, Z kolei za praadkéw wierscholka v uwara sig jego samego, jego popvzedaika ua takie wierzcholki z ix, lezace na scietce od v do korzenia. Glebok (lub puziam) wierzcholka w draewie 10 jego adlegiosé od korzenia (na prayklad ma Jhokosé 0, av ma glybokosé 3), Wysokosé wierzchotka to maksymalis dl (na prayklad wysokosé + wynasi 3, a wysokosé y ~ Oh ‘od danego wierzchotka do fis Wysoknsé drzewa to wysokosé jego karzenia (W naszym przykladzie wynosi 3), /\ Hy LA, Deas 0 korzeniv Draswo reprezentuje sig 2wykle abo 2a pomoca struktury dowigzaniowe) (wZywajac rekordéw i dowigzai), allbo za pomioca struktury indeksowe) (w2ywajye tablicy). Guy siruklura dezewa jest ustilona, stosuje sie na ogdl reprezentacie tablicowa, a ey re prerentowane drzewo moze mieé dowolny ksztalt ~ dowigzaniowa. Czesto pray przed= tawianiw algorytmow nie jest istotne, jaka reprezer uwzywana. W takin wypad- ku hedziomy stosowad odin, aibstrakeyjna notacje funkeyjna px) i ehildren(e) camiast konkretnyel xp ia%hildven exy pls] i ehilerent} ar raowa 2 Korneniem ‘KLAD! Algorylm preeehodze! W padanyme uo algoryimnie zak wierzcholek drzewa, a previst(v) i pastvis#() to procedury speeyNkujaee ul: konywane ~ odpowiednio ~ pray weiseiu do wierzchotka ¥ i pray wyisein 2 nego, ny, Ae wertes jot qypemt danych, eepmeecntujgeye slania wy procedure traverse(y : vertex}: vary: vert begin previeiet; for each w in children(v) de traverselw) postvisit(y) end praversa, Aby praeigé cale drzcwo o korzeniu r wywolujemy raverse(r). Gay procedura pasivi- sii(o) nie ma tesei, many Jo czynienia 2 praejsciem drzewa metoda preorder, a gly procedura previsit(») nie ma ireSci ~ metoda postorder. Metody preorder wZyjemy na preyklad do obliezenia glebokosei wierzelolkéw drzewa, a metody postorder do ob- liczenia ich wysokosei (zob, zadania 20 i 21), Srezeg6lnym preypadkiem draewa x korzeniem jest drzewo binarne, w ktéryh dla kaidego wierzcholka v mamy lehildren(»)| $2. W dreewie binamym kazdy nastepnik wierzcholka » jest albo lewy, albo prawy (pezy ezym tylko jeden moze byé lewy i tylko jeden peawy). Urywaé bedziemy nastepuigeych oznaczet: tat w precunge prawy nastepinik jes nil Ww przeciwnym razie righ = { jest okresony Din kazdego wierzcholka v zbiér potomkéw jego lewego nastepnika ow. 2bi6r potom- kow jego prawezo nastepnika tworr drzewa nazywane ~ odpowiednia ~ Fewym i pr sym poddrzewem wierzcholks¥, C7 PezvKran: Algoryim preechodzenia dezewa binsenego W podanym tu algorytmie zakladamy, jak popraednio, 2¢ vertex jest typem danyeh, reprezentujaeym wierzcholek dlrzewa, a previsit(v), invisit(v) i postvisi(v) to procedury specyfikujqee Uzialania wykonywane ~ odpowiednia ~ pray wejsciu do wierzeholka v, po roxpatrzenin wierzcholkw w lewym poddrzewie a przed rozpatrzeniem wierzcholkiw |W prawym podldrzewie i przy wyseiu 2 wierzcholka v. procedure b-craversa(y : vertex) begin previsie(y); LE lofe(y) # nil then b-eraverse(Iefttv)) invisit te); LE righe(v) # mil then b-traverno(etght (17 ow 361. Podstawowe Guy provedury invisir i postvisir nie maja teSei, many do erynienia« praejseiem metoda preorder, gdy previsit i posiisir nie majy tesei ~ x przejseiem metou inonler. Gay m metoxla poston —A 16. Eliminacja rekursji Algoryiny rekureneyjne su naturalne dla wield struktur danych, a dia prow ja Ureew w szezegslnose’, Nale?y jeduak pamigta maga waycia sts, a 40 pociag ‘wspdlezynnika proporejonalnosei w zlazonos , He wealizacja rekursji a waszynie Wy> va soba zwigkszenie zlozonosei pamigciowe). a tale i ezasowe} A Przvkean: Preegladanie drzewa binamege metod inorder procedure inordar(v : vertex); begin 4€ Lofe(v) # nid then inerdar(Iefe(vi}: invisit(v): Af right(v) #ai1 then inorder(right (V1) end inorder; Procedure wywolujemy, przyjmujue za paramete faktycaty korzen racy r, eayli pisze= my inorder(?), Pray symulaeji wywolania provedury rekurencyjne} inorder przez pro ‘gram nierekureneyjay nalezy zapisaé na siosie wierzcholek biezwey v oraz migjsce, do kiGrego maledy wedcié po zrealizowanin wywolania rekureneyjnego. W podane} dale} procedurze nazwa stack oznacea typ stost, na kiGrym umieszcza sig pary wartosei[r, 1), gdzie v jest wierzcholkiem, czyli wartogcig typu vertex, a i etykieta (operaeji push i pop tuzywaniy jako procedur, a operacii sop jako funkeji) procedure nonvec-inorderl (x + vertex) Anbel 1, 2, 3: var qi stack: be de.as onin gests visas 1: tpocaatek symulacii wywolania rekurency juego} Lf Lofe(y) #nil then begin {symulacja wywolania rekurencyjneyo inoxder(Jer= (091) push(a, Iv. 202 lunteszezenie na stosie bietqce) wartodci vi etykiaty powrotul vr deee(y) goto | Ipraygntowanie ena sictv) Lf right(v) ¢ mi then bosin [symmacia wywolania rskureneyjnego inorder (ight bust, Uv, 30): vy nie hi co} waxtosel vi etykiety vis HHUA WW): [pexysotowanie nowage paranetru) oto 1 3: {powrsit do mie: ig ql then begin (v, a] 2 frone(an (nenywrécenie wartodes vz poprzednied instanced i i usyskania informacji omiejscu powrotu} pop(a); [skasonanie wierscholka sto goto i fpowrsty} ena fend nonrec- inorder iy, de nloziiosé paniveiows werasta o maksynnalna liezby efementive nit stosie q, cZyli W wypadhse procedury inorder o Ola), gdzie a jest Hiczba wieerehwlkiw w drzewie Podany powyzej algorytm, bedaey przykkadem zastasowanin ogdlne} metody eliminaeji slosu, mozna niceo uproseié. Zauwazy, 2e edy roapoceynamy w danym welle now) ntaneje, ie w prawo, nie musiiny juz wracaé do niego, wey? nie pazostale juz w nint nie do wykomania, Nie trzeba zatem umieszezsé pay [1 3] na slosie, Poniewae power zawsze odbywa siy w miejsce oznaezone w algorytinie etykieta 2, praechowywaé jedynie wierzeholki, do kisryeh ma nastapié pownt slusic wystarczy procedure sneer Jnorder2 (rt vertex) abet 1, 2. var q: shack; borin gst vr sr: B81, Poddstawowe nasndy analizy algorytmow Li (poceatek aymilacsi wywolania rekurencyjnego} AE left(v) nid then fermulacja wywokania rekarencyjnego inorder (tafe (v))) push(a, Istawienic na stos biesaces wartosci v; powrot zawsze do 2) v ‘e(vbr (peaygotowanie nowego paxanetru v} goto 1 end 2: inviaie(w: Af right(v) ¢mi1 then begin (symulacja wywotania rekurencyjnego inorder( right (v1 )} vis right(v)i (przygotowanie noweao parametra} gote 1 ena; (powrdt do Instane3i, gdsie nastapi lo wywolanie rekure if qe] then begin vis frenelal Ipr2yweécenie wart eyine} 41 v2 popenednie} instane|i} popla); {skasowanie wierzchotka stosu) goto 2 {powrot} ona end nonrec-tnorder2; eee Koszt zamortyzowany operacji w strukturze danych W wypadku stuktur dunych jest waywany jeszeme jeden redeaj zlozonosci, tow, niozonasé zamortyzowana (kos7t zumortyzowany) operacji w strukturze d ich, Uzycie struktury danych w algorytmic polega zwykle na wykonaniu na ej cia ‘operaeji Oy, Os wn My Cjedna po drug, czyli w trybie on-line). Kosi tej oneraejt zapisujemy jako 1, (1S Sm, Na ogil to nie koset czcczywisly jedne} operaejt jest ryli istotny, a hose calego sgn nperacti Caasami, yay nie da sig bezpostednio vzyskaé zadowalajacege oszacowania reedu wiel- ‘ei (hu preyklu w syluagj, kiedy koset pewnych operaeji jest maly, a ianych duzy), 1.7, Kost zamortyzowany operaeji_w strukturze danyeh 39) \warto skorzystaé 2 metody wprowadzenia Kosztu zamortyzowanego operacji. Poles ‘ona na tym, 2e operacjom w wykonywanym ciagu preypisuje sig koszty zamortyzowane Ay eon ky BY aD of 5) Pads meted lizenia kosau zamontyzowanego jest metoda potenejake. Strik- turze danych prayporzadlkowujemy potencjal @ © kolejnych wartoseiach nienjemaych = 0, yo, Bye tk Hey GG, dla kaddeyo #(-< 7m), Sumujae, otrzymu mys La, 14+ = %) 7 Preveta Rozavaziny strukture danych Stos 7 operaciami a) empry:: ubworzenic pustego stosu ~ koszt rzeczywisty 15 {b) pushes wstmwienie x na stosie — kaszt rzcczywisty 1; {e) mpoplky: usunigeie ze stosw & element6w ~ koszt raeczywisty k. ‘Za potenejal siosu przyjmijmy jego rozmiar: (Stos) = [Stos. Wtedy koszl zamortyzows ny operaeji push wynosi 1 + 1-= 2, koszl zamortyzowany operacji mpop k + (~ k) = 0. Jesli wv cingu wykonywanych operacii jest m operaeji push oraz 1 operacit mpop, to tealkowity koszt ich wykonania jest $2, Gdybysmy szicowall go x gory pracz koszty 40 1, Podstawowe zasady Liny algorytmow yeh operieji, otrzyiilibysiay zatacznie mniej Lo- prayklady uayeia koszta zamortyzowanego 2 pesymistyezne wykonania pojedym kladny wynik m+ kl, Bardziej zlozor Imieszcamy w dalsze) exeSei ksia2ki 18. Metody ukladania algorytméw Proces ukki nia algorytnu rozwinzujncego dane zadanie algorytmicane ma chara dajaey sig zalgorytmizowaé, Istnieja jednmak ogélne metody, Krew pe wnych sytvagjch mozna zastosowaé. Ich uzycie prowadzi ezesto do skonstruowanis seybkich algoryiméw. W nasigpnych rozdzialach zajmiemy sig zastosowraniem takiel ‘wlagnie ogélnych metod, W tym podrozlziale podajemy kilka % nich, x ktGrymi powin nes sig jz zetknaé pray nauce programe 1.8.1. Metoda ,dziel i zwyci¢zaj” Problem rozmiaru n zostaje poUzielony na kilka poxproblemdw mniejszyeh rozmis- row w taki spos6b, 20 % ich rozwiqeat wynika rozwigeanie zasalniczeno problem. [Naturalna. Konsteukejq. programistyczna jest w tym wypadku rekursja, Praykladem xa- stosowania tej meluy jest algorytm binarnego wyszakiwania elementy w iscie uporzal kowanych wartosei. Porbwnanie danego element 7. elementem znajdujaeym sig postod: ku cingu sprowadza poszukiwanie do lewej lub prawe} polowki zadanego ciagu. 18.2. Programowanie dynamiczne Programowanie dynami kiedy wymaga ona wielokroin sup Ticzenia rozwia yeh samyeh pouproblemiw. O10 wpoprawia” metodg .iiel i zwyeiezaj” wv sytmeji funk ekureneyiny Hees pty: dwsianowy[”) fonction wap(,m: integer) + integer: {oSms ny begin LE (a= mor (w= 0)) then usp 2 t else wap i= wopin— Lm) + wsp(a~L,m—3) Wielokrotni jest tw powlarzane rozwiqzywanie tyel unyeh podproblemsw, na przyklad sw au visp(S,3) = wapld, 31+ wspld, 2) = wp, 3) + wy, 2) wap, 2) 4 wp. = = wspt3, 3) + yp 92,2) 4 wspt2, Db sp, 1) 4 sp(2.0) = wp, 3) oypl2,2) F w9pt 1) w9p(1,0) + wspC2, 2) + wspC 1,1) wp) + fe awspt 1s 1) + wspt 0) + wpt2, 0) 2)4 wpe a goryim w tukie} postaci mma dlazonosé wykladniczi. Aby uniknaé powtarzania wyli= yl samych wirlesei, mozemy zaczaé proves oblicze ud rozwigaania najmiej- sayeh pouproblemw, zipisaé rozswiqeania w tablicy powoenicze, x nastgpnic uZyé tyeh ronwigaas prey wyrnaczanin roxwigeasi podprablemeéy wigkszyeh rozmiardw ~ az do czy wena problenn wyiowego. Ay ma pia obey"). wey Lablicy pomocnicze) pom[D.nl liezae w Hej Fazie pomlfl = (jpamtsien it ‘] teontos =") Ovraymnny algoryten ma rlozoviosé ezasows OG) 1.8. Metoda rachlanna Gily mozliwych kombinaeji danyeh, klére moga by€ rozwiguaniant, jest liezba w Kludnicza, rozpatrywanie danyeh w kolejnosei oporzadkowane} prowadzi ezasami do zadlowalajyeego roziviazania. W pewnyeh wypadkach prowadzi (0 do znalezienia pele tle ezescie] do znalezienia razwigzanin przyblizoneyo (la jest nivopty neyo rozsvigzani sane go) Jako prayklad rozsvazmy problem zapelnienia plecaka. Mamy danych 1 preedinietsv 0 nie= Ujemnych razmiarach -adpowiednia~.ty.y..4y of pleeak o pojemnoseie 2 0. Nasa adaniem jest wybré —pewna Tiezbypreedniioiw 4, je ty th deby 48h ta, Se or Feby porostajace Ww plecaku” wolne hixjsce 6 = (4b 4, bo + 4) bylo jak najmniejsze. W metodzie zachtanne} pakujemy plecak Ct ich, Znaleziony 24 pomoci te) metely \wybor posits ae isi optyimainy, jak w wypadku plecaka w pajemnnsei 3 pre 1S, 15. racrytjae od praedaiindye 0 mamniejszych rez (0 inyin sposobie stosowania metody zachlanne| mozemy sig preekonaé, rorwigzuie ki foto problein sortawania: dla danego eiqge wartasel ze zbiord iniowe uporzadkowanes0 121, Podstawowe sasadly anatiny algorytmiw Ay tty ong ty miley znalede permutacie GU, 2. or ME > (1, 2, ou a) taka, te ogy) gay SoS lyr ZaoUnie Z metoxly zachkanna znajdujemy najpiesw taki indeks j, 2 «, jest najmnicjszym elementem w elgg, i prayinujemy G(1) =. Potem znajdujemy najmnicjszy clement z porastalye wyrazdw eigue i attzymnjemy sastepny indeks o(2), Powtarzamy tg procedure wz do olrzymanin wszystkich indeksthe (4(3),.., ota). Prob fem sortosvania jest temacem nasigpnege rozazialu te) ksi 1.8.4, Inne metody Wezesnic| w tym rozdziale méwilismy juz 0 jednej wane} metodzie konstrukefi Algorymsw: metodzie Kolgjnych transformacji (prey algorytmie pracchexlzenin geatu) Redriemy % nig) wx kornystaé w nastepnych roudziaich, ale przedstawimy swnied howe metody. Warto pray okazji wspomnivé, 7 te same n ukladania alzoryiméw w riznyeh dziedzinach algorytmicznych, sl pogrupowane tematyeziie, pow wkladania algoryiméy i (yeh uzywa sig. rianyeh sytuaejach ys stosowane pray rl jo mastepne rozdvialy nienes zwhicié uwage na to, jak tyeh samyeh metod nyelt struktur danyeh (abstrakeyjayeh typdw danych) Zadania + Pordwnaj raedy wietkosei nastepujaeyel Funke}, poreadkujae je ud inajniéseyeh do ajwyzszyehs (a) whog i+ a (0) loan (on (a) wn tog e) a" log Dia jakich wartosei » es Mog 10m Sprawl, cay Jezel se O(gIn)) oa fn) = OKqOD), Ww G2) Fea) + hon) = Len) + gle) (0) yen) = Oleny*a09) Czy punlobne xaleanosei zchodlza dla reed wiethosei 1 07 14 Lo 0: 43 (BK) Niech To) bedzie Funkeja niemalejaca o argumentach i wartosciach natural- nych, a f(x) funkejq niemalejgea o argumentach i wartosciach rzeczywistyeh, Udo- jest sa spelnione nastepujace dwa warunk eg) (b) istnicja stale raecaywiste x, i ¢ > 0 takie, ze dla kaddego rmeczywistego x amy f(x) $ eff) to Th) = @4/o)). Sprawdd, dla kuiryeh z nastepujaeyeh funkefi zachode’ waranck (by ae (b) slog wx wr 5. Rozwine (w sensie asymptotyeznym) mastepujace rwnania rekureneyjne fa) Ton) = Ln J) +0 ¢b) Ta) = 370 nz +n qo) Ton) = 27(Lw2 J) + 1 @) Tin) = Te = 1) + Llogn fe) To) = Tn Den (Mn) = Thal }) + TUL Bla by + Ge) my = TL nd + Tea hy + in rg = LN dy + Lv Cay wynik ulegnie zmianie, gay zamiast stale} 1 wer Ing c? pray aallozenin, Ze TC imiemy dowolng staly nat ((AHUD Podaj rozwiqzanie nastepujacego réwnania rekureneyjnewe b dla a aT(Lite)-+ bn dla n adzie 1, b, © $3 dodatnimi liezbami ealkowitymi Pod) rozwinanie nastepujacego rownania rekurencyjnezo: » din n= MO) ard ait tye ol tozn | dla n> | ‘9, b sq Hodatniny liezban kowitymi 44 1, Podstawowe zasady auilizy alyorytmow 18. Podaj roawiazanie nastepujacego aGwnania rekureneyjnego: da n= » Tay = = Lanka b+Lal dans uae a, 6 ss dodatnimi ficzbami calkowitym 19. Jak zmivnig sig wyniki zadat od 1.5 do 1.8, rozpatrywa€ nierswnosé 1da begin wis aaiv as LE (atgit(ata) $x then a ona ena (e) beat ais: while x2 qdo a= 4ta: while q> Lao begin greg ava: are adiv2: if Qeatq sr then begin risyotta-giamata ona ena ena, 1.44, Rozwazmy obliezenie iloczynu m macierzy Mx My x. x My rie M, jest macie- | wiers2y i, Kolumn, Prayjmujemy, ze mnozenie macierzy reemiar jae zmetody proygramowvan is dyn za ajc Koc fil x m kosetujek » f mjednostek, Kor imiczeyo, okrest aptyialine rozlodenie nawiasGw w wyrazenia M1 % inininuilizajace sunnuryeeny kosal mnezenia wszystkie n macierzy 1.45, Udowasnij, 2 pesymistyezna zlodonosé ezasowa algoryima NWD- wynosi O(log.) gaze n= max(x, y). (Wakazéwhae U2y} lice Fibonace’ 19, 1. W pewnym progeamie ma zastaé wey 1, Podstawowe rasady anatiny alyorytmew - Zaimplementyj w Pascal kolejke podwojna za pomocs| struktury dawigraniowe} tak, zehy kos wykonania kuzdej operacji koleiki. podweine} byl OC), / Poul) implementacie sty, w ktdrej kava operacie kalgjki padwéjne}, slazenie ddsich list Fadwrdeenie listy muzia wykonaé w ezasie OC), Stara} sie why wae jak rajomnie) pani. tabliea aarray[ oi} oF integer, W wypad: ki jakiejstruktury danych mozna nie dokonaé poczatkowego ran Sci w te) tablicy, a jednoeasnie odréanig, czy wartose w tablicy zostala wstasvie lam rnc ise w program, ey jest to wate praypalkowo zen sig w dhnym migjscu pamigei. Sprawdzenie powinno dag sig wykonaé wv ez (1), Moana w2yE tablie pomoeniczyeh pod arunkiem, Ze sig ich nie zainiejuje, Dokonaj eliminaeji rekursii w procedurze b-maverse Ubizalgoryinnrekureneyiny, kiry w danym drzewie x korzeniem Twyenacza gleb kosé kavadeyo wierzcholka. Wyeliminy| rekursjg, waywajae standardowe| metody ze stosem, {16 alyorytm rekurencyjny, kidry w danym drzewie z koreeniem T wyznacea wysie ose kinzdego wierzchoika, Wyeliminu) rekursig, uzywajge standardowe} metady 72 siosem {U6zalyoryimy rekureneyjne, ktGre dla kukdego wierzehalka v drzewa bi 1 Jege nasiepnik w porzadk uenego wy- (a) preorder, (b) inorder, (e) postorder, vapisujae go na pole next) Napise dla danego dezewa hinaene, najwieksza, rytm 7, procedurami rekureneyjnymi, wyznnerat T dwa wieracholki x iy, migdey ktGrymi od Zapise algorytn nonree-inorder bez wycia insteukeji skoku Kade dizewo biname mozna prasjSé bez korzystanin 2 rekursié exy stost (czyli v denlatkowa pamigeiy tylko (1), js jest dozwwolona ama slowinzanh dreewo: wyeh w takeie wykonywania algorytn (na koniee dawinannia mujy bye takic same jak na poezatkw) or jeslt dopuszezamy mozliwosé odwiedzania leo same 20 wwierzehotka wielokrotnic, Jak tego dokonaé? Ul67 algorytn, 127. 1.28. 1.30. .- Rozwartmy problem pracisein draewa binamego metoala preorder pray zaloze 4a Zodanin ze w kwhlym wierzcholku. v drzewa mamy pole visited(v) typu boolean, kt6re moze byé wayte do zaznaeranin faklu, 2 wierzcholek zostal juz odwiedzony. Napisy. procedure przechodzenia takiego Urzewa metwda preorder, waywajae OCI) dodatkowe} pamigei (a wige bes waycia rekursi. ‘Zaprojektuj strukture danych, umozliwiajgea wykonywanie w ezasie O(1) nasteps- Jacyeh operaeji na stosie S 0 elementach ze zbioru liniowo uporsalkowanevo: (a) empry(s) (bh) push(u, 8) (©) papts (4) findinin( 5): sprawdzenie, czy stos 5 jest pusty; ‘wstawienie clementu 1 na stos 5 uusumigeie 2 § wierzchotka stosu;, ‘wyznaezenie najmniejszego elementu znajdujacego sig na stosie 5, je O(1) nastepujacych oda strukiure danych, umodliwiajaca wykonywanie w e7a ‘operacji na poczatkowe pustym zbiorze 8: (a) selee#(S):: wybranie dawolnego elementu zbioru S i usumigcie go x (b) seareh(i, 8): sprawdzenie, czy element é nalezy do S; (©) insert(i, Sis $= SUT} pray ralodeni, 46.86 (1, 2, ott 1. Podaj strukture danych, umoPliwiajaea wykonywanie w ezasie O(1) mastepujneyeh ‘operacji nat poezatkowo pustym elgg 4: a) push{i, as wstawienie elomentu na poceatek Histy 4: (b) peta: 10 lity 4: (©) searein, qh: sprawdzenie, czy element 7 znajduje sig ma (@) deter, gh: usunigcie elementa iz listy @ uusunigeie clement poczatkow pery ralioieniv, 22 9 © (1, Ques Mh ie O(1) mastepujacyeh Podaj strukture danyeh, umazliwiajaca wykonywanie w boperagji na poczatkowo pustejHiseie 4: hoot wstawienie element v na poczatek listy 4: (b) poptai: —_usunieie element poczatkowego listy 4: (6) uptomin(q)s:_asunigeie 2. listy q element najmniejszego {ws ow wstawionych na liste ¢ po elemen ci n navywamy strukture danych, umozliviajaea wykonywanie operici Liem fncrewent, polegaiace) na doduwaniu jedyaki do poezgikowo wyzerowane] Ws Sei, Rozwwavmy reprezentacjy licanika za pomocg tablicy var A: arrayl0.rAL of | oraz zmienne} N wskazujace) indeks najbardziej znacrace} jedynki. Wartosé 481, Podstawowe nasudy analizy algorys licenika ma byé rwna.y= YAU. Na pocaatkw Ald PA raz 1. Rozwazmy nastepuitcy implementaeje operae}i increment: iso; while 1 wehen Nim i; aka"); Dobiers odpowiednio porencjal dia tej struktury danych i udowodnij, Ze hos. ramortyzowany eperacji increment jest OC. 1.32. Do struktury danyeh z zadania 1,31 dodaj oper hastepujaea je} implementacje i reser zerujqea licenik, Pray 8 Pray odpowiednio dobranym potencjale struktury danych wlowerdalj, ae kosat se mortyzowany kuzalej operacii jest OCI), Zalézmy, 2e implementujemy kolejky za pomoca dwéch stossw, pray czym na iednym 2 nich umieszezamy elementy tak, jakbySmy umieszczali je na kotiew kolgjki, natominst 2 drugiego stost pobierany elementy tak, jakbysniy pobicrli je % poczathu kolejki. Gay drugi stos (sluzaey do pobierania element) jest pusty. przepisujemy caly zawartose pierwszego stosu na drugi. Zapisz operaeje holejkl W je) reprezentagji 2a pomacy dwich stos6w. Jaka jest pesymistyezna slozonuse czasowa tych operaeji? Zdefiniaj odpowiednio potenejal dla tej struktury danych ak, zeby koszt zamortyzowany kazde) operacji kolejki byl staly. in 2 Sortowanie ny podstawowy problem inform algoryliny sortowan przez, wstawi ym roadziale preedstawi sortowanie. Podajemy zarowno og6tn lakie jak sontaws. nie pracz selekejg (Selectionsort), somtow: ie Gnsertionsor), sortowanie szybkie (quicksor!), sortowanie przez kopcowanie (heapsott), sortarvanic preee sealanie (mergesort), jak i algorymy waleinione od dziedziny, takie jak sorte hic pozyeyjne (radixsort), # takde algorytmy wykerzystujace pumice zewngtrana. Roz \wazanny problem, ile eb najmnic] tracha wykonaé pordvnas, 2eby posortowné listy 1 cle- mentoyy, Rozpatrujemy tez problemy zhlizone do sortowania, jak seal F-tego eo do wielkosci elementa aycany, 1 minnowicie Sortowanie to problem bardzo ezesto cozawigzywany nia Komputerach, Jego popularnorié inde sig faktem, 2e latwie} jest Korzysta€ ze zbiorGw uporaidkowanyeh ni. nicupo- raalkowanyeh, dfininje sig mastepujtco: dana jest His q = [ays tg, Gl elementG zbiont ince elementy Ww porzadkt, Sortows Tiniowo uporzadkowanego; trzeba dokonaé permutac}i ustawia) ern ‘Spotyka sie kilka modyfikae)i problenm sortowania, kldre wystepuja w praklyee: ‘ elementy sa rekordami dnych; nit rekordach jest okrestona Funkeja kluczat key(o) uporeadkowaé wkordy wreleden wartosel ich Klucza tak, Zeby epla,) Skepta) SoS kewla,) += elementy sit parami [dps sue &, jest Kluczem, a p, jest dowigzaniens do sehurdu da £720 uporaydkowae elemenly wagledem ich Kluczy jak w wypadku pierwsze) mnodyfikueji (unikamy prosstawiania rekordéw, ktére mogs byé ligie) «@ clementy do posortowania moga znajdow bo w pamige! wewngtrzne} (yor many do nich dastgp bezpusredni), albo w paniigei zewngtrane); © cxasamit-wynnga sig dodatkowo zachowania warunke stabilnosei, ua, zachowania poezatkowego ustawienin wrgledem siebie clementiw rownyeh (rekurddw 0 takich samych kluezach): ady na prayklad alfabelyezn liste studentGvw sortujemy wzelgdem wyniksiw egzamino, silt rzcezy wymagamy, aby w wypadke tej same} oveny nazwiska studentow byly podawane w porzdkur alfabetyernyen, Za operucig dominujaen bedziemy prayimowaé poedwnanin elementow w ci dons pamigciowa So) bedziemy preyjmowaé lose dodalkowe) pamiivei (opriex i miigjse pamige’ dha elementiw w eingn), polrzebne] do w {algorytmn, Bedeiemy tz zakladaé, 2e elementy listy q st ficzbami ealkowitymi i ae znajdaja sig w tablicy a, ali] =a, dla 15/0, Bedziemy niekiedy prayimowaé, #e al0] =~, falu-+ 1] =F, gdzie ~e, +00 to liezby ~ odpowi ww ustalone} reprezentagji liczb ealkowityeh. Przy analizie probubilislyezne} (wielkoset Aun) i ON) bedriemy pryjmowsé, 2c danymi wejsciowymi sq permutacje Tiezh 1, 2. an oraz 2¢ kava taka permutacja jest jednakowo prawdopedabna io — najnniejsza 1 najwigksza W kolejnyeh podrazdziatach rozsvazymy podstawow rorytmy sortujace aa. Selectionsort ~ sortowanie przez selekeje Sortowanie praez selekejy odbywa sig w nastgpujacy spossi: irzeba wyznaezyé naj ry ele zamiienié go miejscami 7 pierwszym elementem w i wyanaezyé najmniejszy element w a]2.0t] i zamienié go x dey iid, 22, val tablie zostanie posbetowana. mi elementem 9 ei procedure selectionsort; var i, j, min: integer for i:=1t0n-1d0 bogin (ali] S... ali ~ 1S alé.. al) for J i= i+ 1 tondo LE ol] < olminl then min = 5 almin| <~> lil? {2aniana mieiscami almén) 2 all) ona and selectionsort Anatiza “lozonosei algorytmu selectionsort jest beeposrednia, Wa = AG) = (= NO D+ 1 MOY 2 A BL 22 nsertionsort — sortowanle przez wstavvi Ain) = Stn) = 0. ( procedurze jest wykonywany zawsze ten sam cing operagj, nie= leanie oil danych wejSciowych) Sin) = OCI) (ndwimy, 2 algorytm sortuje w micjseu) Do gkiwnyeh zalet preedstawionego algorytma nateza: a) optymalnosé, jesli chodzi o liczbe przestawies (tylko n — 1); (b) prostota implementscj (¢) zadowvalajgca szybkosé dla. malych wartosei 1 Algoryim selectionsort nie jest stabilny, Znalezienie kontrpreykladu pozostawiamy Ci Diogi Czylelniku, jako éwicrenie (ead. 2.2). Kosztem codatkowego wysilku, 2wigksza- jac jednak wspslezynnik proporejonalnosei zlozonosei, mozna fen algorytm wezynié sta- bilnym (zad. 2.3. 22. Insertionsort - sortowanie przez wstawianie Sonowanie praca watawiane odbywa, sig w maxtgpuiney spossb: dln kaidego aaa asa powtarza wstwiaic fil w ]u2 wporzadkowana cz listy ais sai= 1) prosuduxe ingexeionsert; [al] <=, aby uniknaé testu “J > 1°} var i, j, vsinteger: begin for i :=2tendo bogin (a0) vdo begin {af0}<... Salj~1salj +118... Salil jeiapy ali] dla i 1 then quicksort (I,m); aostaje posortowana cna lista wejéciowal var j : integer beoin (1) J i= particion(, ©}; {podsiat} Af j-1>1then quicksort (1, j~1) Afro j 41 then quicksore(j #4, rh fend quicksert:; Decydujace zmaczenie dla poprawnesei i elektywnose! algorytnu ma funkeja partition kiGra praeksaatea tablieg afr] w fen sposéb, ze: (a) element y= alj] znajdyje sig ua wlaseiwym, astatecznym miejseu w tablicy: Ab) lll... ali WE v (e) ed Mon ale alamy ci 0 nie Jako clement, rvziziclajacy clay allrl, wybieramy v= alll. Pra ‘ald + 1, alr od lewe} steany, dopdki nie znajdziemy elementu nie mniejszey dal. Potcm przeghidamy alf-+ 1}, alr tym ntzem od strony prawe), dopiki nie hapotkamy clementu nie wigkszego niz.[/]. Dwa elementy, na kuirych sig zatrzy nue my. zamieniamy miejseami, Powturzajqe opisane dzinlania, zapewniamy, Ze clementy ni lewo od wskainika wedrujacego ze strony lewe) na prawa se nie wigksze mit all], el rmenty na prawo xl wskadnika wedrujacego ze strony prawe) na lew sy nie mnicjsze wie alll, Kiedy obn wskazniki sig spotykaja, proces dzielenia jest zakoriczony ~ wystarezy element rozdzielajaey v = olf] zamienié miejscami z ostatnim elementem lewe| exeSei Ot peina postaé procedury quicksort pe p procedure quicksort(1, rt integer): ry 1, rokee! lara podeiag do posortowania przez dane wywola n edury quicksort; wwyniku dzialania tn #51 then quicksore(L, m costae pesortowana cata Listawoiéelowa pray satozenia, Boole t 1-1) 54 sontowanle vax v, i, jt integers Ipoczatek funkeji partition) (eer, ali, alt, +. yale) Sale + Uh vemaltli i= geet: repeat repeat i= i + Luntat ali] 2 vs repeat j:= j- 1unts2 all < v; Af i al fli{zamiana mieiscami ali] 2 al3)} uneil ji alt] = alJleal s= vs [honiee procedury partition) if j-1>1 then quicksort(2, j~1) Afro J #1 then quicksort(j +1, x) end quicksare; (Wartn zavrdeci€ uwage, a2 w Wewnetranyeh instrukejacl repeat istoine sq nieriwnose’ 10). rigostre, zobax 0 Prnvntan: Wermy ciag 7, 1, 5, 8, 9, 6, 10,2 i zhadajmy dzialanie funkeji partition, lementem Grielgeym jest v TAS 896, 7, 1,5, 8,9, 6, 10,2, bo i i FAS, 2.9% 6, 10,8, 09 ij FA S.2,6,9 10, 8, 40 ji isi OLS 27D ry) Poliezmy liezhe pordwnat dla wywolania guicksori(, r). Blement dziewey v= alll jest pordwnywany % kaadym elementem w ciagu aff I],..00lrl, prey czym eo najwyre) nentami dwakrotnie, a zatem liezba porsynai wynost r— 1+ 2, Réwnanie liczby pordwnait w praypadku pesymistyeznym jest wige mastypuice: zdwvonit el wo) — WU) 0 Wun = mix WU D+ Wo p)+ 0+ D dv n> “ey wt sortowante sxyblie 55 3. Quie Zagnierdies rekursji mode byé w najgorszym wypadku n— 1, Poniewa na kazdym poriomie rohursji wykonnje sig co najwyze] a + 1 pordwna, Wen) S = Yn Ly =a = OCD W poprzednich algorytmach wspblezynnik pray 1° byl réwny "Zs. Mozemy zatem podej- raewac, Ze olraymane oszacowanie nie jest doSé preeyryjne, Sprobujemy zgadnaé do- Kladniejsze rozwiazanie réwnis (9), po caym pracprowadzimy dowd indukeyiny, Motemy oczckiwaé, #e % najwieksza wartoscia bedziemy mieé do ezynienia w sytuacii skrajne} (Fonkeja n® jest wypukla, a zatem 2+ y* < (x + 9 + 0°) gdy jedna 2 wartosci J Lalo n= j jost zawsze rGvns 0, Zachodzi wo wledy, Kiedy algoryim quickson jest wywany do posortowania ciggu ju? posortowanego al] < al2) < .. < ale]. Otrzymaje- ny nastgpajace eGwnanie na liezhe porbwnat [wa = wn =o Lwin= word ea@eD dla n> Stosujie metodg rozssijania, mamy ws Wy) = 0 Db ak 34 WA) = Paxostaje teraz wykweaé 20 pomoca indukeji matematyeznej, 2e dla kuzdego n 2 0 fe sla n=0 woreda [pee dane ate noo () Dla «= O41 jest to oezywiste. Zakiemy, te (8) zachodzi dla wartosei mniejszych od pewnego 1, Waweras wykorzystujae wypuklosé funkeji 1, otrzymujemy won mas (WY = 1) + Mn =D) ek max (Wor = 1), WG = 1) + Wr A) + ne N= 5 Loe wna = ened 1 yal by PES D= com(ho Hedaya don2esd wen 3 ' Sun Ie a@- Na 2tnb les as 56 2 Sortowanie Z najmniejsea iced pordwnai mary da ezynienia w skrajnie preceiwue) sytwaeli, wy Uk az my wawers 10 rekurencyinezo wywolania j znajduje sig w Srodkw przedziala [L.r}. Otay p= 0) =o Uw.) Lon 12 J) + fone bseaen dian>t Rozwiazaniem tego réwnania jest funkeja Wn {nog Pesyinistyezna wradliwose ezasowa jest zatem réwna A(n) = O08 ~ slog) = OW") Z preeprowadzone) analizy pesymistycene} zlozonosei crasowe} jeszcze nie wideé, dh ccacgd algoryim quicksot jest nazywany algorytmem sortowania Szybkiego, Okuauie sig, 2e jeyo oezekiwana zlozonosé ezasowa jest dobra, bliska funkeji W,(n) Nieeh X, bedzie liezba portwnar, ktdre st wykonywane w algorytmie quicksort w eel uporzadkowania permutaeji tiezb 1, 2, .., m, pray zalozeniu, 2 kazaa permntacia jest jednakowo prawdopodabn Lo Lemat 2.1. Podciagi powstajace w wynikw podzialu losowe} perm wyn Udowodnienie tego lematu pozostawiamy Ci jako zadanie 2.10. ww policzymy ocackiwana liczbe pordwnaf pray zalozeniu, 2 elemente s¢ [Lou Wynosi ona (1+ 1) + ocaekiwana liczba’porbwnati dl sort(1, 8 ~ D+ oczekiwana liczba porSwnati dia quieksort (8 + 1, ), 60 na macy Fema 2.1 jest rowne (a+ 1) + AGS 1) AG =3), Poniewa?, knzde » € [1] jest jednakowo prawdopedobne (pojawia sie. wige x prov dopodobiefistwem I/n), oczekiwana zlozonosé czasowa spelnia nastepujqee rownanie [aoaaeo eo Rownanie na A(a), dla n> 1, daje sig sprowadzié do 1 ADEE EAG~ DFA sy dla n> 1 am=2 Sag-yeu+o Quicksort - sortowanie szybhie Aby dokonaé kolejnego pracksztaleenia, zapisamy je w postaci deh wna mw =22.AGs— Dawes =~ DA = = 2DAG~ D4 De Odejomjae te rssenania stroman, otezymujemy Ati) ~~ WAG I= 2A = 1) + 2 AG) = (n+ Al = IF 2 waylt Aw) _ Aw= wri ari Stosujae do tego rownania melody rozwijania, mamy au AWD 2 vie Hy = + : Ae9= 20-6 nfs. 3) wrnfuect Na koniee koraystajne ze zvigeht asyniptotyeza Hs Inn y+ OOF} Gyjest stata Bulera © 0.57) courzymujemy (4 Blog | 00) = Tog Toe lags 4 00) Aun = W prayblizenin wapdlezyanik pray alog. jest réwny 14 Jako zadanie (zd. 2.7) porostawiamy Ci wykuzanic, 22 oczekiwana wraZliwosé exasows, algoryianw quicksort wynasi sim = V2 n+ Ollosm Wepslezymnik pray 1 jest w prayhliveniu riwny 0,68, Jake zalanie (ra. 2.8) pozostawiamy Citez wykuzanie, 2e oczckiwana Hiezba preesiawien wykonywanych w algorytmie jest nie wigksza ni polowa aczekiwane} liezhy pordwnai. nuwavy, 20: (2) asymptotyezna oczekiwana zlozonosé ezasowa algoryimu quicksort wynosi alog.n, ‘1 wige mnie} ni dha poprzedaich algoryimiw: (h) wspslezynnik przy lage jest nieduzy, okolo 14; () ovzekiwana wrviliwosé ezasowa jest niewielka w slosunku do oczekiwane} zlozone- Sci ezasuve}, co méwi o silaym skupienin rzeczy iste liezhy pordwna wok6} war- Insel oczekiwane} (4) liezba innyeh dh slaii w algorytunie nie jest zmaczajco wigksea od liezby pordwnstt Powyrsve fabkty tumacza, dlaczego algoryn quicksor jest uwazamy at najszybsay ale goryn sortowania, Powsaznymni jednak jego wadlamni sq niestabilnosé i koszt O(n") w preypauku pesymisty- cexaym, Post wada jest tee wiycie rekursj, Kt LW zlozonosei pamigciowe} musimy uwrglednié pamigé potrzebna na implementacje sto sit, Jesli choalzi @ preypadek pesyiistyezny, alebokose rekursji wynosi n ~ 1, a zatem Jest umaczon na operaeje na stosie, sim) = 00) e2yli-alozonese pamigciown jest wigksza nz w poprzeduich algoryimach, Na svereseie moana lacwo ja zmnicjsayé, Zanwarmy, 2: a) obs wywolania rekureneyjne w teSci procedury quicksort si niezaleane, tan. mow bye wykonywane w dowolne] kolejnase (b) wywolania te znajduja sig ni koview tres jedno 7 nich moze byé zastapione iter Zamiast na stosie przechowywaé migjsce powrotu % wywokinia rekureneyjnego, mozna pracchowywaé parmetry wywolania, kiGre ma bye wykonane por wlasiie wykonywanyen 4 procedury, a ten Na stosie hula sig teraz zuajdowaé pary indeksGw ff, j] okreslajace parametry wywolai algarytnnu quielsort, Kdne nalezy jesrere wykonae. Pray realizes wy wean guichave ids) ‘alwich wywolan rekureneyjnyeh bedziemy u ha slosie wigksay podeiggow clrzymanycl w wyniku podialu (a seislej jego kevice), pozestawiajae mniejsey’do practi oh Quicksort = gortowanie sxybkie Nuzwijmy te podeiagi bratnio. Rozwazmy pewien moment ; bedi dlugoseiami podeiagaw na stosie, a iy, yy ozmiaramt \s6w. Preyjmijmy i, = n. Zanwazmy, ze podeiag © dlugosei J, wdzie -, zostal podziclony na cwa podeiagi: jeden o dlu umieszezony nelstosie, © dhugosei j,, » prectwaraany w kolejne) iteraeji §= 5). 4k iy) #1 oman chouzh wowenas rani w Kolejne} itera dbliezei i noch sy 45. ich bratnich pod pn duisjsk ‘co dowodlzi, 4e maksymalna ghebokeS€ stosu jest ograniezona przez log. Mamy zatem (lon) nylmu quicksor 6» zmieniona wersia ‘a: stack: begin Lf p> L then begin sell. nl LL, f= tops); poptst: wile 1 all: albo jako element dvielaey wybieraé mediang 2 pewne) prSbki elementéw ciagd, na prvyklad pierwszego, Srodkowego i ostatnicgo, + Moana w ogdle pocbyé sig stosu, organiza Zaunicsta sig w ten sposdb zlozonosé pamigziowa do OU), ale zwick'ea sig wsicaysnik proporcionalnoset zlozonese’ ezasowe, Pray prezentacjl te) metody preymiemy nase pujgee zalozenie upraszczajgee algorytn: elementylisty wejsciowe} q any iczbami ealkovitym Zapisemy jeszeze vax algorytm quicksortz rekursa ast Pe przy podziale zawsze umieszezamy ta stosie ko rozmiarGw obu podciagow. ong prava stos, prxy zalazeni, prawego poileiqgn niezaleanie od procedure quloksort2; var 1, x J: integer: begin o ese ll, alls repeat (122) 1 (1, 2] 2 c0p(s); pop while r- > wéo begin hiech alk] bedzie mediana al2}, all" J, ated alk] <—"> ali]; 3 += partétion(2, ©) puss. litle; 41sec) ena; uykonay insertionsort dla al..2 3 watil =1) end quicksort: Biykieiami zostaly oznaczone instrukeje operowania na stosic, W kad) chwiltrealizacjé algorytinu lista q jest podzietona na ezesei przedstawione na rysunku 2.1. 61 Cups whsnie Pci elo posortoenia soniowant ‘o Koical nn stsie Ips 2c. Sa w tee saa agate quicksoe2 ‘Zauveadmny, 2e mods wyeliminowaé Lewy indeks % pary umieszerane} nit stosie procedure qiricksort3: var Lor, J: integer; bt etack: begin o a = [n): risa repeat [12 2} 1 Tisrhay 2 1= copla); popls) white 2~1> mao begin dee niech alk] bedzie medina « aft}, atl IL ofa > alll; i t= pareition{1, 2); end, wykonaj insertionsort dla al. 11: 5 until s=[] end quicksort3; Poprawnese instrukeji praypisania 7 = r-+2 wynika z rysunku 2.2: Nastemny porting, dla kiGrego indeks prawego koi bieraomy re sls Innes ewego kofien obliczamy, mae Ware bie ys. 22. Ziska inks deh hokey intane Indoks priweke koviea podeiqu do practworzenin bierzemy ze stocu., Glybysmy poral axrnaczyé prawy koniee podciqgu w sanym ciagu, stox nie bytby potreebny (caterynite od I= 1+ 2, saukalibysmy pierwszeyo zz wez0nego miijSCi)

You might also like