Dagens föreläsning Träd Binära träd Binärt sökträd Binärt sökträd

Dagens föreläsning
Träd
Sökning
Programmeringsteknik för Ingenjörer
VT05
Sortering
Föreläsning 14
Programmeringsteknik VT05
Träd
2
Binära träd
rot
Ett träd består av ett antal noder förbundna med varandra
så att det inte bildas någon loop.
Binära träd är en viktig undergrupp till
träd. I ett binärt träd har en nod
maximalt två barn.
rot
Denna egenskap gör att man lätt kan deklarera en
nodstruktur för trädet bestående av ett element och två
länkar (left och right).
delträd
löv
35
• Varje träd har en unik nod som kallas rot. Roten saknar
föräldrar.
• En nod som saknar barn kallas för löv.
• Ett träd består av en samling delträd.
35
25
40
20
Programmeringsteknik VT05
25
40
20
30
3
30
Programmeringsteknik VT05
Binärt sökträd
4
Binärt sökträd
Ett binärt träd kallas sökträd om det har följande
egenskaper:
• Varje nod har ett unikt värde
• Alla element i en nods vänstra delträd har lägre värde än
noden själv.
• Alla element i en nods högra delträd är större värdet än
noden själv.
I ett välbalanserat träd med n noder krävs max log2n
steg innan man hittar ett element man söker.
2
I en sorterad lista med n noder krävs upp till n steg
innan ett element hittas.
1
3
4
4
32
5
6
2
29
41
6
1
20
30
Programmeringsteknik VT05
3
5
7
7
45
5
Programmeringsteknik VT05
6
1
Binärt sökträd
Binärt sökträd
Algoritm för att sätta in ett element i ett binärt sökträd:
Algoritm för att ta bort ett element i ett binärt sökträd:
1. Om noden är tom, sätt in elementet i noden
2. Annars ska den sättas in i något av nodens delträd:
1. Om noden är ett löv, ta bort noden.
2. Om noden bara har ett barn, ta bort noden och länka
ihop föräldern och barnet.
3. Om noden har två barn:
1. Om elementet är mindre än noden, sätt in den i vänster delträd.
2. Om elementet är större än noden, sätt in den i höger delträd.
3. Om elementet är samma som noden, skippa insättningen.
Programmeringsteknik VT05
7
Arrayer
1. Hitta den minsta noden i det högra delträdet.
2. Ta bort den minsta noden och sätt in den på platsern för noden
som ska tas bort.
Programmeringsteknik VT05
8
Sortering
Ofta har man data i arrayer. Det finns primärt två sätt att
söka data i en array.
Finns ett flertal algoritmer, några vanliga:
• Linjär sökning (sorterad/osorterad data)
• Selection sort (enkel att implementera, långsam)
• Bubble sort (enkel att implementera, långsam)
• Binär sökning (sorterad data)
• Quicksort (Rekursiv, snabb)
Data sorteras för att snabba upp sökning.
Programmeringsteknik VT05
9
Selection sort
10
Bubble sort
Tillvägagångssätt:
for i=0 to n-1 do
for j=0 to n-1 do
if (el[j] > el[j+1]) do
swap(el[j],el[j+1])
– Hitta minsta elementet i arrayen
– Sätt elementet först i arrayen (byt plats med elementet som är
först).
– Ta ut en delarray som består av alla element utom första. (som
är på rätt plats).
– Börja om och fortsätt tills listan är sorterad.
Fördelar:
• Enkel
• Jobbar på en uppsättning data.
Nackdelar:
• Långsam
Fördelar:
• Enkel
• Jobbar på en uppsättning data.
Nackdelar:
• Långsam
Programmeringsteknik VT05
Programmeringsteknik VT05
11
Programmeringsteknik VT05
12
2