Efektivitaoperac:JedenbehcykluvyzadujevoperaciUPcasO(1)avoperaciDOWNcas

Rozměr: px
Začít zobrazení ze stránky:

Download "Efektivitaoperac:JedenbehcykluvyzadujevoperaciUPcasO(1)avoperaciDOWNcas"

Transkript

1 INSERT(s;a){pridakmnozineSprvekstak,zef(s)=a, problemu. Zadanproblemu:Ujeuniverzum.JedanamnozinaSUafunkcef:S!R,kdeRjsou realnacsla.mamenavrhnoutreprezentacisaf,kteraumoznujeoperace: Vpraxisecastosetkavamesnasledujcmproblemem,kteryjemodikacslovnkoveho Haldyatrdcalgoritmy DELETE(s){odstranprveks2S, DECREASE(s;a){zmenshodnotuf(s)oa(tj.f(s):=f(s) a), MIN{nalezneprveks2Ssnejmenshodnotouf(s), DELETEMIN{odstranprveks2Ssnejmenshodnotouf(s), naf.obvyklesepouzvanasledujcpodmnkanebojejdualnverze: reprezentacisaf.haldyjsoutypstruktury,kterasepouzvaproresentohotoproblemu. poklada,zes2saoperacenavcdostavainformaci,jaknaleztsasnmspojenadatav Haldajestromovastruktura,kdevrcholyreprezentujprvkyzSasplnujlokalnpodmnku neoveruje.prioperacchdelete(s),decrease(s;a)aincrease(s;a)sepred- PrioperaciINSERT(s;a)sepredpoklada,zes=2S,tentopredpokladoperaceINSERT INCREASE(s;a){zvetshodnotuf(s)oa(tj.f(s):=f(s)+a). MAKEHEAP(S;f){operacevytvorhaldureprezentujcmnozinuSafunkcif. vrcholreprezentujcs2s.navcbudemeuvazovatoperace Proberemenekolikverzhaldabudemepredpokladat,zevzdysplnujtutopodmnkuaze operacedelete(s),decrease(s;a)aincrease(s;a)zadavajtakeukazatelna (usp)prokazdyvrcholv,kdyzvreprezentujeprveks2saotec(v)reprezentujet,pak MERGE(H1;H2){predpokladame,zehaldaHireprezentujemnozinuSiafunkcifipro f(t)f(s). neoverujedisjunktnosts1as2.regularnhaldy i=1;2as1\s2=;.operacevytvorhalduhreprezentujcs1[s2af1[f2.operace Predpokladejme,zed>1jeprirozenecslo.d-regularnstromjekorenovystrom(T;r) prohledavanmdosrky(korenrjecslovan1)splnuje takovy,zeexistujeporadsynujednotlivychvnitrnchvrcholutakove,zeocslovanvrcholu ocslovanvrcholud-regularnhostromu.kdyzprovrcholvjeo(v)=k,pakvrcholwjesyn d-regularnstrommanvrcholu,pakjehohloubkajeblogd(n(d 1))c.Nechtojeprirozene Tvrzen.d-regularnstrommanejvysejedenvrchol,kterymamenenezdsynu.Kdyz Totoocslovansenazyvaprirozeneocslovand-regularnhostromu. (3)kdyzvrcholmamenenezdsynu,pakvsechnyvrcholysvetsmcslemjsoulisty. (2)kdyzvrcholnenlist,takvsechnyvrcholysmensmcslemmajpravedsynu; (1)kazdyvrcholmanejvysedsynu; vrcholuv,pravekdyzo(u)=1+bk 2 vrcholuv,pravekdyzo(w)2f(k 1)d+2;(k 1)d+3;:::;kd+1g,avrcholujeotcem regularnstrom(t;r)abijekcezvrcholustromutnamnozinussplnujepodmnku (usp). Rekneme,zemnozinaSsfunkcfjereprezentovanad-regularnhaldouH,kdeHjed- dc. TypesetbyAMS-TEX

2 (T;r),pakhaldaHjereprezentovanapolemH[1::jSj],kdeH(i)=((v);f((v))ao(v)= i.algoritmybudemepopisovatprostromy,protozejetonazornejs.preformulovattyto Implementaced-regularnhaldyH.Nechtojeprirozeneocslovand-regularnhostromu algoritmypropolejejednoduche.projednoduchostzapisu,f(v)provrcholvoznacuje reprezentujcprveksnesplnujepodmnku(usp).operacedown(v)jedualn. implementaceoperacjezalozenanadvoupomocnychoperacchup(v)adown(v).operaceup(v)posunujeprveksreprezentovanyvrcholemvsmeremkekoreni,dokudvrchol prirozeneocslovanafraze`poslednvrchol',`predchazejcvrchol'atd.sevztahujktomuto NenznamaefektivnimplementaceoperaceMERGEprod-regularnhaldy.Efektivn ocslovan. f(s),kdesjereprezentovanvrcholemv.ud-regularnhostromupredpokladame,zezname whilevnenkorenaf(v)<f(otec(v))do vymenmeprvkyreprezentovanevrcholyvaotec(v), v:=otec(v)enddo vymenmeprvkyreprezentovanevrcholyvaw w:=synvrcholuvreprezentujcprveksnejmenshodnotouf(w)enddo whilef(w)<f(v)do INSERT(s) DOWN(v) v:=novyposlednlist,vreprezentujes,up(v) prvekreprezentovanykorenem t:=prvekreprezentovanyposlednmlistem v:=vrcholreprezentujcs korenrstromureprezentujes,down(r) odstranmeposlednlist s:=prvekreprezentovanyposlednmlistem DELETE(s) DELETEMIN iff(t)<f(s)thenup(v)elsedown(v)endif vbudereprezentovatt odstranmeposlednlist f(s):=f(s)+a,down(v) f(s):=f(s) a,up(v) v:=vrcholreprezentujcs INCREASE(s;a) DECREASE(s;a)

3 whilevjevrcholtdo DOWN(v), v:=vrcholpredchazejcvrcholuvenddo v:=poslednvrchol,kterynenlist T:=d-regularnstromsjSjvrcholy zvolmelibovolnoureprezentacisvrcholystromut MAKEHEAP(S;f) cholysvyjimkounovevytvoreneholistuaoperaceupzajistjejsplnen.prioperaci DELETEMINjepodmnka(usp)splnenaprovsechnyvrcholysvyjimkoukoreneaoperaceDOWNzajistjejsplnen.PoprovedenoperacDELETE(s),DECREASE(s;a) vaprovedenoperaceupnebodownzajistjejsplnen.prooperacimakeheap Korektnostalgoritmu:UoperaceINSERTjepodmnka(usp)splnenaprovsechnyvr- (d-usp)kdyzsjeprvekreprezentovanyvrcholemv,pakf(s)f(t)provsechnyprvky aincrease(s;a)jepodmnka(usp)splnenaprovsechnyvrcholysvyjimkouvrcholu jakojeocslovanv.operacemakeheapkoncprovedenmoperacedownnakoren pakjepodmnka(d-usp)splnenaprovsechnyvrcholysocslovanmalespontakvelkym Kdyzkazdyvrcholsplnujepodmnku(d-usp),paksplnujepodmnku(usp).Kazdylist splnujepodmnku(d-usp)akdyzoperacemakeheapprovedeprocedurudown(v), budemeuvazovatdualnformulacipodmnky(usp): aodtudplynekorektnost. reprezentovanesynyvrcholuv. Efektivitaoperac:JedenbehcykluvyzadujevoperaciUPcasO(1)avoperaciDOWNcas caso(hd).vrcholuvhloubceijenejvysedi.predpokladejme,zestrommavyskuk,pak operacemakeheapvyzadujecaso(pk 1 INSERTaDECREASEvyzadujcasO(logdjSj)aoperaceDELETEMIN,DELETE aincreasevyzadujcaso(dlogdjsj).haldumuzemevytvorittak,zeopakujeme MAKEHEAP.OperaceDOWN(v)navrcholvevyscehvyzadujevnejhorsmprpade jsj-kratoperaciinsert,tovyzadujecaso(jsjlogd(jsj)).spoctameslozitostoperace vnejhorsmprpadevyzadujecaso(dlogdjsj).operaceminvyzadujecaso(1),operace O(d).ProtooperaceUPvnejhorsmprpadevyzadujecasO(logdjSj)aoperaceDOWN A=Pk 1 da A=k 1 i=0di+1(k i),pak Xi=0di+2(k i) k 1 Xi=0di+1(k i)=k+1 i=0di(k i)d)=o(pk 1 Xi=2di(k i+2) kxi=1di(k i+1)= i=0di+1(k i)).oznacme dk+1+kxi=2di(k i+2 k+i 1) dk=dk+1+kxi=2di dk= O(djSj). TedyA=dk+1 d 1+dk+1 d2 dk+1+d2dk 1 1 Aplikace:Trden{lzepouzitnasledujcalgoritmus. d(d 1)jSj,aprotoA2djSj.TedyMAKEHEAPvyzadujevnejhorsmprpadejencas (d 1)2 dk.protozek=blogdjsj(d 1)c,dostavame,zedk+1 d 1 dk:

4 enddo Vystup:y1;y2;:::;yn MAKEHEAP(fxiji=1;2;:::;ng;f) i=1 whileindo yi:=min,deletemin,i:=i+1 d-heapsort(x1;x2;:::;xn) optimalnalgoritmusbymelbytprod=6nebod=7proposloupnostidelekdo Predpokladame,zex1;x2;:::;xnjeposloupnostcselafvtomtoprpadebudeidenticka mnozinykladnychrealnychcsel. Nalezennejkratschcestvgrafuzdanehobodu. Vstupemjeorientovanyohodnocenygraf(X;R;c)avrcholz2X,kdecjefunkcezRdo funkce. Teoretickylzeukazat,zed=3ad=4jsoulepsnezd=2.Experimentyukazaly,ze nejmenshodnotoud(u)aodstranmehozu.prokazdouhranu(u;v)2rprovedeme Polozmed(z)=0ad(x)=+1prokazdex2Xnfzg,U=fzg.Najdemevrcholu2Us ifd(u)+c(u;v)<d(v)then ifd(v)=+1thenvlozmevdouendif ohodnocenhranfunkcc. Resen:Dijkstruvalgoritmus. Ukol:naleztprokazdybodx2Xdelkunejkratscestyzezdox{delkacestyjesoucet caso(jxjlog(jxj)+jrjlog(jxj)).kdyzd=maxf2;bjrj d-regularnhaldu,pakseprovedenejvysejxjoperacinsert,minadeletemin KdyzU=;,pakd(x)jsoudelkynejkratschcestzezdox.KdyzUreprezentujemejako ajrjoperacdecreaseajujjxj.prod=2dostavame,zealgoritmusvyzaduje d(v):=d(u)+c(u;v)endif O(jRjlogdjXj).KdyzjRj>jXj1+"pro">0,paklogdjXj=O(1)aalgoritmusjelinearn (tj.vyzadujecaso(jrj)). Mejmebinarnstrom(T;r),toznamena,zerjekoren,kazdyvrcholmanejvysedvasynya LeftisthaldyjXjcg,pakalgoritmusvyzadujecas ukazdehosynavme,zdajetopravysynnebolevysyn.pakprovrcholvjenpl(v)delka nejkratscestyzvdovrcholu,kterymanejvysejednohosyna.takzenapr.listmanpl rovno0. MejmeSUafunkcif:S!R.Pakbinarnstrom(T;r)takovy,ze (1)kdyzvrcholvmajenjednohosyna,pakjetolevysyn; jeleftisthaldareprezentujcmnozinusafunkcit. (3)existujejednoznacnakorespondencemeziprvkyzSavrcholyT,kterasplnuje (2)kdyzvrcholvmadvasyny,pak podmnku(usp) npl(pravehosynav)npl(levehosynav);

5 Strukturavrcholuv: Posloupnostvrcholuv0;v1;:::;vksenazyvapravacestazvrcholuv,kdyzv=v0,vi+1je Zakladnvlastnostleftisthaldy. key(v){prvekreprezentovanyvrcholemv; f(v){promennaobsahujchodnotuf(key(v)). v.kdyzukazatelnendenovan,pakpseme,zejehohodnotajenil; npl(v){promennashodnotounpl(v); ukazateleotec(v),levy(v)apravy(v)naotcevrcholuv,nalevehosynavanapravehosyna pravysynviprokazdei=0;1;:::;k 1avknemapravehosyna.Pakpodstromvrcholu vdohloubkykjeuplnybinarnstrom,atedypodstromvrcholuvmaalespon2k+1 1 vrcholu.tedyhloubkapravecestyzvrcholuvje ift1=;thenvystup=t2konecendif ZakladnoperaceproleftisthaldyjeMERGE. ift2=;thenvystup=t1konecendif MERGE(T1;T2) O(log(velikostpodstromuurcenehovrcholemv): pravy(korent1):=korent0,otec(korent0):=korent1 ifnpl(pravy(korent1))>npl(levy(korent1))then zamenmet1at2endif zamenmelevehoapravehosynakorenet1endif ifkey(korent1)>key(korent2)then T0:=MERGE(podstrompravehosynakoreneT1;T2) npl(korent1):=npl(pravy(korent1)+1 Vystup:key(korenT) MERGE(T;T1) VytvormehalduT1reprezentujcfxg INSERT(x) MERGE(T1;T2) T2jepodstrompravehosynakoreneT T1jepodstromlevehosynakoreneT Q:=prazdnafronta MAKEHEAP(S;f) DELETEMIN MERGE(T1;T2)vlozmedoQenddo whilejqj>1do vezmemehaldyt1at2zvrcholuq(odstranmeje) TsvlozmedoQenddo foreverys2sdo vytvormeleftisthaldutsreprezentujcfsg

6 zenazacatkualgoritmujenavrcholufrontyspecialnznak,kterysejenprenesenakonec caso(1).pocetrekurzivnchvolanjesoucetdelekpravychcest,protoalgoritmusmerge fronty.odhadnemecas,kterypotrebujwhile-cyklymezidvemaprenesenmispecialnho OperaceMINvyzadujecasO(1).ProodhadslozitostiMAKEHEAPbudemeuvazovat, vyzadujecaso(js1j+js2j),kdesijemnozinareprezentovanahaldoutiproi=1;2. Odtud,algoritmyINSERTaDELETEMINvyzadujvnejhorsmprpadecasO(log(jSj)). Efektivnostalgoritmu:KazdybehalgoritmuMERGE(bezrekurzivnhovolan)vyzaduje haldu,vsechnyhaldyvefrontemajvelikost2k.vtomtookamzikuvefronteqjejsj znaku.predpokladejme,zesespecialnznakpreneslpok-te.vtomtookamziku,aznajednu operacemakeheapvyzadujecas aoperacemergevyzadujeo(k)casu.tedywhile-cyklyvyzadujcaso(kjsj O(1Xk=1kjSj 2k+1)=O(jSj1Xk=1k 2k+1)=O(jSj): 2k+1).Proto 2khald stromut0vzniklehozleftisthaldytodtrhnutmpodstromuvrcholuv. NejprvepopsemepomocnouoperaciOprav(T;v),kteravytvorleftisthalduzbinarnho muzebytazjsj.protonavrhnemeslozitejs,aleefektivnalgoritmusprotytooperace. vd-regularnchhaldachnenefektivn,protozedelkacestyzkorenedolistuvleftisthalde ImplementaceoperacDECREASEaINCREASEpomocoperacUPaDOWNjako pravy(t):=nil whilesezmensilonpl(t)do vymenmelevy(t)apravy(t)endif t:=otec(v),npl(t):=0 ifpravy(t)6=vthenlevy(t):=pravy(t)endif t:=otec(t)ifnpl(pravy(t))>npl(levy(t))then naleftisthaldujsousplneny.toznamena,zepoprovedenopravjetopetleftisthalda. enddo PoprovedenoperaceOpravmajvsechnyvrcholyspravnecslonplapodmnkypolozene npl(t):=npl(pravy(t))+1 tvorpravoucestuzvrcholuu.toznamena,zewhile-cyklusseprovadelnejvyselog(jsj)- Kdyztjeposlednvrchol,ukterehosezmensilonpl,pakvrcholy,kdesezmensilonpl T1podstromTurcenyvrcholemv,f(v):=f(v) a O(log(jSj)). vprvekreprezentujcs Popsemeostatnalgoritmy. kratakazdybehwhile-cykluvyzadovalcaso(1).tedyalgoritmusopravvyzadujecas T2:=Oprav(T;v),T:=MERGE(T1;T2) DECREASE(s;a)

7 T1podstromTurcenyvrcholemlevy(v) vprvekreprezentujcs T2podstromTurcenyvrcholempravy(v) T3leftisthaldareprezentujcprveks T2:=MERGE(T2;T4),T:=MERGE(T1;T2) f(v):=f(v)+a,t4:=oprav(t;v),t1:=merge(t1;t3) INCREASE(s;a) T1podstromTurcenyvrcholemlevy(v) T:=MERGE(T3;T4) vprvekreprezentujcs T2podstromTurcenyvrcholempravy(v) T3:=MERGE(T1;T2),T4:=Oprav(T;v) DELETE(s;a) GE,DECREASEaINCREASE,kterevyzadujvnejhorsmprpadecasO(log(jSj)),a vyzadujecaso(1),implementaceoperacinsert,deletemin,delete,mer- implementaceoperacemakeheap,kteravyzadujecaso(jsj),kdesjereprezentovana Veta.VleftisthaldachexistujeimplementaceoperaceMIN,kteravnejhorsmprpade Shrnemevysledky: Predpokladejme,zehjefunkce,kteraohodnucujekongurace.KdyznakonguraciD aplikujemeoperacioadostanemekonguracid0,pakamortizovanaslozitostam(o)operaceojeam(o)=t(o)+h(d0) h(d),kdet(o)jecaspotrebnyproprovedenoperaceo. mnozina. D0o1 Amortizovanaslozitost vsechnai=1;2;:::;n.pak Ocekavejme,zeplatnasledujcodhadyamortizovaneslozitosti:am(oi)iz(oi)pro nxi=1am(oi)=nxi=1 t(oi)+h(di) h(di 1)=h(Dn) h(d0)+nxi=1t(oi)nxi=1iz(oi):!d1o2!d2o3!:::on!dn: Obvykleh(D)0provsechnykonguraceDneboh(D)0provsechnykonguraceD. Ztohoplyne,ze Kdyzh(D)0provsechnykonguraceD,pak nxi=1t(oi)nxi=1iz(oi) h(dn)+h(d0): nxi=1t(oi)nxi=1iz(oi)+h(d0);

8 kdyzh(d)0provsechnykonguraced,pak slozitostivnejhorsmprpade.binomialnhaldy jevhodnyproposloupnostoperac.odhadamortizovaneslozitostibyvalepsnezodhad Toznamena,zeodhadamortizovaneslozitostidavatakeodhadnacasovouslozitost,ktery nxi=1t(oi)nxi=1iz(oi) h(dn): DenujmerekurentnebinomialnstromyHiproi=0;1;:::.Jsoutokorenovestromy kdekorenjednohosestanedalsmsynemkorenedruhehoznich.vizobr.1 takove,zeh0jejednoprvkovystrom.stromhi+1vzniknezedvoudisjunktnchstromuhi, H0 H1 H3 HiH2 Hi+1Hi Tvrzen.Prokazdeprirozenecsloi=0;1;:::plat: Nejprveuvedemezakladnvlastnostitechtostromu. (2)korenstromuHimaisynu; (1)stromHima2ivrcholu; Obr.1 BinomialnhaldaHreprezentujcmnozinuSjesouborstromufT1;T2;:::;Tkgtakovy,ze Dukaz.TvrzenplatprostromH0ajednoduchouindukcsedokazeiproostatnstromy. (3)delkanejdelscestyzkorenedolistuvestromuHijei; (4)podstromyurcenesynykorenestromuHijsouizomorfnsestromyH0;H1;:::;Hi 1. TinenizomorfnszadnymTjproi6=j. pocetvrcholuvtechtostromechjevelikostsaexistujeajedanojednoznacne kazdystromtijeizomorfnsnejakymstromemhj; prirazenprvkuzsvrcholumstromutakove,zeplatpodmnka(usp);

9 OperaceprobinomialnhaldyjsouzalozenystejnejakoproleftisthaldynaoperaciMER- GE.OperaceMERGEprobinomialnhaldyjezalozenanasctanprirozenychcselv binarnmzapise. kazdouneprazdnoumnozinusexistujebinomialnhaldareprezentujcs. Zbinarnhozapisuprirozenychcselplyne,zeprokazdeprirozenecslon>0existujeprosta posloupnosti1;i2;:::;ikprirozenychcseltakova,zen=pkj=12ij.ztohoplyne,zepro i:=0,t:=prazdnystrom,h:=; U2:=UelseU2:=prazdnystromendif case(stromyt,u1,u2jsouprazdne)donic U1:=UelseU1:=prazdnystromendif ifexistujeu2h2izomorfnshithen whilei<log(js1j+js2j)doifexistujeu2h1izomorfnshithen MERGE(H1;H2)(komentar:HireprezentujemnozinuSiproi=1;2aS1\S2=;) enddo endcasei:=i+1 (vsechnystromyt,u1au2jsouneprazdne) dovlozmetdoh,t:=spoj(u1;u2) (existujpravedvaneprazdnestromyv1av2mezistromyt,u1au2)dot:=spoj(v1;v2) T:=prazdnystrom (existujepravejedenneprazdnystromvmezistromyt,u1au2)dovlozmevdoh, ift6=prazdnystromthenvlozmetdohendif vymenmestromyt1at2endif Jevidet,zekdyzobastromyT1aT2jsouizomorfnsHi,pakvyslednystromoperacespoj Vystup:H zfaktu,zehjobsahujestromizomorfnshi,pravekdyzvbinarnmzapisecslajsjjjena jeizomorfnsestromemhi+1.korektnostoperacemergeplyneztohotopozorovana iff(korenet1)>f(korenet2)then korent2sestavadalsmsynemkorenet1 spoj(t1;t2) kazdybehcykluvyzadujecaso(1),algoritmusmergevyzadujecaso(log(js1j+js2j)). VytvormehalduH1reprezentujcfxg Implementacedalschalgoritmujepodobnajakoproleftisthaldy. i-temmste1,azetjeneprazdnystrom,kdyzseprovadpresunraduprisctan.protoze MERGE(H;H1) INSERT(x) ProhledameprvkyreprezentovanekorenystromuanaleznememezinimistromT,jehoz Prohledameprvkyreprezentovanekorenystromuanaleznememeziniminejmensprvek korenreprezentujenejmensprvek.h:=hnftg,vytvormehalduh1zpodstromut urcenychsynykorenet DELETEMIN MERGE(H1;H2)

10 TEMINjebinomialnhalda,aodtudplynekorektnostoperaceDELETEMIN.Operace haldy.tmdostavamekorektnostoperacemin.ztvrzenplyne,zeh1voperacidele- DECREASEseimplementujepomocoperaceUPaoperaceINCREASEseimplementujepomocoperaceDOWNstejnejakoproregularnhaldy.Tatostrukturanepodporuje Zpodmnky(usp)plyne,zenejmensprvekvSjereprezentovanvkoreninejakehostromu Nasledujcvetapopisujcefektivituoperacvtetostrukturevyuzvafaktu,zebinomialn operacideleteaoperacemakeheapseprovaditeracoperaceinsert. caso(jsj). haldareprezentujcmnozinusmatolikstromu,kolikjejednicekvbinarnmzapisejsj, atojenejvyselog(jsj),zeoperacemergesimulujesctanamaslozitostodpovdajc souctubinarnchzapisucseljs1jajs2jazeamortizovanaslozitostprictan1jeo(1). Veta.ProbinomialnhaldyexistujalgoritmyoperacINSERT,MIN,DELETEMIN, DECREASEaMERGE,kterevyzadujcasO(log(jSj)),algoritmusoperaceINCRE- ASE,kteryvyzadujecasO(log2(jSj))aalgoritmusoperaceMAKEHEAP,kteryvyzaduje zenanichlzekrasneilustrovatprincip,zeproraduoperacjevyhodnepockataneprovadet Vyznambinomialnchhaldspocvavtom,zeFibonaccihohaldyjsoujejichzobecnenma jeokamzite. Ztechtovysledkujevidet,zeostatnhaldymajefektivnejschovannezbinomialnhaldy. aincreasevnejhorsmprpade. Ztvrzenplyne,zevyskastromuvbinomialnhaldejelog(jSj),alepocetsynujetake log(jsj)atentoodhadsenedazlepsit.odtuddostavameslozitostoperacdecrease zepocetvrcholuvtechtostromechjevelikostsaexistujeajedanojednoznacne LnabinomialnhaldaHreprezentujcmnozinuSjesouborstromufT1;T2;:::;Tkgtakovy, zeslabmepodmnkynabinomialnhaldy. MINaDELETEMIN,kdystejnemusmeprohledatvsechnystromy.Ztohotoduvodu Nasledujcalgoritmyjsouzalozenynaideji,ze`vyvazovan'stacprovadetjenprioperacch Lnaimplentaceoperac projevvevelmijednoduchemalgoritmuprooperacimerge. Vlnebinomialnhaldevynechavamepredpokladnaneizomorfnoststromu.Tentofaktse MERGE(H1;H2) kazdystromtijeizomorfnsnejakymstromemhj. prirazenprvkuzsvrcholumstromutakove,zeplatpodmnka(usp); VstupemprotutooperacijesouborseznamufOiji=0;1;:::;kg,kdeseznamOiobsahujejenstromyizomorfnsestromemHi.Proceduravyvazpakztechtostromuvytvor binomialnhaldu. GE.OperaceMINaDELETEMINpouzijnasledujcpomocnouproceduruvyvaz. AlgoritmusprooperaciINSERTsenezmen,jenprovedetutoimplementacioperaceMER- ProvedemekonkatenaciseznamuH1aH2.

11 vezmemedvaruznestromyt1at2zoiaodstranmejezoi whilejoij>1do spoj(t1;t2)vlozmedooi+1 whileexistujeoi6=;do i:=0,h:=; enddoifoi6=;thenstromt2oiodstranmezoiavlozmedoh vyvaz(foiji=0;1;:::;kg) vyvaz(foiji=0;1;:::;blog(jsj)cg) stromuastromyrozdelmedomnozinoiobsahujcchvsechnystromyvhizomorfnshi. endif,i:=i+1,vystup:h shiruzneodtadaledamedooipodstromturcenynejakymsynemkorenetizomorfn vyvaz(foiji=0;1;:::;blog(jsj)cg) shi. Prohledamevsechnystromy,naleznemenejmensprvekreprezentovanyvkoreninejakeho stromut2h,stromyrozdelmedomnozinoiobsahujcchvsechnystromyvhizomorfn AmortizovanaslozitostoperacINSERTaMERGEprilneimplementacijeO(1)a DELETEMIN amortizovanaslozitostoperacminadeleteminprilneimplementacijeo(log(jsj). seznamechsio1,operacevyvazvyzadujecaso(k+pki=0jsij).operaceminbezpod- behvnitrnhowhile-cykluvoperacivyvazvyzadujecaso(1)azmenspocetstromuv tizovanaslozitostobouoperacjeomezenakonstantou,atedyjeo(1).protozekazdy tury.prilneimplementacioperacemergeainsertvyzadujcaso(1)aoperace MERGEnemenpocetstromu,kdeztooperaceINSERTpridajedenstrom.Odtudamortostjecasoperaceplusohodnocenvyslednestrukturyminusohodnocenpocatecnstruk- Ohodnocenmslabebinomialnhaldybudepocetstromuvtetohalde.Amortizovanaslozi- log(jsj)).protozeohodnocenbinomialnhaldyjenejvyselog(jsj),dostavame,zeamortizovanaslozitostoperaceminjeo(jhj jhj+log(jsj))=o(log(jsj))aamortizovana slozitostoperacedeleteminjeo(jhj+log(jsj) jhj+log(jsj))=o(log(jsj)). proceduryvyvazvyzadujecaso(jhj)aoperacedeleteminbezpodproceduryvy- vazvyzadujecaso(h+i),kdetjeizomorfnshi.podletvrzenjeilog(jsj),a tedyoperaceminvyzadujecaso(jhj)aoperacedeleteminvyzadujecaso(jhj+ Protozesifunkciohodnocenvolme,muzemetamdattakovemultiplikativnkoecienty, odecst. abyjednotkacasuodpovdalajednotcevamortizovaneslozitosti.protolzejhjodsebe Zhrubareceno,Fibonaccihohaldajemnozinastromu,kdenekterevrcholyruzneodkorenu takova,zesplnujepodmnku(usp).bohuzeltotojejenpribliznevyjadren.existujtakoveto struktury,kterenevzniklyzprazdnefibonaccihohaldypomocposloupnostioperacimplementovanychnavrzenymialgoritmy.pritomdukazefektivityfibonaccihohaldsedost stromujsouoznaceneaexistujejednoznacnakorepondencemeziprvkysavrcholystromu

12 raceapakrekneme,zefibonaccihohaldajestrukturavzniklazprazdnefibonaccihohaldy vyrazneopraofakt,zetaktohaldavznikla.protonejdrvepopsemealgoritmyproope- pomocposloupnostioperac,kterebylyrealizovanynavrzenymialgoritmy. CREASEaDELETEjsouzalozenynaalgoritmechprotytooperacevleftisthaldach.V Budemepredpokladat,zeFibonaccihohaldajeseznamstromu,kdenekterevrcholyruzne algoritmechpredpokladame,zec=log 1(32). odtrzennejakyjehosyn.rekneme,zestrommaranki,kdyzkorenmaisynu. shi,jenahrazenpozadavkem,zemaranki.algoritmyprooperacedecrease,in- odkorenejsouoznaceny.vrcholjeoznacen,pravekdyznenkorenabylmunekdydrv AlgoritmyprooperaceMERGE,INSERT,MINaDELETEMINjsouanalogickejako prolnouimplementacivbinomialnchhaldach.jenpozadavek,abystrombylizomorfn VytvormehalduH1reprezentujcfxg ProvedemekonkatenaciseznamuH1aH2. MERGE(H;H1) INSERT(x) MERGE(H1;H2) Prohledamevsechnystromy,naleznemenejmensprvekreprezentovanyvkoreninejakeho vyvaz1(foiji=0;1;:::;bclog(p5jsj+1)cg) stromuastromyrozdelmedomnozinoiobsahujcchvsechnystromyvhsrankemi. DELETEMIN stromut2h,stromyrozdelmedomnozinoiobsahujcchvsechnystromyvhsrankem iruzneodtadaledamedooipodstromturcenynejakymsynemkorenetsrankemi. vezmemedvaruznestromyt1at2zoiaodstranmejezoi whilejoij>1do whileexistujeoi6=;do i:=0,h:=; vyvaz1(foiji=0;1;:::;bclog(p5jsj+1)cg) spoj(t1;t2)vlozmedooi+1 enddoifoi6=;thenstromt2oiodstranmezoiavlozmedoh vyvaz1(foiji=0;1;:::;kg) vymenmestromyt1at2endif iff(korenet1)>f(korenet2)then korent2sestavadalsmsynemkorenet1 endif,i:=i+1,vystup:h

13 v:=vrcholvstromutreprezentujcs pokudvbyloznacen,zrusmeoznacenvrcholuv vyvaz2(t;v) T:=stromvHreprezentujcs odtrhnemepodstromt0urcenyvrcholemv ifvjekorenthenf(v):=f(v) aelse DECREASE(s;a) f(v):=f(v) a,t0vlozmedoh v:=vrcholvstromutreprezentujcs endif T:=stromvHreprezentujcs odtrhnemepodstromt0urcenyvrcholemv f(v):=f(v)+a,dohvlozmestrommajcjenvrcholv ifvnenkorenthenvyvaz2(t;v)endif pokudvbyloznacen,zrusmeoznacenvrcholuv INCREASE(s;a) dohvlozmevsechnypodstromyt0urcenesynyv zrusmeoznacenuvsechsynuvrcholuv v:=vrcholvstromutreprezentujcs T:=stromvHreprezentujcs odtrhnemepodstromt0urcenyvrcholemv ifvnenkorenthenvyvaz2(t;v)endif dohvlozmevsechnypodstromyt0urcenesynyv zrusmeoznacenuvsechsynuvrcholuva DELETE(s) u:=otecv whileujeoznacendou0:=otec(u),zrusmeoznacenu enddo ifunenkorentthenoznacmeuendif odtrhnemepodstromturcenyvrcholemuavlozmehodoh,u:=u0 vyvaz2(t;v) stromsrankemi+1.abyalgoritmyprooperaceminadeleteminbylykorektn, Vsimnemesi,zekdyzstromyT1aT2majranki,pakproceduraspoj(T1;T2)vytvor stanetentovrcholzasevrcholemruznymodkorene,celyprocesseopakuje. budeodtrzenipodstromtohotovrcholu(tmsestanekorenemstromu).kdyzsepozdeji vrcholustromuruznehoodkorenebylvtomtostromeodtrzenpodstromnejvysejednoho syna{vtomprpadejetentoprvekoznacenakdyzsemuodtrhavapodstromdalshosyna, respektivesnfprveksnejmenshodnotoufg.operacevyvaz1zajistuje,zeodkazdeho musmeukazat,zevsechnystromyvefibonaccihohaldehreprezentujcmnozinusmaj ranknejvyseclog(p5jsj+1).jentakzajistme,abyvyslednahaldareprezentovalas,

14 nebyloznacen; Spoctamecasovouslozitostjednotlivychoperac: DECREASEcasovaslozitostO(1+c),kdecjepocetvrcholu,ktereprestalybytoznacene, hodnotouf,poprovedenoperaceruznestromyvhaldemajruzneranky,zadnynovyvrchol DELETEMINcasovaslozitostO(jHj+pocetsynuv),kdevreprezentovalprveksnejmens MINcasovaslozitostO(jHj),poprovedenoperaceruznestromyvhaldemajruzneranky; INSERTcasovaslozitostO(1),pribyljedenstrom,oznacenevrcholysenemen; MERGEcasovaslozitostO(1),nevznikazadnystrom,oznacenevrcholysenemen; vrchol. bylopridano1+cnovychstromuabyloznacennejvysejedenvrchol; Abychomspoctaliamortizovanouslozitost,musmenejdrvenavrhnoutfunkciohodnocujc djepocetsynuvrcholuv,bylopridano1+c+dnovychstromuabyloznacennejvysejeden DELETEcasovaslozitostO(1+c+d),kdecjepocetvrcholu,ktereprestalybytoznacene, nejvysejedenvrchol; oznacene,djepocetsynuvrcholuv,bylopridano2+c+dnovychstromuabyloznacen INCREASEcasovaslozitostO(1+c+d),kdecjepocetvrcholu,ktereprestalybyt kongurace.nechtohodnocenkonguracejepocetstromuvkonguraciplusdvojnasobek poctuoznacenychvrcholu.necht(n)jemaximalnpocetsynuvrcholuvefibonacciho INCREASEamortizovanaslozitostjeO((n)); DELETEMINamortizovanaslozitostjeO((n)); DECREASEamortizovanaslozitostjeO(1); INSERTamortizovanaslozitostjeO(1); MERGEamortizovanaslozitostjeO(1); haldereprezentujcn-prvkovoumnozinu.pakamortizovanaslozitostoperacje: Lemma.NechtvjevrcholstromuveFibonaccihohaldeanechtujei-tynejstarssyn haldypomocpopsanychalgoritmu.nejprvejednotechnickelemma. vrcholuv,pakumaasponi 2synu. Abychomspoctaliodhad(n),vyuzijemetoho,zeFibonaccihohaldavzniklazprazdne DELETEamortizovanaslozitostjeO((n)). unebyli-tynejstarssyn),aprotozeodusemohlodtrhnoutjenjedensyn,dostavame,ze podstromurcenyvrcholemvmaasponfi+2vrcholu. kteremelystejnypocetsynu.podlepredpokladumelvrcholvalesponi 1synu(jinakby umusmtalesponi 2synu. Tvrzen.NechtvjevrcholstromuveFibonaccihohalde,kterymapraveisynu,pak Dukaz.Kdyzseustavalsynemv,pakseaplikovalaoperacespojauavbylykorenystromu, Dukaz.Tvrzendokazemepomocindukcepodlemaximalndelkycestyzvrcholuvdo nektereholistu.tatodelkaje0,pravekdyzvjelist.vtomprpadevnemasynaa Mejmevrcholv,kterymaksynu,anechtmaximalndelkacestyzvrcholuvdolistuje podstromurcenyvrcholemvmajedinyvrchol.protoze1=f2=f0+2,taktvrzenplat. j.predpokladejme,zetvrzenplatprovsechnyvrcholy,pronezmaximalndelkacesty znichdolistujemensnezj.tedytvrzenplatprovsechnysynyvrcholuv.pakpro i>1mai-tynejstarssynvrcholuvpodlepredchozholemmatualesponi 2synuapodle

15 zepodstromurcenyvrcholemvmaalespon indukcnhypotezypodstromurcenytmtosynemmaalesponfivrcholu.odtuddostavame, vrcholu,protozef1=f2(prvn1jezavrcholv,prvnf2jezanejstarsvrchol).indukc spoctame,ze 1+F2+kXi=2Fi=1+kXi=1Fi provsechnan0.skutecne,pron=0plat apron=1mame 1+0Xi=1Fi=1=F2=F0+2 1+nXi=1Fi=Fn+2 Daleindukcdostavame,ze Kdyzshrnemetatofakta,dostavame,zepodstromurcenyvrcholemvmaalesponFk+2 1+nXi=1Fi=1+n 1 1+1Xi=1Fi=1+F1=2=F3=F1+2: vrcholu,atvrzenjedokazano. mamenenezisynu,tedykazdystrommarankmensnezi.proto(n)<i.abychom Abychomdokoncilidukaz,hledamepronnejmensitakove,zen<Fi.Pakkazdyvrchol Xi=1Fi+Fn=Fn+1+Fn=Fn+2: Protoze0<1 p5 odvodilii,poctejme Fi= 1+p5 2i 1 p5 =1 p5 1+p5 2i 1 p5 1 p5 Dostavame,ze2< 34,jej1p2 1 p5 1p5 1+p52ij<38,atedy 2i 38<Fi<1 p5 1+p5 2i+38: 2i: aprotozelog2(p5n+1) Protozelog2(p5n+3p5 8)ilog2 1+p5 n1p5 1+p5 2i 38=)n<Fi: plyneztvrzen,zelog232<i=)log2(p5n+3p5 2=)n1p5 1+p5 8)ilog2 1+p5 2i 38 2;

16 haldemastupenmensnez Dusledek.KdyzFibonaccihohaldareprezentujenprvkovoumnozinu,pakkazdyvrcholv AmortizovanaslozitostoperacINSERT,MERGEaDECREASEjeO(1)aamortizovanaslozitostoperacMIN,DELETEMIN,INCREASEaDELETEjeO(logn). OperaceMINaDELETEMINjsoukorektn. Prouplnostdokazeme,zeFi= 1+p5 log 1 2i 1 p5 232log2(p5n+1): 2i Proi=2plat Proi=1plat 1+p p5 21=1+p5 1+p5. 1+p p5 22=1+2p p5 5 4p5 =2p5=1=F1: Indukcnkrok: =4p5 2i 1 p5 = 1+p5 2i 2 1+p p5 2i 2 1 p5 4p5=1=F2: 2i 2 3+p5 2 1 p5 2i 2 3 p5 = 22 2i p5 2 1 p5 2i p5 = = 1+p5 2i 2+ 1+p5 2i 2 1 p5 2i 1 1 p5 2i p5 2i 2 1 p5 2i 1 1 p5 2i 1= tedyodhadamortizovaneslozitostidavaodhadcasoveslozitosti.protodijkstruvalgoritmus Tedyindukcdostavamepozadovanyvztah. Fibonaccihohaldy.Protozeohodnocenjenezaporneaohodnocenpocatecnhaldyje0, Aplikace:VratmesekDijkstrovealgoritmu.MnozinuUbudemereprezentovatpomoc =Fi 2+Fi 1=Fi: vyzadujevnejhorsmprpadecaso(jxj(1+logjxj)+jrj)=o(jrj+jxjlogjxj).stejny vysledekdostanemeiprokonstrukcinejmensnapnutekostrygrafu. Otazkaje,kdypouztFibonaccihohalduakdypouztd-regularnhaldyvDijkstrovealgoritmunebovalgoritmukonstruujcmnejmensnapnutoukostru.Lzerci,zeFibonacciho haldabymelabytvyraznelepsprovets,alerdkegrafy(tj.grafysmalympoctemhran). Dasepredpokladat,zed-regularnhaldybudouleps(dkysvymjednodussmalgoritmum) prohustegrafy(tj.grafy,kdepocethranjejxj1+"provhodne">0).problemje,proktere

17 hodnotynastavazlom.nevmozadnychexperimentalnchneboteoretickychvysledcchtohototypu. Historickyprehled:Binarnneboli2-regularnhaldyzavedlWilliams1964.Jejichzobecnen nad-regularnhaldypochazodjohnsona1975.leftisthaldydenovalcrane1972adetailne popsalknuth1975.binomialnhaldynavrhnlvuillemin1978,brown1978jeimplementoval Tarjanem1987. aprokazaljejichpraktickoupouzitelnost.fibonaccihohaldybylyzavedenyfredmanema nutneresittentoproblem. Jedenzezakladnchproblemudatovychstrukturjenasledujc: 1;2;:::;ng.Tentoproblemsenazyvatrden.Vmnohaaplikacchdatovychstrukturje Vstup:Prostaposloupnostfa1;a2;:::;angprvkuzuniverzaU. Vystup:Rostoucposloupnostfb1;b2;:::;bngtakova,zefaiji=1;2;:::;ng=fbiji= Ujetotalneusporadaneuniverzum. Trdcalgoritmy NejstarszuvedenychalgoritmujeMERGESORTajestarsnezjepoctacovaera.Jeho verzesepouzvalyuzprimechanickemtrden.popsemejednujehoiteracnverzi. zaplikacregularnchhald.algoritmuheapsortjestalevenovanavelkapozornosta Jsoutrizakladnalgoritmy,ktererestrdcproblem:HEAPSORT,MERGESORT, bylonavrzenonekolikjehomodikac. QUICKSORT.PrvnalgoritmuspouzvajchaldybylHEAPSORT(binarnregularn haldybylydenovanyprinavrhuheapsortu).heapsortbylpopsanjakojedna enddoposloupnostp=(aj;aj+1;:::;ai)vlozmedoq whileindoj:=i Qjeprazdnafronta,i=1 i:=i+1 whilei<naai+1>aidoi:=i+1 MERGESORT(a1;a2;:::;an) whilejqj>1do P1aP2jsoudveposloupnostizvrcholuQ MERGE(P1;P2)vlozmenakonecQ enddovystup:posloupnostzq odstranmep1ap2zq

18 ifinthenwhileindo elseck:=bj,j:=j+1,k:=k+1endif ifai<bjthenck:=ai,i:=i+1,k:=k+1 whileinajmdo Pjeprazdnaposloupnost,i:=1,j:=1,k:=1 MERGE(P1=(a1;a2;:::;an);P2=(b1;b2;:::;bm)) zposloupnostivqjevzdynazacatkubehucykluwhilejqj>1mnozinafaiji= Vystup:P=(c1;c2;:::;cn+m) Vsimnemesi,zevsechnyposloupnostivQjsourostoucazesjednocenmvsechprvku ck:=bj,j:=j+1,k:=k+1enddoendif elsewhilejmdo ck:=ai,i:=i+1,k:=k+1enddo 1;2;:::;ng.KazdyprubehtohotocykluzmenspocetposloupnostvQo1.Protozepocet SORTkorektn. SlozitostalgoritmuMERGESORT.NejprveodhadnemeslozitostpodproceduryMER- posloupnostvefronteqjenejvysedelkavstupnposloupnosti,jealgoritmusmergevrcholuqspecialnznak\,kterysevzdyprenesezvrcholuqnajejkonec.protoze VysetrmecykluswhilejQj>1.Predpokladejme,zepredprvnmbehemcyklujena mezidvemaprenosy\projdekazdyprvekvstupnposloupnostipodproceduroumerge hodnotakjen+m,dostavame,zepodproceduramergevyzadujecaso(n+m)an+m porovnan,kdenamjsoudelkyvstupnchposloupnost. Nynvypoctemeslozitosthlavnprocedury.Zrejmeprvncyklusvyzadujelinearncas. GE.ProtozeurcenprvkuckvyzadujecasO(1)ajednoporovnanaprotozemaximaln obecnedanouposloupnostmanejlepsocekavanycas. pravejednou,vyzadujbehycykluwhilejqj>1mezidvemaprenosyznaku\caso(n), delku2i 1.Protopocetprenosujenejvysedlog2ne,atedyalgoritmusMERGESORT NynpopsemealgoritmusQUICKSORT.Jetonejvcepouzvanyalgoritmus,protozepro Odtudjednoduchouindukcdostaneme,zepoi-temprenosuznaku\majposloupnosti vyzadujecaso(nlogn). kdenjedelkavstupnposloupnosti.vsechnyposloupnostinapocatkumajdelku1.

19 iflqthenexitelse whileaq>adoq:=q 1enddo whiletruedo whileal<adol:=l+1enddo elsezvolmektakove,zeikj,l:=i,q:=j,a:=ak ifi=jthenvystup:(ai) Quick(ai;ai+1;:::;aj) ifj=qthenvystup(quick(ai;ai+1;:::;al 1);a)else ifl<k=qthenaq:=al,q:=q 1else endifendifendifenddo ifi=lthenvystup(a;quick(aq+1;aq+2;:::;aj))else ifl=k<qthenal:=aq,l:=l+1else vymenmealaaq,l:=l+1,q:=q 1 Vystup(Quick(ai;ai+1;:::;al 1);a;Quick(aq+1;:::;aj)) vlozvsechnyprvkyvstupnposloupnosti>a=ak.natytoposloupnostipakzavolasam sebeadovysledneposloupnostiulozsetrdenouprvnposloupnost,pakprvekaanakonec vlozvsechnyprvkyvstupnposloupnosti<a=akadoposloupnosti(aq+1;aq+2;:::;aj) Vystup(Quick(a1;a2;:::;an)) AlgoritmusQuicktrdposloupnost(ai;ai+1;:::;aj)tak,zedoposloupnosti(ai;ai+1;al 1) QUICKSORT(a1;a2;:::;an) zadovalcaso(nlogn).jakuvidmepozdeji,medianlzenaleztvlinearnmcase,alepouzt jetedyzrejma,protozeljaiq. setrdenoudruhouposloupnost.korektnostproceduryquickaialgoritmuquicksort nazyvapivot)conejrychleji.puvodnesebralprvnneboposlednprvek.prirovnomernem SORTbudourychlejs(nikolivasymptoticky).Protojetrebavolitprvekak(tentoprvekse jakoukolivproceduruprojehonalezenmazadusledek,zemergesortaheap- ProceduraQuickbezrekurzivnhovolanvyzadujecasO(j i).tedy,kdybyakbylmedian posloupnosti(ai;ai+1;:::;aj)(tj.prostrednprvek),pakbyalgoritmusquicksortvy- rozdelenvstupujepakocekavanycasalgoritmuo(nlogn)aalgoritmusjeobvyklerychlejsnezalgoritmymergesortaheapsort.nevyhodaje,zeprourciterozdelen trnebopetipevnezvolenychprvkuposloupnosti.praxeukazala,zetentovyberpivotaje nahodny,aletovtomtoprpadenevad).dusledkemjenavrhbratpivotajakomedian algoritmymergesortaheapsort(anavcnahodnezvolenyprveknenskutecne volbunevyhodne.lzetonapravittak,zebudemevolitknahodne.bohuzel,pouzit pseudonahodnehogeneratoruvyzadujecas,apakuzalgoritmuszasenenrychlejsnez tutoverzialgoritmunenvhodnepouztproulohy,kdyrozdelendatbudeprotakovou datsetakovyalgoritmuschovaspatne(toznamena,zevyzadujekvadratickycas).proto duchymarychlymzpusobem(toplat,ikdyzsevolnahodne),pakexistujekongurace, kteravyzadujecaso(n2).nynukazeme,zeocekavanycasjeo(nlogn).naslednaanalyza jepronahodnezvolenehopivota(bezdalshopredpokladunavstupndata)neboproprpad, volbepivotajenejhorscasalgoritmuquicksorto(n2),apokudjepivotvybranjedno- kdypivotjepevnezvolenadatajsourovnomernerozdelena. nejpraktictejs,daseprovestrychleazajistujedostatecnounahodnost. ProtozeprikazdemvolanmaQuickkratsvstupnposloupnost,lzeukazat,zeprikazde

20 zorovanchadruhynarekurzivnmpoctan.hlavnideavobouvypoctechjezalozenana Ukazemedvavypoctyocekavanehocasu.Jedenjezalozennanekolikajednoduchychpo- OcekavanycasalgoritmuQUICKSORTje pozorovan O(ocekavanypocetporovnanvalgoritmuQUICKSORT): nejvysejednou.kdyzalgoritmusquicksortporovnavaprvkyaiaaj,pakpronejaky Tentofaktplyneprmozpopisualgoritmu.Spoctameocekavanypocetporovnanpro PrvkyaiaajalgoritmusQUICKSORTporovnapritrdenposloupnosti(a1;a2;:::;an) behpodproceduryquickjeaineboajpivot.pritomvpredchozchbezchquickaianiaj Necht(b1;b2;:::;bn)jevyslednaposloupnost.OznacmeXi;jboolskoupromenou,kterama algoritmusquicksort. hodnotu1,kdyzquicksortprovedlporovnanmeziprvkybiabj,jinakmahodnotu nebylopivotem,protozepivotsevzdyvyradznasledujcchvolantetopodprocedury. pakocekavanahodnotaxi;jje ProtozepocetporovnanbehualgoritmuQUICKSORTje 0.Predpokladejme,zejetonahodnavelicina.Kdyzpi;jjepravdepodobnost,zeXi;j=1, E(Xi;j)=0(1 pi;j)+1pi;j=pi;j: aprotozeocekavanahodnotasouctunahodnychpromennychjesoucetocekavanychhodnot, dostavame,zeocekavanypocetporovnanvalgoritmuquicksortje nxi=1nx j=i+1e(xi;j)=nxi=1nx nxi=1nx j=i+1xi;j Abychomspoctalipi;j,popsemechovanalgoritmuQUICKSORTpomocmodikace stromuvypoctu.budetobinarnstrom,vnemzkazdyvrcholodpovdajednomubehu pivota,kteryohodnotvrcholv.vpodstromulevehosynavrcholuvbudoupravevsechna podproceduryquickavrcholvbudevnitrnvrchol,kdyzodpovdajcpodproceduravolila j=i+1pi;j: vodpovdavolanquicksposloupnost(ai;ai+1;:::;aj),pakvrcholyvpodstromuleveho pravehosynavrcholuvjsouohodnocenyprvkyzposloupnosti(aq+1;:::;aj)(poprerovnan Analogickyvpodstromupravehosynavrcholuvbudoupravevsechnanasledujcrekurzivn synavjsouohodnocenyprvkyzposloupnosti(ai;ai+1;:::;al 1)avrcholyvpodstromu volanproceduryquicknadposloupnost,kteranasledujepopivotu.listystromujsou oznacenyprvky,kterejsouvposloupnosti,snzjevolanoodpovdajcquick.kdyzvrchol nasledujcrekurzivnvolanpodproceduryquicknadposloupnost,kterapredchazpivotu. vporaddanemtmtoocslovanm.pakplat,zexi;j=1,pravekdyzprvnprvekv posloupnosti(c1;c2;:::;cn)zmnozinyfbljiljgjebudbinebobj.pravdepodobnost vrcholupredchazpravemusynu.necht(c1;c2;:::;cn)jeposloupnostprvkufaij1ing posloupnosti).daleplatfaljiljg=fbljiljg. Ocslujemevrcholytohotostromuprohledavanmdosrky,zapredpokladu,zelevysyn

21 porovnanalgoritmuquicksortje tohotojevuje2 nxi=1nx j=i+1pi;j=nxi=1nx j i+1,tedypi;j=2 j=i+12 j i+1=nxi=1n i+1 j i+1pro1i<jn.odtudocekavanypocet Druhyvypocet. OznacmeQS(n)ocekavanypocetporovnanvyzadovanyalgoritmemQUICKSORTpri trdenn-clenneposloupnosti.pakplat Xk=22k2n(nXk=21k)2nZn 11xdx=2nlnn: Ztohodostavame,ze QS(n)=1n n 1 Xk=0n 1+QS(k)+QS(n k 1)=n 1+2n(n 1 QS(0)=QS(1)=0a nqs(n)=n(n 1)+2n 1 Xk=0QS(k)a Xk=0QS(k)): atedy Protoze2i i+12prokazdei0,dostaneme,ze (n+1)qs(n+1)=(n+1)n+2nxk=0qs(k) QS(n)=nXi=2n+1 i+12i 1 QS(n+1)=2n i2(n+1) nxi=21 n+1+n+2 n+1qs(n): Prodostatecnevelkanplat 2(n+1) (Zn+1 i=11xdx) 12=2nln(n+1)+2ln(n+1) n 1: i+1=2(n+1) n+1 Xi=31i NynsrovnameslozitostalgoritmuHEAPSORT,MERGESORT,QUICKSORT,A- sort,selectionsort,insertionsort.pripomenmesi,zeselectionnosti(tatoideabylazaklademalgoritmuheapsort).insertionsorttrdtak, avlozdovysledneposloupnosti.tentoprocespakopakujesezbytkempuvodnposloup- SORTtrdposloupnosttak,zejednmpruchodemnaleznejejnejmensprvek,kteryvyrad 2nln(n+1)+2ln(n+1) n2nlnn:

22 zedojizsetrdenecastiposloupnostivkladadalsprvek,kterypomocvymenzaradna spravnemstoatentoprocesopakuje. MERGESORTvnejhorsmprpadevyzadujecas12nlogn,ocekavanycasje12nlogn, horsmprpadevyzadujen2 QUICKSORTvnejhorsmprpadevyzadujecas(n2),ocekavanycasje9nlogn,vnej- vnejhorsmivocekavanemprpadevyzadujenlognporovnan,pouzva2n+konstanta vnejhorsmprpadeivocekavanemprpadevyzaduje2nlognporovnan,pouzvan+ HEAPSORTvnejhorsmprpadevyzadujecas20nlogn,ocekavanycasje20nlogn, n+logn+konstantapameti.pouzvaprmyprstupkpametianenstabiln. 2porovnan,ocekavanypocetporovnanje1:44nlogn,pouzva A-sortvnejhorsmprpadeivocekanemprpadevyzadujecasO(nlogFn),kdeFjepocetinverzvevstupnposloupnosti,stejnevnejhorsmivocekavanemprpadejepocetporovnan prmyprstupkpametianenstabiln. 2,vocekavanemprpaden2 2,pouzvan+konstantapameti.Pouzva pameti.pouzvasekvencnprstupkpametiajestabiln. nanvnejhorsmivocekavanemprpadejen2 O(nlogFn),pouzva5n+konstantapameti.Pouzvaprmyprstupkpametiajestabiln. SELECTIONSORTvnejhorsmivocekavanemprpadepotrebujecas2n2,pocetporovnanvnejhorsmprpadejen2 INSERTIONSORTvnejhorsmivocekavanemprpadevyzadujecasO(n2),pocetporov- nejsouvhodne.situacepromergesortjekomplikovanejs,hodnezavisnakonkretn verze,ktereoptimalizujpocetporovnan,alevetsinoumajvetsnarokynacas,aproto Pouzvasekvencnprstupkpametianenstabiln. OcekavanycasproHEAPSORTjepraktickystejnyjakonejhorscas.Bylynavrzeny PrezentovanycasvevysledcchbylspoctanpromodelRAM. 4,pouzvan+konstantapameti. ritmu,kteryprodlouheposloupnostipracujejakoquicksort,akdyzvolarekurzivne verzialgoritmu.algoritmusmergesortjenejvhodnejsproexternpameti,protoze jedoporucenomstoquicksortuproposloupnostidelky22pouztselection- SORTaproposloupnostidelky15pouztINSERTIONSORT.Tovedeknavrhualgo- pouzvasekvencnprstup,prointernpametkvulivelkeprostorovenarocnostinendoporucovan.takesehodpronavrhparalelnchalgoritmu.protrdenkratkychposloupnost poctacchvyzadovanychalgoritmyquicksort,mergesortaheapsortje samsebenakratkouposloupnost,pakpouzijeselectionsortneboinsertion- SORT.ValgoritmuA-sortsedoporucujepouzt(2;3)-strom.Pomercasuvklasickych ValgoritmuMERGESORTjsmepouzilifrontu,kterardilaslucovanposloupnost.Tato 1:1.33:2.22.TovsaknemusbytpravdaproRISK-architekturuaniprocache-pametiapod. posloupnosti. Vstup:Mnozinarostoucchnavzajemdisjunktnchposloupnost. nasledujcproblem. dlouhe.pokudsejejichdelkyhodnelis,nedosahnemeoptimalnhovysledku.budemeresit metodajeuspokojujcadavaoptimalnvysledek,pokudposloupnostivefrontejsoustejne Predpokladejme,zemamepostup,kteryvytvorjedinouposloupnost.Tentopostupurcuje uplnybinarnstromt(tj.takovystrom,zekazdyjehovnitrnvrcholmadvasyny)takovy, Ukol:PomocoperaceMERGEconejrychlejispojitvsechnyposloupnostidojednerostouc

23 zevstupnposloupnostiohodnocujlistyakazdaposloupnostvzniklaslucovanmohodnocuje ProposloupnostPoznacmel(P)jejdelku.Paksoucetcasu,kterevtomtoprocesu dukclehcedostaneme,ze vyzadovalapodproceduramergejeo(pfl(p(v))jvjevnitrnvrcholstromutg).in- nekteryvnitrnvrcholtak,zeplat: P(v)=MERGE(P(v1);P(v2)). kdyzp(v)jeposloupnostohodnocujcvrcholvav1av2jsousynovev,pak KdyzTjeuplnybinarnstromtakovy,zelistyjsouohodnocenyrostoucminavzajemdistoucposloupnostiaproceduryMERGEvyzadujcas kded(t)jehloubkalistut. junktnmiposloupnostmi,paknasledujcalgoritmusspojtytoposloupnostidojedineros- Xfl(P(v))jvvnitrnvrcholstromuTg=X O(X tlisttd(t)l(p(t)); whilep(korent)nendenovanodotlisttd(t)l(p(t))): enddo Nynmuzemepreformulovatpuvodnproblem: vezmemevrcholvtakovy,zep(v)nendenovanoaproobasynyv1av2vrcholuvjsou P(v1)aP(v2)denovany,polozmeP(v):=MERGE(P(v1);P(v2)) ProuplnybinarnstromTsnlistyabijekcizmnozinyf1;2;:::;ngdolistustromuT Vystup:uplnybinarnstromTsnlistyabijekcezmnozinyf1;2;:::;ngdolistuT Vstup:ncselx1;x2;:::;xn takova,zepni=1d((i))xijenejmensmozne,kded((i))jehloubkalistu(i). kded((i))jehloubkalistu(i),tj.delkacestyzkorenedolistu(i)a(i)=xipro denujme Rekneme,zedvojice(T;)jeoptimalnstromvzhledemkx1;x2;:::;xn. jebijekcemezif1;2;:::;ngamnozinouv i=1;2;:::;n.chcemezkonstruovatuplnybinarnstromsnlisty,kteryminimalizuje hodnotucont.uvazujmenasledujcalgoritmus. Optim(x1;x2;:::xn)Vjemnozinanprvkovychstromu, Cont(T;;)=nXi=1d((i))xi; enddo Vystup(T;)kdeTjestromvmnozineV. foreveryv2vdoc(v):=x 1(v)enddo vezmemezvdvastromyv1av2snejmensmohodnocenm,odstranmejezv, whilejvj>1do vytvormenovystromv,jetokorenajehodvasynovejsoukorenystromuv1av2,c(v)= c(v1)+c(v2),vvlozmedov

24 Vobsahovaljenjednoprvkovestromy,taktvrzenplat.Kazdybehcykluwhiledozmens Dukaz.Nejprvesivsimneme,ze(i)jelistTprokazdei2f1;2;:::;ng.Protozenazacatku pocetstromuojeden,alenezmenmnozinulistu.prototjestromsnlisty,jebijekce vyzadujecaseo(n). strompromnozinux1;x2;:::;xnapokudjeposloupnost(x1;x2;:::;xn)rostouc,pak Veta.Prodanouposloupnostcsel(x1;x2;:::;xn)algoritmusOptimnalezneoptimaln zetvrzenplatprokazdouposloupnostcsel(y1;y2;:::;yn 1)anechtx1x2xn prokazdei=1;2;:::;n.dokazemeindukcpodlen,zezkonstruovanadvojicejeoptimaln zf1;2;:::;ngdomnozinylistutaalgoritmusvzdykonc.predpokladejme,ze(i)=xi algoritmusoptimzvolilstromy(1)a(2).uvazujmemnozinu(y1;y2;:::;yn 1),kde yi=xi+2proi=1;2;:::;n 2,yn 1=x1+x2,azobrazentakove,ze(i)=yi prokazdei=1;2;:::;n 2.NechtT0jestromzskanyzestromuTpoodstranenlistu stromvzhledemk(x1;x2;:::;xn).kdyzn=2,taktvrzenzrejmeplat.predpokladejme, jeposloupnostcsel.bezujmynaobecnostimuzemepredpokladat,zevprvnmkroku u0stromuujedelkacestyzkorenedouvestromeualespontakvelikajakodelkacestyz (x1;x2;:::;xn).zvolmevnitrnvrcholustromuutakovy,zeprokazdyjinyvnitrnvrchol korenedou0vestromeu.nechtu1au2jsousynovevrcholuu,pakjsoutolistyanecht jetooptimalnstrompro(y1;y2;:::;yn 1).Necht(U;)jeoptimalnstromvzhledemk (1)a(2)anecht goritmusoptim(y1;y2;:::;yn 1)zkonstruoval(T0; proi=1;2;:::;n 2a jebijekcezmnozinyf1;2;:::;n 1gtakova,ze (n 1)=oteclistu(1).Pakmuzemepredpokladat,zeal- ),apodleindukcnhopredpokladu (i)=(i+2) zekdyzi2f1;2g,paki=1,kdyzj2f1;2g,pakj=2.denujmezf1;2;:::;ngdo listuutak,ze(1)=u1,(2)=u2,(i)=(1),(j)=(2)a(k)=(k)provsechna i;j2f1;2;:::;ngtakove,ze(i)=u1,(j)=u2.poprejmenovanmuzemepredpokladat, k2f3;4;:::;ngnfi;jg.pakjebijekcea aprotoze(u;)jeoptimalnstrompro(x1;x2;:::;xn),dostavame,ze(u;)jetakeoptimalnstrompro(x1;x2;:::;xn).odstranenmlistuu1au2zestromuudostanemestrom U0.Denujmezf1;2;:::;n 1gpredpisem(i)=(i+2)proi=1;2;:::;n 2a (n 1)=u.Pakjebijekcezf1;2;:::;n 1gdomnozinylistuU0aprotoze(T0; optimalnstrompro(y1;y2;:::;yn 1),dostavame,ze (d(u1) d((1))(x1 xi)+(d(u2) d((2))(x2 xj)0 Zvolbyuplyne,zed(u1)d((1)),d(u2)d((2)),x1xiax2xj.Odtud Cont(U;;) Cont(U;;)=(d(u1) d((1))(x1 xi)+(d(u2) d((2))(x2 xj): Protozeplat Cont(T0; ;)Cont(U0;;): dostavame,ze(t;)jeoptimalnstrompro(x1;x2;:::;xn). Cont(T;;)=Cont(T; Cont(U;;)=Cont(U0;;)+x1+x2 ;)+x1+x2a

25 (toznamena,zestromyberemezepreduaukladamejedozadu).udrzovattytostruktury Predpokladejme,zex1x2xnazev1;v2;:::;vkjsoupostupnevytvarenestromy, vyzadujecaso(1)stejnejakonalezendvoustromusnejmensmohodnocenm. zaukazatelemjsoulisty,kterejsoujednoprvkovestromy)afrontuvceprvkovychstromu melirostoucposloupnostlistuavtetoposloupnostiukazatelnanejmenslist,kteryjejeste jednoprvkovymstromem(predukazatelemjsoulisty,kterenejsoujednoprvkovestromy, pakindukcokamzitedostavame,zec(v1)c(v2)c(vk).tedystac,abychom zepracitakovehoalgoritmupron-prvkoveposloupnostilzepopsatbinarnmstromem,jehoz f1;2;:::;ng,atatopermutaceprochazstromemtakto: aj).bezujmynaobecnostipredpokladame,zevstupnposloupnostjepermutacemnoziny vnitrnvrcholyjsouohodnocenyporovnanmdvouprvkuvstupnposloupnosti(napr.ai< Vetsinaobecnychtrdcchalgoritmupouzvajedinouprimitivnoperacimeziprvkyvstupn posloupnosti,atojejichvzajemneporovnan,jineoperacenejsoupouzvany.toznamena, Rozhodovacstromy Abybylalgoritmuskorektn,musplatit,zedveruznepermutaceskoncvruznychlistech. Toznamena,zedenovanystrompakmusmtalesponn!listu.Delkacestyzkorenedo listu,kdeskoncilapermutace,davadolnodhadnacaspotrebnyksetrdenposloupnosti dolistu. znamenapokracovanvpravemsynuvrcholuv.procestrdenkonc,kdyzsedostane aiaj,pak(i)<(j)znamena,zepokracujevlevemsynuvrcholuv,a(j)<(i) Zacnavkorenistromu.Kdyzjevevnitrnmvrcholuvohodnocenemporovnanm.Tonamumoznujezskatdolnodhadcasupotrebnehoksetrdenposloupnosti.Korektnosttechtouvahplynezpozorovan,zekdyzporovnanjejedinaprimitivnoperace,pak Vnevhodnemalgoritmusemuzestat,zevnekteremlistuneskonczadnapermutace.Tose algoritmemanedasepopsatobecne. pron-prvkoveposloupnostiastromempro(n+1)-prvkoveposloupnostijedankonkretnm moznevztahyvn-prvkoveposloupnosti.dalejetrebasiuvedomit,zevztahmezistromem hu.protostacuvazovatpouzepermutacen-prvkovemnoziny,protozezachycujvsechny algoritmusnenzavislynaprvcchvstupnposloupnosti,alejennajejichvzajemnemvzta- jsouohodnocenyporovnanmiaiajproi;j=1;2;:::;n,i6=j,jerozhodovacmstromem NasledujcobrazekilustrujenaseuvahynaSELECTIONSORTupro3-prvkoveposloupnosti.Listyjsouohodnocenypermutacemimnozinyf1;2;3g,kterevnichskonc. algoritmuapron-prvkoveposloupnosti,kdyzprokazdoupermutacin-prvkovemnoziny platposloupnostporovnanpritrdenposloupnostialgoritmemajestejnajakopo- delkanejdelscestyzkorenedolistu,protozealgoritmusapritrdenpermutacepouzije Pakkorektnostalgoritmuzajistuje,zedveruznepermutacemnozinyf1;2;:::;ngskoncv ruznychlistechstromut.dolnmodhademprocasalgoritmuavnejhorsmprpadeje stane,kdyzstrompron-prvkoveposloupnostimavcenezn!listu. vstupnposloupnostipouzvaporovnan.rekneme,zebinarnstromt,jehozvnitrnvrcholy Denice.MejmetrdcalgoritmusA,kteryjakojedinouprimitivnoperaciproprvky sloupnostporovnanpripruchoduposloupnostistromemt.

26 a1<a2<a3a1<a3<a2a2<a1<a3a2<a3<a1 a2<a3a1<a3 a1<a2 a3<a1<a2 a1<a3a2<a3a3<a2<a1 tolikporovnan,jakojedelkajejcestyvestromut.protoprirovnomernemrozdelen listu.tatofaktamotivujhledannasledujcchvelicin. Denujme S(n)jakominimumpresvsechnystromyTsalesponn!listyzdelkynejdelscestyzkorene vstupnchposloupnostjeocekavanycasalgoritmuaprumernadelkacestyzkorenedo Obr.1 dolistuta A(n)jakominimumpresvsechnystromyTsalesponn!listyzprumernedelkycestzkorene Nasmclemjespoctatdolnodhadtechtovelicin. dolistuvt. vsechnan1.pozlogaritmovanvzorcedostavame Protozepron1je1 KdyznejdelscestazkorenedolistuvbinarnmstromeTmadelkuk,pakTmanejvyse 2klistu.Proton!2S(n).OdtudplyneS(n)log2n!.PripomenmesiStirlinguvvzorec profaktorial: 12n;1 n20,muzemepredpokladat,ze(1+1 n!=p2n nen(1+1 12n+O(1n2)): Protozeplat log2n!12log2n+n(log2n log2e)+log2p2(n+12)log2n nlog2e: 12n+O(1 e1=e=2log2e=(eln2)log2e=eln2log2e; n2))1pro polozme ProbinarnstromToznacmeB(T)soucetvsechdelekcestzkorenedonejakeholistua dostavame,ze1 ln2=log2e,atedy B(k)=minfB(T)jTjebinarnstromsklistyg: S(n)log2n!(n+12)log2n n ln2:

27 Takzedokazme,zeB(T)klog2kprokazdybinarnstromTsklisty.Kdyzvestrome Kdyzukazeme,zeB(k)klog2k,pakbude predchudcem,dostanemeuplnybinarnstromt0sklistytakovy,zeb(t0)b(t). Tvynechamekazdyvrchol,kterymajenjednohosynaatohotosynaspojmesjeho A(n)B(n!) n!n!log2n! n!=log2n!(n+12)log2n n vrcholem,pakb(t)=0=1log21,kdyztjeuplnybinarnstromsdvemalisty,pak Protostacseomezitnauplnebinarnstromy.KdyzTjeuplnybinarnstromsjednm ln2: B(i)ilog2iproi<k,anechtTjeuplnybinarnstromsklisty.NechtT1aT2jsoupodstromyurcenesynykoreneanechtTimakilistuproi=1;2.Pak1k1;k2ak1+k2=k, B(T)=k1+B(T1)+k2+B(T2)k+B(k1)+B(k2)k+k1log2k1+k2log2k2: B(T)=2=2log22.TedyplatB(1)1log21aB(2)2log22.Predpokladejme,ze Tedystacukazat,ze tedyk1;k2<k,apodleindukcnhopredpokladub(ki)kilog2ki.odtud kdex2(0;k).abychomtodokazali,vsimnemesi,zef(k2)=0.nynspoctamederivacif. plat provsechnak1;k2>0takova,zek=k1+k2.totojeekvivalentnstvrzenm,zeprok>0 f(x)=xlog2x+(k x)log2(k x)+k klog2k0; k+k1log2k1+k2log2k2klog2k Veta.Kazdytrdcalgoritmus,jehozjedinouprimitivnoperacsprvkyvstupnposloupnostijeporovnan,vyzadujevnejhorsmivocekavanemprpadealesponcnlogncasu f0(x)>0afjenatomtointervalurostouc.odtudplyne,zef(x)0prox2(0;k).tm Kdyzx2(0;k2),pakf0(x)<0afjenatomtointervaluklesajc,kdyzx2(k2;k),pak jsmedokazali,zea(n)(n+12)log2n n f0(x)=log2x+log2e log2(k x) log2e=log2x ln2.shrnemenasevysledky. k x: pronejakoukonstantuc>0.vnejhorsmprpadepouzijealespond(n+12)log2n n sepouzvaiprovycslovanalgebraickychfunkcaprialgoritmickemresengeometrickych jealespon(n+12)log2n n Vtomtovysledkulzeoslabitpredpoklady.Vetaplatizapredpokladu,zetrdcalgoritmus porovnanaocekavanypocetporovnanprirovnomernemrozdelenvstupnchposloupnost nepouzvaneprmeadresovanacelocselnedelen.tatometodapronalezendolnhoodhadu ln2. ln2e pokladuvevetezbavit.vnasledujcchalgoritmechpredpokladame,zeqijsouspojove seznamy,novyprveksevkladanakonecseznamuakonkatenaceseznamuzavisnajejich porad.vseznamechmameokamzityprstupkprvnmuaposlednmuprvku(pomoc ukazatelunatytoprvky). uloh.nadruhestraneklasickyalgoritmusbucketsortukazuje,zesenelzepred-

28 foreveryi=0;1;:::;mdoqi=;enddo Komentar:Vstupjeprirozenecslomaposloupnostprirozenychcsela1;a2;:::;anzintervalu<0;m>.Clemjesetrditposloupnosta1;a2;:::;an. foreveryi=1;2;:::;ndo aivloznakonecseznamuqaienddo i:=0,p:=;whileimdo BUCKETSORT(a1;a2;:::;an;m) chovanmporad.konkatenacedvouseznamuavlozenprvkudoseznamuvyzadujcas O(1).ProtoprvnatretcyklusvyzadujcasO(m)adruhycykluscasO(n).TedyalgoritmusvyzadujeO(n+m)casuapameti.Kdyzm=O(n),takproalgoritmusneplattvrzen Pjeneklesajcposloupnostprvkua1;a2;:::;an. Algoritmusnevyzaduje,abyprvkyvevstupnposloupnostibylyruzne.Vevystupnposloupnostisedanyprvekopakujetolikrat,kolikratseopakovalvevstupnposloupnosti,seza- P:=konkatenacePaQi,i:=i+1endo adresovan. Nynuvedemedvesostikovanejsverzetohotoalgoritmu.Vprvnpredpokladame,ze a1;a2;:::;anjeposloupnostrealnychcselzintervalu<0;1>ajepevnezvolenekladne vety.duvodje,zenejsousplnenypredpoklady,protozedruhycykluspouzvaneprme realnecslo. k:=n foreveryi=0;1;:::;kdoqi=;enddo foreveryi=1;2;:::;ndo aivloznakonecseznamuqdkaieenddo i:=0,p:=;whileikdo HEAPSORT(Qi)P:=konkatenacePaQi,i:=i+1endo HYBRIDSORT(a1;a2;:::;an) sobenezavisle,pakocekavanycasalgoritmuhybridsortjeo(n). Veta.AlgoritmusHYBRIDSORTsetrdposloupnostrealnychcselzintervalu<0;1> Dukaz.PrvndvacyklyvalgoritmuvyzadujcasO(n),i-tybehtrethocykluvyzaduje Pjerostoucposloupnostprvkua1;a2;:::;an. vnejhorsmprpadevcaseo(nlogn).kdyzprvkyaimajrovnomernerozlozenajsouna nejvysecaso(1+jqijlogjqij).prototretcyklusvyzadujecas acelkovycashybridsortujenejvyseo(nlogn). OznacmeXi=jQij,pakmuzemepredpokladat,zeXijenahodnapromenna.Protoze pravdepodobnost,zex2qi,je1k,dostavame,ze O(kXi=0(1+jQijlogjQij)=O(kXi=0(1+jQijlogn)=O(k+(kXi=0jQij)logn)=O(nlogn) Prob(Xi=q)=nq(1k)q(1 1k)n q:

29 Ocekavanycasvyzadovanytretmcyklemsepakrovna protozek=na E(kXi=01+XilogXi)k+knXq=2q2nq(1k)q(1 1k)n q=k+k(n(n 1) q2nq=(q(q 1)+q)nq=n(n 1)n 2 q 2+nn 1 q 1: k2+nk)=o(n); i<minfn;mgaxi+1<yi+1.predpokladejme,zeai=a1ia2i:::al(i) danouabecedou,paka<bvlexikograckemusporadan,pravekdyzexistujei= menme,zekdyza=x1x2:::xnab=y1y2:::ymjsoudveslovanadtotalneuspora- abeceduachcemelexikograckyusporadatslovaa1;a2;:::;annadtoutoabecedou.pripo- 0;1;:::;minfn;mgtakove,zexj=yjprokazdej=1;2;:::;iabudn=i<mnebo NynpouzijememodikaciBUCKETSORTuksetrdenslov.Mametotalneusporadanou foreveryi=1;2;:::;ndol(i):=delkaslovaaienddo delkai-tehoslovaai. l=maxfl(i)ji=1;2;:::;ng foreveryi=1;2;:::;ldoli=;enddo WORDSORT(a1;a2;:::;an) i,kdeaji2al(i)je Komentar:ProkazdeimnozinaLiobsahujevsechnaslovazmnozinyfa1;a2;:::;ango foreveryi=1;2;:::;ndoaivlozmedoll(i)enddo delcei. P1:=f(j;aji)j1in;1jl(i)g (i;x):=prvnprvekp2 foreveryi=1;2;:::;ldosi=;enddo while(i;x)6=nildo(i;x)vlozmedosi P2:=BUCKETSORT(P1) usporadamep1podledruhekomponenty whilei>0dot:=likonkatenacest,a:=prvnslovovt x<y,pak(i;x)jepred(i;y). T:=;,i:=l foreverys2dots:=;enddo whilea6=nildo Komentar:VSijsouvsechnydvojice(i;x)takove,zexjei-tympsmenemabecedy,akdyz (i;x):=naslednk(i;x)vp2enddo enddoi:=i 1enddo (i;x):=nasledujcprvekpo(i;x)vsi T:=TkonkatenacesTx,Tx:=; while(i;x)6=nildo (i;x):=prvnprvekvsi,t:=; a:=nasledujcslovopoavtenddo s:=i-tepsmenoa,vlozmeadots, Tjesetrdenaposloupnostslova1;a2;:::;an.