Frelsning 12 Skning och Sktrd Anders Broberg Ulrika
Föreläsning 12 Sökning och Sökträd © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Innehåll u Sökträd u Sökning u Delar av kapitel 15 i boken + OH-bilderna… Datastrukturer och algoritmer VT 2003 2 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Binärt sökträd u Används för sökning i linjära samlingar av dataobjekt, specifikt för att konstruera tabeller och lexikon. u Organisation: ØEtt binärt träd som är sorterat med avseende på en sorteringsordning R av etikett-typen så att o o I varje nod N gäller att alla etiketter i vänster delträd går före N som i sin tur går före alla etiketter i höger delträd. Datastrukturer och algoritmer Alla noder är definierade. VT 2003 3 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Binära sökträd u Om trädet är komplett så vet vi att både medel- och värstafallskomplexiteten är O(log n). u Men… Det tar tid och kraft att se till att trädet är komplett. Ibland kan man tvingas bygga om hela trädet. u Det räcker att se till att balansen är god… Datastrukturer och algoritmer VT 2003 4 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
AVL-träd u Kallas även höjdbalanserat binärt sökträd. Ø Adelson – Velskii and Landis u Noderna är fördelade så att trädet är väl balanserat. För varje enskild nod gäller: Ø Höjden för vänster och höger delträd skiljer sig åt med högst 1. u Vi får värstafallskomplexitet för sökning O(log n) utan att försämra komplexiteten för insättning och borttagning (som alltså också är O(log n)). Ø Algoritmerna för insättning och borttagning blir lite bökigare att konstruera. Datastrukturer och algoritmer Ø Måste lagra information om höjden på VT 2003 delträden i noderna. 5 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel på ett AVL-träd 44 3 17 1 78 2 0 50 1 32 48 0 88 62 0 0 Datastrukturer och algoritmer VT 2003 6 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Insättning i ett AVL-träd u Det nya elementet gör att trädhöjden förändras och att trädet måste höjdbalanseras. ØMan kan hålla reda på delträdens höjd på olika sätt: o o Lagra höjden explicit i varje nod Lagra en balansfaktor för noden (-1, 0, +1 men kan temporärt bli +/-2) – Balansen = h(vänster barn) – h(höger barn) u Förändringen brukar beskrivas som en höger- eller vänsterrotation av ett delträd. u Det räcker med en rotation för att få trädet i balans Datastrukturer och algoritmer igen. VT 2003 7 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Insättningsalgoritm u Starta från den nya noden och leta uppåt tills man hittar en nod x så att ”grandparent” z är obalanserat. Markera x: s förälder y. u Gör en rekonstruering av trädet så här: ØDöp om x, y, z till a, b och c baserat på inorder-ordning. ØLåt T 0, T 1, T 2 och T 3 vara delträden till x, y och z i inorder-ordning. (Inget av delträden får ha x, y eller z som rot. ) Øz byts ut mot b, dess barn är nu a och c. Datastrukturer och algoritmer ØT 0 och T 1 är barn till a och T 2 och T 3 är barn till c. VT 2003 8 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel: Insättning i ett AVL-träd 44 4 z/c 78 3 17 1 y/a 0 50 2 32 T 0 48 x/b 0 T 1 62 54 88 T 3 0 1 Datastrukturer och algoritmer VT 2003 9 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel: Insättning i ett AVL-träd b a 44 3 c T 0 17 1 T 2 T 3 62 2 0 78 1 50 1 32 48 0 54 0 88 0 Datastrukturer och algoritmer VT 2003 10 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Fyra olika rotationer (1) Om b = y kallas det en enkel rotation ”Rotera upp y över z” Datastrukturer och algoritmer VT 2003 11 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Fyra olika rotationer (2) T 0 Om b = y kallas det en enkel rotation ”Rotera upp y över z” T 1 T 2 Datastrukturer och algoritmer VT 2003 12 T 3 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Fyra olika rotationer (3) Om b = x kallas det en dubbel rotation ”Rotera upp x över y och sedan över z” Datastrukturer och algoritmer VT 2003 13 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Fyra olika rotationer (4) T 0 T 1 T 3 T 0 T 1 T 2 Om b = x kallas det en dubbel rotation ”Rotera upp x över y och sedan över z” T 2 Datastrukturer och algoritmer VT 2003 14 T 3 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på Anta att vi har balans… y x T 2 T 0 T 1 Datastrukturer och algoritmer VT 2003 15 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på Anta att vi har balans… y x T 2 T 0 16 T 1. . . och sen stoppar in något som sabbar den Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Ett annat sätt att beskriva det på y Gör en enkel rotation. x T 2 T 0 T 1 Datastrukturer och algoritmer VT 2003 17 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på y Gör en enkel rotation. x T 2 T 1 T 0 Datastrukturer och algoritmer VT 2003 18 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på Gör en enkel rotation. x T 2 T 1 T 0 Datastrukturer och algoritmer VT 2003 19 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på y Gör en enkel rotation. x T 1 T 0 T 2 Datastrukturer och algoritmer VT 2003 20 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på Gör en enkel rotation. x y T 1 T 0 T 2 Datastrukturer och algoritmer VT 2003 21 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på x y T 0 T 1 T 2 Datastrukturer och algoritmer VT 2003 22 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på Gör en enkel rotation. x Klart! y T 0 T 1 T 2 Datastrukturer och algoritmer VT 2003 23 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på y I ett steg: x T 2 T 1 T 0 Datastrukturer och algoritmer VT 2003 24 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på x y T 0 T 1 T 2 Datastrukturer och algoritmer VT 2003 25 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på Ett nytt exempel… z y Datastrukturer och algoritmer VT 2003 26 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på z y. . . den här gången stoppar vi in något här Datastrukturer och algoritmer VT 2003 27 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på z Prova en enkel rotation igen… y Datastrukturer och algoritmer VT 2003 28 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på y z … hmm vi har inte fått balans… Datastrukturer och algoritmer VT 2003 29 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på z Börja om från början… y Datastrukturer och algoritmer VT 2003 30 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på z y … och titta på strukturen i Y Datastrukturer och algoritmer VT 2003 31 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på z Vi får lov att göra en dubbel rotation y x T 0 T 1 32 T 3 T 2 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Ett annat sätt att beskriva det på z y x T 0 T 1 33 T 2 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Ett annat sätt att beskriva det på z y x T 0 T 1 34 T 3 T 2 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Ett annat sätt att beskriva det på z y x T 0 T 1 35 T 3 T 2 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Ett annat sätt att beskriva det på z y x T 0 T 1 36 T 3 T 2 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Ett annat sätt att beskriva det på x z y T 0 T 1 T 2 T 3 Datastrukturer och algoritmer VT 2003 37 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på x y T 0 T 1 z T 2 Klart! T 3 Datastrukturer och algoritmer VT 2003 38 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ett annat sätt att beskriva det på z Double rotation in one step. . . y x T 0 T 1 39 T 3 T 2 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Ett annat sätt att beskriva det på x z y T 0 T 1 T 2 T 3 Datastrukturer och algoritmer VT 2003 40 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Borttagning ur ett AVL-träd u Borttagningen börjar som en vanlig borttagning ur ett binärt sökträd. u Men även borttagning ur ett AVL-träd kan störa balansen. Ø Vi gör en rotation som tidigare för att återställa den (behövs bara enkla rotationer). u När vi återställer balansen på ett ställe kan det uppstå obalans på ett annat… Ø Måste upprepa balanseringen (eller kontroll av balansen) till Datastrukturer och algoritmer dess vi nått roten. VT 2003 41 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Flervägs sökträd u Ett m-vägs sökträd (m-way search tree, m-ary search tree) är en generalisering av ett binärt sökträd. u Trädet är ett ordnat träd där varje nod har högst m delträd. u Etiketterna är sekvenser av upp till m-1 värden i stigande sorteringsordning som fungerar som delningspunkter vid sökning. u Oftast är etiketterna nycklar och värdet till en viss Datastrukturer och algoritmer nyckel finns i lövet. VT 2003 42 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Flervägs sökträd . 18 5 1 g i Se F 3! 2 3 s på u Till en nod med k+1 delträd, t 0, t 1, …, tk hör en sekvens med värden v 1, v 2, …, vk. Sorteringsvillkoret för trädet är att: Øalla värden i t 0 går före v 1 (i sorteringsordningen) Øalla värden i tj ligger mellan vj och vj+1 för 1<j<k Øalla värden i tk går efter vk u Operationerna blir liknande de för binärt sökträd. u Plattare träd. Höjden = logm n Datastrukturer och algoritmer u Mer jobb i noderna VT 2003 43 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
B-träd u Ett B-träd av ordning m är en typ av balanserat m-vägs sökträd som uppfyller följande: ØRoten är antingen ett löv eller har två barn ØAlla noder utom roten och löven har mellan m/2 och m barn ØAlla löv är på samma djup Datastrukturer och algoritmer VT 2003 44 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
B-träd u Insättning av nya element görs alltid på den djupaste nivån, i rätt löv för att bevara sorteringsordningen. ØEn insättning kan leda till att noden blir för stor (dvs > m). Då måste noden delas upp. u Borttagning kan leda till att man måste justera värderna och slå ihop noder eller omfördela värden mellan dem. u B-träd av ordning 3 kallas också Datastrukturer och algoritmer 2 -3 träd VT 2003 45 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
B-träd analys: u För ett B-träd av ordning m, med höjden h och n nycklar insatta gäller h = O(log n). u För att välja rätt underträd vid sökning krävs att man stänger in sökt nyckel mellan två nycklar i noden. Om nycklarna är sorterade och lagrade i en vektor kan man använda binärsökning. Sökning i en nod O(log m) u Nycklarna i vektorn måste skiftas runt vid splittring av en nod. Kostnad O(m) u Eftersom m är en konstant blir det O(1) arbete i varje nod vid sökning och insättning. Antalet noder som berörs är uppåt begränsad av höjden. Datastrukturer och algoritmer u Värstafallskostnad för sökning och insättning O(log n) VT 2003 46 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel på B-träd: 2 -4 träd u Varje nod har 1, 2 eller 3 nycklar och varje icke -löv har 2 -4 barn. u Regel för insättning: ØMan letar sig fram till rätt löv på liknande sätt som i ett vanligt sökträd. ØDen nya nyckeln sätts in där. Om det blir för många nycklar i det lövet splittras det. Datastrukturer och algoritmer VT 2003 47 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel på B-träd: 2 -4 träd u Regel för borttagning: ØMan letar sig fram till rätt löv på liknande sätt som i ett vanligt sökträd. ØEnkla fallet: Det finns flera nycklar i noden, ta bort den som ska bort. ØHalvsvåra fallet: Syskonen har ”extra” element som vi kan sno. ØSvåra fallet: Vi får tomt och syskonet har bara ett element. Då måste vi göra en ”fuse”Datastrukturer och algoritmer operation. VT 2003 48 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Linjär sökning u Starta från början och sök tills elementet hittat eller sekvensen slut. u Komplexitet ØElementet finns: I medel gå igenom halva listan, O(n) ØElementet saknas: I medel gå igenom hela listan, O(n) u Om listan är sorterad: ØElementet saknas: Räcker i medel att leta genom halva listan n/2, O(n) Datastrukturer och algoritmer VT 2003 49 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Binär sökning u Om sekvensen har index (tex i en array eller numrerad lista) kan man söka binärt. u Successiv halvering av sökintervallet. u Vi får värsta-falls och medelkomplexitet O(log n). u Jämför med elementet närmast mitten i intervallet. Ø Om likhet – klart! Ø Om det sökta värdet kommer före i sorteringsordningen fortsätt sökningen rekursivt i det vänstra delintervallet. Ø Om det kommer efter i sorteringsordningen fortsätt sökningen Datastrukturer och algoritmer rekursivt i det högra delintervallet. VT 2003 50 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel: u 1 2 4 4 6 7 9 13 14 19 u Sök efter elementet 13. ØLinjär sökning: 8 jämförelser innan träff. ØBinär sökning: 2 jämförelser innan träff. u Sök efter elementet 10 ØLinjär sökning: 8 jämförelser innan man ger upp. ØBinär sökning: 4 jämförelser innan man ger upp. Datastrukturer och algoritmer VT 2003 51 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Strängsökning u Specialfall av sökning. ØMan söker inte ett enstaka element utan en sekvens av element. ØElementet ofta tecken. u Formellt: ØVi har ett mönster P med längd m och vi söker i en sekven S av längd n där m<<n. Datastrukturer och algoritmer VT 2003 52 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Första försök till algoritm: u Börja jämföra mönstret med sekvensen med start i position ett. ØJämför mönstret från vänster till höger tills man misslyckas. ØFlytta då fram en position i sekvensen och försök igen. u Värsta fallet: Varje element i S avläses m gånger, dvs O(n*m) ØI praktiken bättre Datastrukturer och algoritmer VT 2003 53 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel Datastrukturer och algoritmer VT 2003 54 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Boyer-Moores algoritm u Två idéer: ØGör matchningen baklänges, med start i mönstrets sista element. ØUtnyttja kunskap om mönstrets uppbyggnad och informationen om värdet på den första felmatchande elementet i S för att flytta fram mönstret så långt som möjligt varje gång. o o Om det finns upprepningar av element i mönstret så får man bara flytta fram till den högraste förekomsten. Förskjutningstabell talar om hur långt man får flytta. Datastrukturer och algoritmer VT 2003 55 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
- Slides: 55