Föreläsning 6 Sply-trä. rioritetsköer oh hepr. TDDC91,TDDE22,725G97: DALG Utskriftsversion v föreläsning i Dtstrukturer oh lgoritmer 19 septemer 2017 Mgnus Nielsen, IDA, Linköpings universitet 6.1 Innehåll Innehåll 1 Sply-trä 1 2 rioritetsköer 8 3 Hepr 8 6.2 1 Sply-trä Binär sökträ är inte unik Kom ihåg et inär sökträet: Enkelt tt sätt in oh t ort element, men... lnsen estäms v orningen på insättningr oh orttgningr. Kominer me heuristiken håll nyligen nvän element först för listor? Oft nvän element ör finns när roten! insert: 1,2,4,5,8 insert: 5,2,1,4,8 6.3 Opertionen sply(k) Utför en norml sökning efter k, kom ihåg noern vi psserr... Märk en sist noen vi unersöker me Om k finns i T, finns k i noen, nnrs är föräler till ett tomt trä Återvän till roten oh gör en rottion vi vrje no för tt flytt uppåt i träet... (3 fll) 6.4 1
Opertionen sply(k) zig: prent() är roten: roter kring 6.5 Opertionen sply(k) zig-zig: oh prent() är ägge vänsterrn (eller ägge högerrn): utför två rottioner för tt flytt upp 6.6 Opertionen sply(k) zig-zg: En v oh prent() är ett vänsterrn oh en nr är ett högerrn eller vie vers: utför två rottioner i olik riktningr Oserver tt ess rottioner kn ök träets höj! 6.7 2
fin oh insert funtion FIND(k, T ) SLAY(k,T ) if KEY(OOT(T )) = k then return (k, v) else return null funtion INSET(k, v, T ) sätt in (k,v) som i ett inärt sökträ SLAY(k,T ) 6.8 Exempel: insättning v 14 6.9 Exempel: insättning v 14 3
6.10 Exempel: insättning v 14 6.11 Exempel: insättning v 14 4
6.12 Exempel: insättning v 14 6.13 Exempel: insättning v 14 5
6.14 elete funtion DELETE(k, T ) if k finns i ett löv then gör SLAY på förälern till lövet else if k finns i en intern no then ersätt noen me ess föregångre i inorer gör SLAY på förälern till föregångren Det går förstås tt nvän efterföljren i inorer okså. 6.15 Exempel: orttgning v 8 6.16 6
Exempel: orttgning v 8 6.17 Exempel: orttgning v 8 6.18 restn Vrje opertion kn ehöv utförs på ett totlt olnsert trä lltså ingen grnti för ti O(logn) i värst fllet Amortere tien är logritmisk vrje sekvens v m opertioner, utför på ett initilt tomt trä, tr totlt O(mlogm) ti 7
lltså är en mortere kostnen/tien för en opertion O(logn) även om enskil opertioner kn ete sig myket värre 6.19 2 rioritetsköer rioritetsköer En vnligt förekommne sitution: Väntelist (johntering på fler nvänrtorer, simulering v hänelser) Om en resurs lir leig, välj ett element från väntelistn Vlet är sert på någon prtil/linjär orning: ADT prioritetskö joet me högst prioritet sk körs först, vrje hänelse sk inträff vi en viss tipunkt; hänelsern sk erets i tisorning Linjärt orn mäng K v nyklr Vi lgrr pr (k,v) (som i ADT Ditionry), fler pr me smm nykel är tillåtet en vnlig opertion är tt hämt pr me miniml nykel Opertioner på en prioritetskö : mkeempty() isempty() size() min(): hitt ett pr (k,v) som hr minimlt k i ; returner (k,v) insert(k,v): sätt in (k,v) i removemin(): t ort oh returner ett pr (k,v) i me minimlt k; error om är tom 6.20 6.21 Implementtion v prioritetsköer Vi kn t.ex. nvän (sortere) länke listor, BST eller Skip-listor En nnn ié: nvän ett fullstänigt inärt trä är roten i vrje (el)trä T innehåller et minst elementet i T Det här är ett prtiellt ornt trä, okså kllt hep! 6.22 3 Hepr Att uppter en hepstruktur Me sist lövet menr vi en sist noen i en trversering i levelorer removemin() // t ort roten Ersätt roten me sist lövet Återställ en prtiell orningen genom tt yt noer neåt own-hep uling insert(, k, v) Sätt in ny no (k,v) efter sist lövet Återställ en prtiell orningen genom up-hep uling 6.23 8
Egenskper size(), isempty(), min(): O(1) insert(), removemin(): O(logn) Kom ihåg rryrepresenttionen v BST Ett fullstänigt inärt trä... Kompkt rryrepresenttion Bule-up oh ule-own hr sn implementtioner 6.24 Exempel: ule-up efter insert(4,15) 6.25 Hepvrinter Olik prtilorningr minst nykeln i roten (minhep) störst nykeln i roten (mxhep) 6.26 9