Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel 13.1-13.2, 13.4-13.6, 14.4.

Slides:



Advertisements
Liknande presentationer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
Advertisements

© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
Algoritmer och data strukturer -Länkade listor
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Logikprogrammering Ons, 25/9
Programmeringsteknik Föreläsning 4 Skolan för Datavetenskap och kommunikation.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Några standardalgoritmer
Binära Sökträd, kapitel 19
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
FL2 732G70 Statistik A Detta är en generell mall för att göra PowerPoint presentationer enligt LiUs grafiska profil. Du skriver in din rubrik,
732G22 Grunder i statistisk metodik
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Föreläsning 11 Arrayer.
PROCESSPROGRAMMERING
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Programmeringsteknik för Media1 & K1
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
Logikprogrammering 21/10 Binära träd
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sorterings algoritmer.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8 Relationer, prioritetsköer och grafer.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Filosofisk logik Kapitel 15
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Presentationens avskrift:

Datastrukturer och algoritmer Föreläsning 11

Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4 och 14.7 i kursboken

Datastrukturer och algoritmer VT08 Mängd – modell  En påse, dock inte riktigt bra eftersom  man kan ha mängder med gemensamma element ogår inte ha saker i flera påsar samtidigt  inte vill att en mängd ska kunna innehålla andra mängder oskillnad jämfört med matematiken! oinga problem att lagra påsar i påsen

Datastrukturer och algoritmer VT08 Mängd – organisation  En oordnad samling av element som är av samma typ.  Grundmängden behöver inte vara ändlig (heltal) men dataobjekten är ändliga.  Kan inte innehålla två likadana värden.  En mängd kan inte innehålla mängder.

Datastrukturer och algoritmer VT08 Mängd – specifikation abstract datatype Set(val) Empty()->Set(val) Single(v:val)->Set(val) Insert(v:val,s:Set(val))->Set(val) Union(s:Set(val),t:Set(val))->Set(val) Intersection(s:Set(val),t:Set(val))->Set(val) Difference(s:Set(val),t:Set(val))->Set(val) Isempty(s:Set(val))->Bool Member-of(v:val,s:Set(val))->Bool Choose(s:Set(val))->val Remove(v:val,s:Set(val))->Set(val) Equal(s:Set(val),t:Set(val))->Bool Subset(s:Set(val),t:Set(val))->Bool

Datastrukturer och algoritmer VT08 Mängd – specifikation  Alla metoder som finns i boken behövs inte.  Empty, IsEmpty, Insert, Choose och Remove skulle räcka.  Man har tagit med de vanliga matematiska mängdoperationerna.

Datastrukturer och algoritmer VT08 Konstruktion av mängd  Går i princip att konstrueras i vilken dynamisk datatyp som helst.  Men inte säkert att det blir effektivt...  Man måste hantera dubbletter.  Mängd som lista har två alternativ:  Se till att listan inte har dubbletter (krav på Set- Insert och Union)  Låt listan ha dubbletter (krav på Equal, Remove, Intersection, Difference)

Datastrukturer och algoritmer VT08 Konstruktion av mängd som lista  Komplexitet:  Metoder som kräver sökningar i listan O(n)  Binära mängdoperationerna kräver (pga nästlad iteration) O(m*n)  Listan kan konstrueras på olika sätt. Sorterad lista tex är effektivare för de binära mängdoperationerna. + Grundmängden kan vara mycket stor + Delmängderna kan både vara mycket små och mycket stora utan utrymmesförluster (om man implementerar listan på rätt sätt) - Flera operationer blir slöa jämfört med andra val.

Datastrukturer och algoritmer VT08 Konstruktion av mängd som bitvektor  En bitvektor är en vektor med elementvärden av typen Bit = {0,1}  Ibland tolkas 0 och 1 som falskt resp. sant, dvs Bit identifieras som datatypen Boolean  Grundmängden måste ha en diskret linjär ordning av elementen.  Dvs, man kan numrera dem.  Bit k i bitvektorn motsvarar det k:te elementet i grundmängden.  Biten är 1 om elementet ingår i mängden.

Datastrukturer och algoritmer VT08 Konstruktion av mängd som bitvektor  Om bitvektorn finns implementerad som ett eller flera ord i datorns primärminne kan man utnyttja maskinoperationer.  Dvs man gör operationen samtidigt på alla element i vektorn. Detta gör många metoder effektiva. + Relativt effektiv i allmänhet, mycket effektiv som ovan. - Grundmängden måste vara ändlig och i praktiken rätt så liten. Reserverar minne proportionellt mot grundmängdens storlek. - Om man har många små mängder i en tillämpning blir det dålig effektivitet i minnesutnyttjandet.

