Presentation laddar. Vänta.

Presentation laddar. Vänta.

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.

Liknande presentationer


En presentation över ämnet: "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."— Presentationens avskrift:

1 Datastrukturer och algoritmer Föreläsning 11

2 Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel 13.1-13.2, 13.4-13.6, 14.4 och 14.7 i kursboken

3 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

4 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.

5 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

6 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.

7 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)

8 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.

9 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.

10 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.

11 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; }

12 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; }

13 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]; }

14 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; }

15 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("}"); }

16 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)

17 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.

18 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.

19 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.

20 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.

21 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.

22 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

23 Datastrukturer och algoritmer VT08 Insättning i binärt sökträd  Se också animeringen på sidan http://people.ksp.sk/~kuko/bak/big (välj BST) http://people.ksp.sk/~kuko/bak/big Bild från sidan 289 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000

24 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.

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

26 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.

27 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.

28 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).

29 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.

30 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

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

32 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ö.

33 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.

34 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”.

35 Datastrukturer och algoritmer VT08 Animering  Längst ned på sidan http://people.ksp.sk/~kuko/bak/big (välj Heap) http://people.ksp.sk/~kuko/bak/big


Ladda ner ppt "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."

Liknande presentationer


Google-annonser