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