© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Innehåll Sökträd Sökning Delar av kapitel 15 i boken + OH-bilderna…
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Binärt sökträd Används för sökning i linjära samlingar av dataobjekt, specifikt för att konstruera tabeller och lexikon. Organisation: Ett binärt träd som är sorterat med avseende på en sorteringsordning R av etikett-typen så att oI 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. oAlla noder är definierade.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Binära sökträd Om trädet är komplett så vet vi att både medel- och värstafallskomplexiteten är O(log n). Men… Det tar tid och kraft att se till att trädet är komplett. Ibland kan man tvingas bygga om hela trädet. Det räcker att se till att balansen är god…
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 AVL-träd Kallas även höjdbalanserat binärt sökträd. Adelson – Velskii and Landis 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. 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. Måste lagra information om höjden på delträden i noderna.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Exempel på ett AVL-träd
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Insättning i ett AVL-träd 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: oLagra höjden explicit i varje nod oLagra en balansfaktor för noden (-1, 0, +1 men kan temporärt bli +/-2) –Balansen = h(vänster barn) – h(höger barn) Förändringen brukar beskrivas som en höger- eller vänsterrotation av ett delträd. Det räcker med en rotation för att få trädet i balans igen.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Insättningsalgoritm 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. 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. T 0 och T 1 är barn till a och T 2 och T 3 är barn till c.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Exempel: Insättning i ett AVL-träd x/b z/c y/a T0T0 T1T1 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Exempel: Insättning i ett AVL-träd b ac T0T1T2T3 88 1
Datastrukturer och algoritmer VT © 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 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Fyra olika rotationer (2) Om b = y kallas det en enkel rotation ”Rotera upp y över z” T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © 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 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Fyra olika rotationer (4) Om b = x kallas det en dubbel rotation ”Rotera upp x över y och sedan över z” T0T0 T1T1 T2T2 T3T3 T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på y x T0T0 Anta att vi har balans… T1T1 T2T2
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på y x Anta att vi har balans…... och sen stoppar in något som sabbar den T0T0 T1T1 T2T2
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 y x Gör en enkel rotation. Ett annat sätt att beskriva det på T0T0 T1T1 T2T2
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 y x Ett annat sätt att beskriva det på T0T0 T1T1 T2T2 Gör en enkel rotation.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 x Ett annat sätt att beskriva det på T0T0 T1T1 T2T2 Gör en enkel rotation.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 y x Ett annat sätt att beskriva det på T0T0 T1T1 T2T2 Gör en enkel rotation.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 yx Ett annat sätt att beskriva det på T0T0 T1T1 T2T2 Gör en enkel rotation.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 y x Ett annat sätt att beskriva det på T0T0 T1T1 T2T2
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 y x Klart! Ett annat sätt att beskriva det på T0T0 T1T1 T2T2 Gör en enkel rotation.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 y x I ett steg: Ett annat sätt att beskriva det på T0T0 T1T1 T2T2
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 y x Ett annat sätt att beskriva det på T0T0 T1T1 T2T2
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 z y Ett nytt exempel… Ett annat sätt att beskriva det på
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, den här gången stoppar vi in något här Ett annat sätt att beskriva det på z y
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Prova en enkel rotation igen… Ett annat sätt att beskriva det på z y
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 … hmm vi har inte fått balans… Ett annat sätt att beskriva det på z y
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Börja om från början… Ett annat sätt att beskriva det på z y
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 … och titta på strukturen i Y Ett annat sätt att beskriva det på z y
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Vi får lov att göra en dubbel rotation Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Klart! Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Double rotation in one step... Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ett annat sätt att beskriva det på z y x T0T0 T1T1 T2T2 T3T3
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Borttagning ur ett AVL-träd Borttagningen börjar som en vanlig borttagning ur ett binärt sökträd. 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). 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 dess vi nått roten.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Flervägs sökträd 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. Trädet är ett ordnat träd där varje nod har högst m delträd. Etiketterna är sekvenser av upp till m-1 värden i stigande sorteringsordning som fungerar som delningspunkter vid sökning. Oftast är etiketterna nycklar och värdet till en viss nyckel finns i lövet.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Flervägs sökträd Till en nod med k+1 delträd, t 0, t 1, …, t k hör en sekvens med värden v 1, v 2, …, v k. 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 t j ligger mellan v j och v j+1 för 1<j<k alla värden i t k går efter v k Operationerna blir liknande de för binärt sökträd. Plattare träd. Höjden = log m n Mer jobb i noderna Se Fig på s 323!
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 B-träd 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 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 B-träd 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. Borttagning kan leda till att man måste justera värderna och slå ihop noder eller omfördela värden mellan dem. B-träd av ordning 3 kallas också 2-3 träd
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 B-träd analys: För ett B-träd av ordning m, med höjden h och n nycklar insatta gäller h = O(log n). 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) Nycklarna i vektorn måste skiftas runt vid splittring av en nod. Kostnad O(m) 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. Värstafallskostnad för sökning och insättning O(log n)
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Exempel på B-träd: 2-4 träd Varje nod har 1, 2 eller 3 nycklar och varje icke-löv har 2-4 barn. 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 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Exempel på B-träd: 2-4 träd 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”- operation.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Linjär sökning Starta från början och sök tills elementet hittat eller sekvensen slut. Komplexitet Elementet finns: I medel gå igenom halva listan, O(n) Elementet saknas: I medel gå igenom hela listan, O(n) Om listan är sorterad: Elementet saknas: Räcker i medel att leta genom halva listan n/2, O(n)
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Binär sökning Om sekvensen har index (tex i en array eller numrerad lista) kan man söka binärt. Successiv halvering av sökintervallet. Vi får värsta-falls och medelkomplexitet O(log n). 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 rekursivt i det högra delintervallet.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Exempel: 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. 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 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Strängsökning Specialfall av sökning. Man söker inte ett enstaka element utan en sekvens av element. Elementet ofta tecken. 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 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Första försök till algoritm: 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. Värsta fallet: Varje element i S avläses m gånger, dvs O(n*m) I praktiken bättre
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Exempel
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Boyer-Moores algoritm 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. oOm det finns upprepningar av element i mönstret så får man bara flytta fram till den högraste förekomsten. oFörskjutningstabell talar om hur långt man får flytta.