Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avPeter Gunnarsson
1
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 11 Trie, Sökning och Sökträd
2
Datastrukturer och algoritmer VT 2003 2© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Innehåll Trie Sökning Sökträd Kapitel 14.1-14.4 och delar av kapitel 15 i boken + OH-bilderna…
3
Datastrukturer och algoritmer VT 2003 3© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Trie Ytterligare en variant av träd. Vi har tidigare sett: Oordnat träd där barnen till en nod bildar en mängd Ordnat träd där barnen till en nod bildar en lista I Trie är barnen till en nod organiserade som tabellvärden i en tabell som hör till noden. Trie kallas också för diskrimineringsträd, code- link tree eller radix-search tree.
4
Datastrukturer och algoritmer VT 2003 4© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Organisation av Trie Man når barnen (delträden) direkt genom ”namn”, dvs argument/nycklar i barnnodens tabell. När man ritar träd brukar nycklarna skrivas direkt intill motsvarande båge. I en trie har tabellerna en och samma nyckeltyp, till exempel tecken. I många tillämpningar av Trie saknar de inre noderna etiketter, träden är lövträd. Trie är normalt nedåtriktad. Binära träd kan ses som ett specialfall av Trie där nyckelvärdena är left och right.
5
Datastrukturer och algoritmer VT 2003 5© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Informell specifikation Två sätt: Utgå från Urträdets specifikation och låt typparametern sibling ha värdet Tabell. oDå hanteras insättning, borttagning och värdeskoll av Tabellen själv. oI övrigt används de vanliga operationerna för att sätta in och ta bort barn etc. Sätt in lämpliga tabelloperationer direkt i specifikationen av Trie. oInsert-child blir tabellens Insert, Delete-child tabellens Remove och Child tabellens Lookup.
6
Datastrukturer och algoritmer VT 2003 6© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Konstruktion av Trie De flesta konstruktioner av träd går bra Om det går bra att byta ut de delar som hanterar barnen (till exempel som element i en lista) till att hantera dessa som tabellvärden i en tabell. oEn länkad lista med 2-celler byts till 3-celler. Implementerar man tabellen som en vektor eller som en hashtabell får man effektiva Trieimplementationer.
7
Datastrukturer och algoritmer VT 2003 7© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tillämpningar av Trie Används för att konstruera Lexikon av sekvenser eller Tabeller där nycklarna är sekvenser. För sekvenser med element av typ A väljer vi en Trie med tabellnycklar av typ A. En sekvens motsvaras då av en väg i trädet från roten till ett löv. Man lägger till en slutmarkör i slutet av varje sekvens om en sekvens kan vara början på en annan sekvens. oEn annan variant är att ha etiketter i de inre noderna också. Ett viktigt/vanligt specialfall är Lexikon/Tabell av textsträng. En sträng kan ju ses som en lista eller vektor av tecken. Se Fig 14.2 på s 284! Se Fig 14.3 på s 286!
8
Datastrukturer och algoritmer VT 2003 8© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Forts… Fördelar med att använda Trie för Lexikon/Tabeller som lagras sekvenser som startar med samma följd av elementvärden: Kompakt sätt att lagra lexikonet/tabellen på Sökningens tidskomplexitet proportionell mot sekvenslängden. (En jämförelse per elementtecken) Den relativa komplexiteten är oberoende av lexikonet/tabellens storlek. oDet blir inte ”dyrare” att söka i ett stort lexikon jämfört med ett litet.
9
Datastrukturer och algoritmer VT 2003 9© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tillämpningar Stavningskontroll Skapa ett trie med alla ord som finns i språket. Översättningstabell Löven innehåller motsvarande ord i ett annat språk. Filsystem på Unix/PC Datakomprimering LZ78 algoritmen Huffman kodning
10
Datastrukturer och algoritmer VT 2003 10© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Komprimerade Tries Alla enbarnsnoder konverteras till att innehålla hela strängen/sekvensen som är under. Varje intern nod i ett komprimerat Trie har två barn och varje löv symboliserar en sträng. Minnesutrymmet krymper från O(m) till O(n) m är summan av längderna av strängarna n är antalet strängar i strukturen
11
Datastrukturer och algoritmer VT 2003 11© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tries för strängar Insättning Startar i noden och går nedåt i trädet så länge det finns en matchande väg. När man hittar en skiljelinje, stanna och stoppa in resten av strängen som ett delträd. Komprimerade tries: oLiknande algoritm men där är löven strängar som kan måsta delas upp i två barn Borttagning I princip samma algoritm som insättning fast ”tvärtom”. Sök upp strängen som ska tas bort och radera nerifrån i trädet upp till första förgreningen.
12
Datastrukturer och algoritmer VT 2003 12© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 LZ78 eller Lempel-Ziv kodning Kodning: Låt frasen 0 vara strängen ”” Skanna igenom texten oOm du stöter på en ”ny” bokstav lägg till den på toppnivån på trien. oOm du stöter på en ”gammal” bokstav gå nedåt i trien tills du inte kan matcha fler tecken, lägg till en nod i trien som representerar den nya strängen. oStoppa in paret (nodeIndex, sistaBokstaven) i den komprimerade strängen. Exempel: ”how now brown cow in town.”
13
Datastrukturer och algoritmer VT 2003 13© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 LZ78 eller Lempel-Ziv kodning Avkodning: Varje gång du stöter på ”0” i strängen lägg nästa bokstav i strängen direkt efter den föregående i den avkodade strängen. För varje index 0 stoppa in delsträngen som motsvaras av den noden i den avkodade strängen, följt av nästa tecken i den komprimerade strängen. Notera att man inte behöver skicka med trädet. Exempel: 0h0o0w0_0n2w4b0r6n4c6_0i5_0t9.
14
Datastrukturer och algoritmer VT 2003 14© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Filkomprimering ASCII-filer är textfiler där varje bokstav representeras av en 8-bitars ascii-kod. Det är alltså en fixlängdskodning Om man tittar på en textfil ser man att vissa bokstäver förekommer oftare än andra. Om man lagrar vanligt förekommande bokstäver med färre bitar än ovanliga så skulle vi kunna spara utrymme.
15
Datastrukturer och algoritmer VT 2003 15© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Filkomprimering Kodningen måste ske så att man enkelt kan avkoda strängen entydigt med kännedom om hur de olika tecknen översätts. Exempel: Antag att de tre tecknen a, b och c kodas som 0, 1 respektive 01. oOm en mottagare får strängen 001 vad betyder det? aab eller ac?? Prefix-regeln: Ingen symbol kodas med en sträng som utgör prefix till en annan symbols kodsträng.
16
Datastrukturer och algoritmer VT 2003 16© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Bokstäverna lagras i löven. Den vänstra kanten betyder 0 Den högra betyder 1 Vad betyder 01011011010000101001011011010 Vi använder ett trie!
17
Datastrukturer och algoritmer VT 2003 17© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Vi vill ha optmial kompression! Så kort sträng som möjligt. Strängen 01011011010000101001011011010 = 29 bits kan kortas ned till 24 bitar 001011000100001100101100 med trädet
18
Datastrukturer och algoritmer VT 2003 18© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Huffman kodning Börja med en serie träd bestående av ett enda löv. Till varje löv associeras en symbol och en vikt = symbolens frekvens i texten som ska kodas. Välj de två träd som har minst vikt i roten. Bygg ihop dem till ett träd där de blir barn till en ny nod. Den nya noden innehåller en vikt = summan av barnens vikter. Upprepa förra punkten tills vi har ett enda stort träd.
19
Datastrukturer och algoritmer VT 2003 19© 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.
20
Datastrukturer och algoritmer VT 2003 20© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Informell specifikation Skiljer sig från ett vanligt binärt träd: Alla noder måste ha etiketter. oTa bort Create, Has-Label och Set-Label och inför Make som skapar rotnod med värde. oInsert-operationerna utökas med ett etikettvärde. Man ska kunna ta bort inre noder också, inte bara löv. oPositionsparametern i Delete-node behöver inte peka på ett löv. oNär man rycker bort en inre nod slits trädet sönder. Hur lagar man det? Är nedåtriktat oParent kan utelämnas. Eftersom trädet är sorterat kan man inte få stoppa in ett nytt element vart som helst. oMåste uppfylla sorteringsordningen.
21
Datastrukturer och algoritmer VT 2003 21© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Varför sorterat träd? Det går snabbare att söka i strukturen… För binärt sökträd: Kolla om det sökta värdet finns i den aktuella noden. Om inte sök rekursivt nedåt i vänster eller höger delträd beroende på om det sökta elementet kommer före eller efter nodens värde i sorteringsordningen. Om det binära trädet är komplett: Värstafallskomplexitet för sökning O(log n) för ett träd med n noder. Hur ser man till att trädet blir komplett vid insättning?
22
Datastrukturer och algoritmer VT 2003 22© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Borttagning av nod i binärt sökträd Hur lagar man ett träd när man tar bort en nod mitt i? Om den borttagna noden bara hade ett delträd: oLyft upp det ett snäpp Om den borttagna noden hade två delträd: oVälj noden med det minsta värdet i höger delträd som ersättning (alternativt noden med största värdet i vänster delträd). Detta är standardkonstruktionen, är upp till den som implementerar trädet. De vanligaste tillämpningarna är inte beroende av denna detalj. Viktigt att visar sitt beslut i specifikation och dokumentation.
23
Datastrukturer och algoritmer VT 2003 23© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Varför inte ändra gränsytan? Eftersom man inte får sätta in ett nytt element vart som helst så kanske man lika gärna kan ersätta insert-left och insert-right med en metod place som automatiskt placerar det rätt? På samma sätt ersätta delete-node(pos, bt) med remove(val, bt)? Bägge dessa metoder ligger på en högre abstraktionsnivå än övriga metoder i gränsytan. Place implementerar man i huvudsak med hjälp av andra metoder i gränsytan vilket är lite märkligt. Strukturen döljs (för oss) och blir mer lik en mängd.
24
Datastrukturer och algoritmer VT 2003 24© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tillämpningar av Binärt sökträd Framför allt till konstruktioner av Lexikon och Tabell. Notera att inorder-traversering av binärt sökträd ger en sorterad sekvens av de ingående elementen. Kan alltså sortera element genom att stoppa in dem ett och ett i ett tomt Binärt sökträd och sedan traversera det.
25
Datastrukturer och algoritmer VT 2003 25© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Generaliseringar Ett binärt sökträd underlättar sökning i en en- dimensionell datamängd. Lätt att generalisera detta till sökning i en 2- dimensionell datamängd (quadtree) eller så hög dimension man önskar (tex octtree). CNRSTUY
26
Datastrukturer och algoritmer VT 2003 26© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Quadtree (Fyrträd) Organiserat som ett binärt träd med förgreningsfaktor 4 istället för 2. Tolkning (vanligast): Rotnoden delar in den givna ytan (oftast kvadrat) i fyra lika stora kvadrater. Vart och ett av de fyra barnen delar i sin tur sin kvadrat i fyra osv. Inga koordinater behöver lagras i inre noder. Kan användas för att lagra lägesinformation för punktformiga grafiska objekt.
27
Datastrukturer och algoritmer VT 2003 27© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Quadtree – forts. Man kan också använda det för att representera kurvor och ytor. Svarta kvadranter – fylls helt av objektet Grå kvadranter – fylls delvis av objektet Vita kvadranter – innehåller inte objektet Exempel på tillämpning GIS http://www.mathworks.com/products/demos/imagetlbx/quade m.shtml qtdemo i Matlab på peppar…
28
Datastrukturer och algoritmer VT 2003 28© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.