Datastrukturer och algoritmer VT08 Mängd av heltal som boolsk vektor public class IntSet { private boolean[] set; private final int MAXLEN=100; public IntSet(){ set = new boolean[MAXLEN]; } public void single(int num){ set = new boolean[MAXLEN]; set[num] = true; } public void insert(int num){ set[num] = true; }

Datastrukturer och algoritmer VT08 public IntSet union(IntSet t){ IntSet newSet = new IntSet(); for(int i=0;i<MAXLEN;i++){ if (set[i] || t.memberOf(i)) newSet.insert(i); } return newSet; } public IntSet intersection(IntSet t){ IntSet newSet = new IntSet(); for(int i=0;i<MAXLEN;i++){ if (set[i] && t.memberOf(i)) newSet.insert(i); } return newSet; }

Datastrukturer och algoritmer VT08 public IntSet difference(IntSet t){ IntSet newSet = new IntSet(); for(int i=0;i<MAXLEN;i++){ if (set[i] && !t.memberOf(i)) newSet.insert(i); } return newSet; } public boolean isEmpty(){ for(int i=0;i<MAXLEN;i++){ if (set[i]) return false; } return true; } public boolean memberOf(int num){ return set[num]; }

Datastrukturer och algoritmer VT08 public int choose(){ for(int i=0;i<MAXLEN;i++){ if (set[i]) return i; } // Här borde vi skapa ett undantag! return -1; } public void remove(int num){ set[num] = false; } public boolean equal(IntSet t){ for(int i=0;i<MAXLEN;i++){ if (set[i] != t.memberOf(i)) return false; } return true; }

Datastrukturer och algoritmer VT08 public boolean subSet(IntSet t){ for(int i=0;i<MAXLEN;i++){ if (t.memberOf(i) && !set[i]) return false; } return true; } public void printOut(){ System.out.print("{"); for (int i=0; i<MAXLEN; i++){ if(set[i]) System.out.print(i+ ", "); } System.out.println("}"); }

Datastrukturer och algoritmer VT08 Lexikon  En förenklad mängd där man tagit bort union, intersection, difference, subset och equal.  Kvar är det man behöver för att kunna hålla ordning på en samling objekt:  empty  isempty(s)  insert(v, s)  remove(v, s)  memberOf(v, s)

Datastrukturer och algoritmer VT08 Lexikon  Ett lexikon är som en tabell utan tabellvärden.  Alltså fungerar datatypen lexikon inte som en uppslagsbok (lexikon).  Saknar metoder för att kombinera lexikon till nya lexikon.  Oftast behöver man bara skapa ett lexikon en enda gång.  Lexikon är en solitär datatyp. Man kan bara göra modifieringar av isolerade dataobjekt.  En icke-solitär datatyp har stöd för att kombinera/bearbeta två eller flera dataobjekt.

Datastrukturer och algoritmer VT08 Konstruktion av lexikon  Kan få betydligt effektivare konstruktioner när antalet och typen av metoder är begränsade.  Två konstruktioner av lexikon:  Lexikon som Hashtabell (redan gjort, förel. 4)  Lexikon som Binärt sökträd  Lexikon som Trie (nästa föreläsning)  Eftersom Lexikon är så likt Tabell kan dessa konstruktioner med små ändringar bli effektiva konstruktioner av en tabell.

Datastrukturer och algoritmer VT08 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.  I ett vanligt binärt träd kan man i värsta fall måsta besöka alla noder för att hitta ett element.

Datastrukturer och algoritmer VT08 Binärt sökträd – Organisation  Ett binärt träd som är sorterat med avseende på en sorteringsordning R av etikettypen 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.

Datastrukturer och algoritmer VT08 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.

Datastrukturer och algoritmer VT08 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? oKommer lite senare när vi pratar om en Heap

Datastrukturer och algoritmer VT08 Insättning i binärt sökträd  Se också animeringen på sidan (välj BST) Bild från sidan 289 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000

Datastrukturer och algoritmer VT08 Borttagning av nod i binärt sökträd  Hur tar bort en nod mitt i ett träd?  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.

Datastrukturer och algoritmer VT08 → → Bild från sidan i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000

Datastrukturer och algoritmer VT08 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.

Datastrukturer och algoritmer VT08 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.

Datastrukturer och algoritmer VT08 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 4- dimensionell datamängd (quadtree) eller så hög dimension man önskar (tex octtree).

Datastrukturer och algoritmer VT08 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.

Datastrukturer och algoritmer VT08 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  qtdemo i Matlab på peppar

Datastrukturer och algoritmer VT08 På Matlabs hemsida om Image processing toolbox Image and a Representation of Its Quadtree Decomposition

Datastrukturer och algoritmer VT08 Heap/Hög  Ett partiellt sorterat binärt träd  Etiketterna är sorterade efter en relation R så att a är förälder till b endast om a är före b i ordningen som ges av R.  Insättningar och borttagningar görs så att trädet hålls komplett.  Insert O(log n), Delete-first O(log n)  Kan användas tex för att konstruera en prioritetskö.

Datastrukturer och algoritmer VT08 Insättning i en Heap  Placera den nya noden på första lediga plats.  Låt sedan noden vandra uppåt i heapen tills det hamnat rätt i sorteringsordningen eller blivit rot.

Datastrukturer och algoritmer VT08 Borttagning ur en heap  Ersätt noden som ska tas bort med den ”sista” noden i heapen.  Låt denna vandra ned tills den hamnat ”rätt” eller nått ”botten”.

Datastrukturer och algoritmer VT08 Animering  Längst ned på sidan (välj Heap)