Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation



Relevanta dokument
Datastrukturer och algoritmer. Innehåll. Trie. Informell specifikation. Organisation av Trie. Föreläsning 13 Trie och Sökträd.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Objektorienterad programmering D2

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

Senaste revideringen av kapitlet gjordes , efter att ett fel upptäckts.

Föreläsning 6: Introduktion av listor

Dugga Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 036/DIT960

Föreläsning 7. Träd och binära sökträd

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Tentamen Datastrukturer (DAT036)

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret Lektion 3

Datastrukturer och algoritmer

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

Föreläsning 13 och 14: Binära träd

Krypteringsprogrammet Kryptogamen

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer. föreläsning 6. Maps 1

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Tentamen, Algoritmer och datastrukturer

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Föreläsning 4 Datastrukturer (DAT037)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Tentamen Datastrukturer, DAT037 (DAT036)

Sätt att skriva ut binärträd

1 Skapa Tabell Skapa Relationer Redigera Relationer Redigera Fält i Tabell Lägga till Poster i Tabell...

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Dimensioner och fraktal geometri. Johan Wild

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

Lära känna skrivbordet

Föreläsning 4: Kombinatorisk sökning

Tentamen TEN1 HI

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Ickelinjära ekvationer

Problem: BOW Bowling. Regler för Bowling. swedish. BOI 2015, dag 1. Tillgängligt minne: 256 MB

Algoritmer, datastrukturer och komplexitet

9-1 Koordinatsystem och funktioner. Namn:

Styra olika typer av objekt som animering, video, ljud och Flashfilm

Skrivstöd. Joakim Nivre. Introduktion till språkteknologi. Skrivstöd. Inledning. Orsaker till stavfel. Detektering av icke-ord

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

Rekursiva algoritmer sortering sökning mönstermatchning

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: minuter beroende på variant Material: TI-82/83/84 samt tärningar

1. 20 identiska bollar skall delas ut till fem flickor och fem pojkar. På hur många olika sätt kan detta ske om

Källkodning. Egenskaper hos koder. Några exempel

Lösa konflikter som orsakar skada

Magnus Nielsen, IDA, Linköpings universitet

Tildatenta Lösningsskiss

Omtentamen i DV & TDV

Tentaupplägg denna gång

Wienerprocesser. Finansiell statistik, vt-05. Enkel slumpvandring. Enkel slumpvandring. Varför: model för aktiekurs (dock med aber...

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Algoritmer, datastrukturer och komplexitet

Repetitionsuppgifter i Matematik inför Basår. Matematiska institutionen Linköpings universitet 2014

Att använda bildhanteringsprogram, del 2

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

Detta prov består av del 1 och 2. Här finns också facit och förslag till poängsättning

Föreläsning 4 Datastrukturer (DAT037)

RESTAURERING AV GAMLA FOTOGRAFIER

Upptäcka och analysera. Qlik Sense 1.1 Copyright QlikTech International AB. Alla rättigheter förbehållna.

Kurvlängd och geometri på en sfärisk yta

Tentaupplägg denna gång

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

En ideal op-förstärkare har oändlig inimedans, noll utimpedans och oändlig förstärkning.

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

UPPGIFT 1 ÖVERSÄTTNING

Föreläsning 3.1: Datastrukturer, en översikt

Datastrukturer och algoritmer

DigitalBild del 1 Adobe Photoshop Elements ver 6.0

Kommentarmaterial, Skolverket 1997

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Kvalitetsarbete. Kungshöjdens förskola. Förskolor Syd Munkedals kommun Majvor Kollin Lena Klevgård Jenny Pettersson

Burrows-Wheelers transform

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

SF1624 Algebra och geometri Tentamen Onsdagen 29 oktober, 2014

Föreläsning Datastrukturer (DAT036)

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Föreläsning 10. ADT:er och datastrukturer

Excelfiler läggs till i ArcMap på samma sätt som annan data, genom Lägg till Data-knappen.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Programmering för språkteknologer II, HT2014. Rum

Begrepp :: Determinanten

Fredag 10 juni 2016 kl 8 12

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

CSN-rapportering, gymnasiet

Transkript:

Innehåll Föreläsning 11 Trie Sökträd Trie och Sökträd 356 357 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, codelink tree eller radix-search tree. 358 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. 359 Informell specifikation Två sätt: Utgå från Urträdets specifikation och låt typparametern sibling ha värdet Tabell. Då hanteras insättning, borttagning och värdeskoll av Tabellen själv. I ö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. Insert-child blir tabellens Insert, Delete-child tabellens Remove och Child tabellens Lookup. 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. En 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. 360 361

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. En 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. 362 Forts Fördelar med att använda Trie för Lexikon/Tabeller som lagrar 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. Det blir inte dyrare att söka i ett stort lexikon jämfört med ett litet. 363 Stavningskontroll Tillämpningar 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 Komprimerade Tries Alla enbarnsnoder konverteras till att innehålla hela strängen/sekvensen som är under. t o ot 364 365 Insättning Tries för strängar 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: Liknande 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. 366 LZ78 eller Lempel-Ziv kodning Kodning: Låt frasen 0 vara strängen Skanna igenom texten Om du stöter på en ny bokstav lägg till den på toppnivån på trien. Om 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. Stoppa in paret (nodeindex, sistabokstaven) i den komprimerade strängen. Exempel: how now brown cow in town. 367

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. 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. 368 369 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. Om 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. 370 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! 371 Vi vill ha optimal kompression! Så kort sträng som möjligt. Strängen 01011011010000101001011011010 = 29 bits kan kortas ned till 24 bitar (23 minst) 001011000100001100101100 med trädet 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. 372 373

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 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. Alla noder är definierade. Informell specifikation Skiljer sig från ett vanligt binärt träd: Alla noder måste ha etiketter. Ta bort Create, Has-Label och Set-Label och inför Make som skapar rotnod med värde. Insert-operationerna utökas med ett etikettvärde. Man ska kunna ta bort inre noder också, inte bara löv. Positionsparametern i Delete-node behöver inte peka på ett löv. När man rycker bort en inre nod slits trädet sönder. Hur lagar man det? Är nedåtriktat Parent kan utelämnas. Eftersom trädet är sorterat kan man inte få stoppa in ett nytt element vart som helst. Måste uppfylla sorteringsordningen. 374 375 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? 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: Lyft upp det ett snäpp Om den borttagna noden hade två delträd: Vä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. 376 377 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. 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. 378 379

Generaliseringar C N R S T U Y Ett binärt sökträd underlättar sökning i en endimensionell 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). 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. 380 381 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 382