• No results found

Föreläsning 6 Splay-träd. Prioritetsköer och heapar.

N/A
N/A
Protected

Academic year: 2021

Share "Föreläsning 6 Splay-träd. Prioritetsköer och heapar."

Copied!
9
0
0

Loading.... (view fulltext now)

Full text

(1)

Föreläsning 6

Splay-träd. Prioritetsköer och heapar.

TDDC91,TDDE22,725G97: DALG

Utskriftsversion av föreläsning i Datastrukturer och algoritmer 21 september 2018

Magnus Nielsen, IDA, Linköpings universitet

6.1

1 Splay-träd

Binära sökträd är inte unika Kom ihåg det binära sökträdet:

• Enkelt att sätta in och ta bort element, men. . .

• ”balansen” bestäms av ordningen på insättningar och borttagningar.

Kombinera med heuristiken ”håll nyligen använda element först” för listor?

• Ofta använda element bör finnas nära roten!

insert: 1,2,4,5,8

insert: 5,2,1,4,8 6.2

Operationensplay(k)

• Utför en normal sökning efter k, kom ihåg noderna vi passerar. . .

• Märk den sista noden vi undersöker med P – Om k finns i T , finns k i noden P, – annars är P förälder till ett tomt träd

• Återvänd till roten och gör en rotation vid varje nod för att flytta P uppåt i trädet. . . (3 fall)

6.3

Operationensplay(k)

• zig:parent(P) är roten: rotera kring P

(2)

Q

P

a b

c a

Q P

c b

6.4

Operationensplay(k)

• zig-zig: P ochparent(P) är bägge vänsterbarn (eller bägge högerbarn): utför två rotationer för att flytta upp P

P

Q a

b P

a b

c d Q

R Q

P

a b

R

c d

R

c d

6.5

Operationensplay(k)

• zig-zag: En av P ochparent(P) är ett vänsterbarn och den andra är ett högerbarn eller vice versa:

utför två rotationer i olika riktningar

Q

a

R

P

a b

b c

d c d

R P

Q

Observera att dessa rotationer kan öka trädets höjd! 6.6

findochinsert functionFIND(k, T )

SPLAY(k, T )

ifKEY(ROOT(T )) = k then return (k, v) else return null

(3)

SPLAY(k, T )

6.7

Exempel: insättning av 14

6.8

Exempel: insättning av 14

6.9

Exempel: insättning av 14

(4)

6.10

Exempel: insättning av 14

6.11

Exempel: insättning av 14

(5)

6.12

Exempel: insättning av 14

6.13

delete

functionDELETE(k, T ) if k finns i ett löv then

görSPLAYpå föräldern till lövet else if k finns i en intern nod then

ersätt noden med dess föregångare i inorder görSPLAYpå föräldern till föregångaren

(6)

Det går förstås att använda efterföljaren i inorder också. 6.14

Exempel: borttagning av 8

6.15

Exempel: borttagning av 8

6.16

Exempel: borttagning av 8

(7)

6.17

Användning

• Akademiskt intresse (DALG)

• Vissa (i synnerhet äldre) routers

6.18

Prestanda

• Varje operation kan behöva utföras på ett totalt obalanserat träd – alltså ingen garanti för tid O(log n) i värsta fallet

• Amorterade tiden är logaritmisk

– varje sekvens av m operationer, utförda på ett initialt tomt träd, tar totalt O(m log m) tid – alltså är den amorterade kostnaden/tiden för en operation O(log n) även om enskilda operatio-

ner kan bete sig mycket värre

6.19

2 Prioritetsköer

Prioritetsköer

En vanligt förekommande situation:

• Väntelista (jobbhantering på flera användardatorer, simulering av händelser)

• Om en resurs blir ledig, välj ett element från väntelistan

• Valet är baserat på någon partial/linjär ordning:

– jobbet med högst prioritet ska köras först,

– varje händelse ska inträffa vid en viss tidpunkt; händelserna ska bearbetas i tidsordning

6.20

(8)

ADT prioritetskö

• Linjärt ordnad mängd K av nycklar

• Vi lagrar par (k, v) (som i ADT Dictionary), flera par med samma nyckel är tillåtet

• en vanlig operation är att hämta par med minimal nyckel

• Operationer på en prioritetskö P:

– makeEmptyPQ() – isEmpty() – size()

– min(): hitta ett par (k, v) som har minimalt k i P; returnera (k, v) – insert(k, v): sätt in (k, v) i P

– removeMin(): ta bort och returnera ett par (k, v) i P med minimalt k; error om P är tom

6.21

Implementation av prioritetsköer

• Vi kan t.ex. använda (sorterade) länkade listor, BST eller Skip-listor

• En annan idé: använd ett fullständigt binärt träd där roten i varje (del)träd T innehåller det minsta elementet i T

Det här är ett partiellt ordnat träd, också kallat heap! 6.22

3 Heapar

Att uppdatera en heapstruktur

• Medsista lövetmenar vi den sista noden i en traversering i levelorder

• removeMin(PQ) // ta bort roten – Ersätt roten medsista lövet

– Återställ den partiella ordningen genom att byta noder nedåt ”down-heap bubbling”

• insert(PQ, k, v)

– Sätt in ny nod (k, v) eftersista lövet

– Återställ den partiella ordningen genom ”up-heap bubbling”

6.23

Egenskaper

• size(),isEmpty(),min(): O(1)

• insert(),removeMin(): O(log n)

Kom ihåg arrayrepresentationen av BST Ett fullständigt binärt träd. . .

• Kompakt arrayrepresentation

• ”Bubble-up” och ”bubble-down” har snabba implementationer

6.24

(9)

6.25

Heapvarianter

Olika partialordningar

• minsta nyckeln i roten (minHeap)

• största nyckeln i roten (maxHeap)

6.26

References

Related documents

Med hjärtats minutvolym menas den blodmängd som var och en av de två kamrarna pumpar under en minut. Slagvolymen och hjärtfrekvensen ger det som kallas för hjärtminutvolym.

År 2018 låg inkomstnivåerna på 466 700 i Inre staden, vilket är 52,1 pro- cent högre än i Söderort där den genomsnittliga disponibla inkomsten per konsumtionsenhet uppgick till

Sett till perioden 2014–2017 har gifta/sammanboende ökat sina disponibla inkomster med 7,7 procent, medan motsvarande ökning för ensamstående män och kvinnor var 13,6 respektive

skyddsbehövande. Vid bedömningen av skälen till förföljelsen ska medlemsstaterna enligt artikel 10.1 d i direktivet ta hänsyn till att en grupp ska anses utgöra en särskild

Som redovisats ovan (avsnitt 1 b) iv) har Migrationsöverdomstolen redan gjort bedömningen.. att det finns synnerlig anledning att anta att A bär ansvar för brott mot mänskligheten

Den som inte längre uppfyller villkoren för härledd uppehållsrätt kan fortfarande ha rätt att uppehålla sig i Sverige om han eller hon under vistelsetiden har kommit att

Utrangerad eller övertalig vara får utnyttjas för försäljning eller inbyte till lik- artad vara..

Fastigheten är belägen inom Överluleå distrikt och enligt uppgift från Länsstyrelsen krävs det inte s.k.. Fornlämning På fastigheten finns en fornlämning och