Frelsning l 5 Abstrakta datatyper och algoritmdesign Anders
Föreläsning l 5 Abstrakta datatyper och algoritmdesign © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Innehåll u Abstrakta datatyper Ø Lista, Cell, Fält, Tabell, Stack, Kö, Träd (ordnade och binära), Graf, Mängd, Lexikon, Prioritetskö, Heap, Trie, Binärt sökträd, AVL-träd, B-tree, Relation… u Algoritmdesign Ø Traversering, Sökning, Sortering, Maximalt flöde, Minimalt uppspännande träd, Kortaste vägen etc Ø Tids- och rumskomplexitet u Vad finns det för generella teorier? Datastrukturer och algoritmer u Kapitel 2 9 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Abstrakta datatyper u Ett koncept för att kunna diskutera och jämföra olika typer av datastrukturer. u Ligger på en hög abstraktionsnivå. ØFrämst intresserad av struktur och organisation, inte implementation. u Operationerna ger datatypen karaktär och specifikationen visar datatypens Datastrukturer och algoritmer uttrycksfullhet. VT 2003 3 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Operationskategorier (l) u Konstruktorer - skapar/bygger upp och returnerar ett objekt av aktuell ADT ØGrundkonstruktorer som saknar argument av den aktuella ADT: n o Empty, Make, Create ØVidareutvecklande konstruktorer som tar ett argument av den aktuella ADT: n o List-Insert, Stack-Push ØKombinerande konstruktorer som tar flera argument av Datastrukturer och algoritmer den aktuella ADT: n o 4 Set-Union © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Operationskategorier (2) u Inspektorer - Undersöker ett objekts inre uppbyggnad på olika sätt ØAvläsning eller sondering av elementvärden eller strukturella förhållanden o Inspect-value, Stack-Top, Table-Lookup, Set-Choose ØTest av olika extremfall av struktur och värden o Binary-tree-has-left-child, Set-member-of ØMätning av objekt o 5 Datastrukturer och algoritmer Isempty, Has-value © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Operationskategorier (3) u Modifikatorer – Ändrar ett objekt struktur och/eller elementvärden Ø Insättning, borttagning, tilldelning omstrukturering o Array-Set-Value, Table-Remove, Stack-Pop, Set-Insert u Navigatorer – Används för att ta fram ett objekts struktur Ø Landmärken (kända positioner), lokala förflyttningar, traverseringar o List-First, List-End, List-kext, Binary-tree-left-child u Komparatorer – jämför objekt av den aktuella ADTn med varandra Datastrukturer och algoritmer Ø Equal, Set-Subset 6 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Uttrycksfullhet u Abstrakt datatyp = objekt + konstruktion av gränsytan. u Frågor att fundera kring vid skapande av ADT: ØVilken är värdemängden? ØVilka interna resp. externa egenskaper har objekten? ØVad ska man göra med objekten? ØSpecificera en gränsyta informellt och formellt. ØÖverväga olika implementationsmöjligheter. u Kan jag göra det jag vill kunna göra med Datastrukturer och algoritmer objekten? ? ØUttrycksfullhet 7 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Uttrycksfullhet u Datatypsspecifikationen har två roller: ØSlå fast hur datatypen är beskaffad, vilka egenskaper den har. ØFungerar som en regelsamling för användningen av datatypen. u Specifikationens tre begrepp uttrycksfullhet kan mätas med ØObjektfullständighet ØAlgoritmfullständighet ØRik gränsyta Datastrukturer och algoritmer VT 2003 8 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Objektfullständighet u Är det svagaste kriteriet. u Det ska vara möjligt att konstruera och skilja mellan alla objekt som anses höra till datatypen. Ø Man ska kunna skilja på två objekt A och B med en sekvens av operationer I Ol O 2… On (n 0) (I = Inspektor, O = Operation) Ø Om vi tittar på en tabell o o Empty, Insert och Max (största definierade tabellvärdet) är inte objektfullständigt. Kan inte skilja på två tabeller med samma max-värde. Datastrukturer och algoritmer Empty, Insert och Lookup räcker! VT 2003 9 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Algoritmfullständighet (Expressive completeness) u Starkare än (och implicerar) objektfullständighet. u Man ska kunna implementera alla algoritmer i denna datatyp. Ø Dvs allt som man kan göra med datatypen ska också gå att implementera utifrån specifikationens operatorer. o Räcker att visa att man kan implementera ett test av likhet mellan två dataobjekt med hjälp av operationerna. – Vill man veta varför: Läs artikeln (Kapur, Srivas ”Computability and implementability issues in abstract data types”). u Alltså: Algoritmfullständighet = objektfullständighet + Datastrukturer och algoritmer likhetstest VT 2003 10 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Rik gränsyta (Expressive richness) u Starkaste kriteriet, implicerar både objektfullständighet och algoritmfullständighet. u Även om man har algoritmfullständighet så kan vissa algoritmer bli hopplöst ineffektiva. u Krav: Man ska med hjälp av gränsytan kunna implementera speciella analysfunktioner som kan Ø Ta fram all information som krävs ur ett dataobjekt för att sedan kunna rekonstruera objektet med enbart komposition av analysfunktionerna. Ø De olika analysfunktionerna får varken innehålla iteration eller rekursion i sin definition. Datastrukturer och algoritmer VT 2003 11 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Rik gränsyta-exempel u Stack-specifikationen har en rik gränsyta. ØIsempty kan avgöra om stacken är Empty eller konstruerad som push(x, s) för något x och s. Top ger x och Pop ger s. ØFör vilken stack som helst kan ändliga kompositioner av dessa analysfunktioner o o o plocka ut vart och ett av elementen i stacken hitta strukturen, ordningen på dem Datastrukturer och algoritmer utifrån detta kan stacken återskapas VT 2003 12 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Praktisk uttrycksfullhet u Vi har teoretiska mått på uttrycksfullhet ØObjektfullständighet, algoritmfullständighet och rik gränsyta. u Måste man uppfylla alla tre kraven? ØIbland blir en rik gränsyta opraktisk, man saknar vissa operationer. o u Hur Utskrifter, längdfunktioner eller kopieringsfunktioner tex. skapar man en gränsyta? Datastrukturer och algoritmer VT 2003 13 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Att utforma en gränsyta u Man utgår från de operationer som bidrar till att ge ADTn sin speciella karaktär. u Sedan applicerar man de teoretiska begreppen. Lägger till vissa operationer och tar bort andra. Målet är att operationerna Ø Ger en objektfullständig gränsyta Ø Är primitiva (kan inte delas upp i mindre operationer) Ø Ger en algoritmfullständig gränsyta Ø Är oberoende, kan inte ta bort en enda operation och ändå ha kvar en algoritmfullständig gränsyta. u Detta ger en rätt stram yta med få operationer. 14 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Fördelar med en stram gränsyta u Utbytbarhet ØMan kan börja med enkla implementationer och sedan byta ut mot allt effektivare. u Portabilitet ØMindre problem att flytta ett program med få op. u Integritet ØMindre risk för att operationer läggs till som strider mot grundidén med ADTn. Datastrukturer och algoritmer VT 2003 15 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Programspråksstöd för ADTs u ML – abstype Ø Operationerna är samlade på ett ställe. Ø Starkt stöd för att dölja implementationen. Man kan bara nå typen via operationen – inte gena och utnyttja intern struktur. u Java – paket, klass och subklasser Ø Man har ett interface eller en abstrakt klass som definierar ADTn. Ø Sedan skapar man underklasser för olika implementationer av ADTn. Ø Finns inget naturligt stöd för att ta bort/dölja vissa delar av gränsytan. Ø Utnyttjas Object kan man inte se till att alla element är av Datastrukturer och algoritmer samma typ. VT 2003 16 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Programspråksstöd för ADTs u Många språk ger mycket litet eller inget stöd alls. Då krävs: ØKonventioner o o Namngivning Operationsval ØGod dokumentation av olika val som görs. ØDisciplin o Inte gå in och peta i interna strukturer. Datastrukturer och algoritmer VT 2003 17 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Design av algoritmer u Problemlösningsstrategier ØTop-down ØBottom-up u Typer av algoritmer (lösningstekniker) Ø”Brute-force” ØGiriga algoritmer (Greedy-algorithms) ØSöndra och härska (Divide and Conquer) ØDynamisk programmering Datastrukturer och algoritmer VT 2003 18 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Brute-force u En rättfram ansats där man utgår direkt från problemställningen och de definitioner som finns där. u Om problemet är kombinatoriskt så gör man en fullständig sökning Ø Genererar och numrerar alla tänkbara svar/lösningar Ø Välj den bästa lösningen u Bra metod att starta med Ø Garanterar en korrekt lösning om en sådan finns Ø MEN garanterar inte effektivitet… Datastrukturer och algoritmer Ø Ofta väldigt enkla algoritmer VT 2003 19 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Brute-force: Exempel u Linjär sökning u Söka det minsta talet i en lista ØAntar att alla element är det lägsta ØKolla alla mot alla u Handelsresande problemet ØBesöka alla städer bara en gång ØPå minst kostsamma sätt Datastrukturer och algoritmer VT 2003 20 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Brute-force (2) u Många problem vet man inte av någon bättre lösning än brute force till. u Ger ofta hög tillväxt på tidskomplexiteten Ø Speciellt för problem där antalet svar ökar snabbt med ökad problemstorlek u Går ofta att effektivisera de naiva algoritmerna Ø Avbryta en sökning när man nått en lösning o Bättre med en lösning än den bästa. Ø Avbryta så fort man inser att vägen inte leder till en lösning Datastrukturer och algoritmer VT 2003 21 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Giriga (Greedy) algoritmer u METOD: ØI varje steg titta på alla möjliga steg och välj den för tillfället bästa vägen. u Bra för optimeringsproblem ØI många fall får vi optimal lösning med en greedy algoritm. o Om den optimala lösningen kan nås via stegvisa lokala förändringar av starten u Heuristisk metod vs. dreedy ØGaranti för optimal lösning greedy u Bra Datastrukturer och algoritmer alternativ till brute-force algoritmer 22 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Exempel u Att lämna tillbaka växel ØMinimalt antal mynt i växel ØTa alltid det största möjliga myntet i varje ”loopvarv” u Minimalt uppspänt träd ØKruksals algoritm ØPrims algoritm u Kortaste vägen i en graf (Diijsktras algoritm) Datastrukturer och algoritmer u Huffman-kodning VT 2003 23 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
”The Fractional Knapsack Problem” u Givet, en mängd p med n element där element i har värde/för u Mål: Välja element med maximal förtjänst utan att den totala Ø I ”The Fractional Knapsack Problem” får man ta bitar av elementen u Låt xi vara mängden vi tar av element i Maximera: med begränsningen: u Regel: För varje gång ta elementet med maximalt värde (fört u O(n log n) Datastrukturer och algoritmer VT 2003 24 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Datastrukturer och algoritmer VT 2003 25 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Söndra och härska (Divide and Conquer) u METOD: Ø Söndra: Dela upp datat/problemet i två eller flera delar som löses rekursivt. Dessa delar bör vara ungefär lika stora. Ø Härska: Konstruera en slutlösning från dellösningarna. u Leder till rekursiva algoritmer med minst två rekursiva anrop. Ø Kan vara en lösning när det är svårt hitta iterativa lösningar Ø Är ibland effektivare även om det finns iterativ lösning Ø Ibland beräknas en dellösning många gånger (= ineffektivt) u u u O(nlogn) är vanligt Merge-sort och Quick-sort Datastrukturer och algoritmer Kan ställa krav på implementering av ADT VT 2003 26 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Ex: Finn de 2 minsta elementen i en lista u Första försöket: Ø Sortera listan O(nlogn) Ø Ta fram de två första elementen O(1) u Alternativ Ø Hitta en effektiv lösning på ett enklare problem o o o ”lösa nästan rätt problem” vs ”lösa problemet nästan rätt” Enklare att hitta bara det minsta elementet! O(n) – n-l jämförelser Konvertera till original problemet. Vad får vi då? O(2*n)? Ø Hitta en ineffektiv lösning på originalproblemet 27 Datastrukturer och algoritmer © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 VT 2003
Söndra och härska algoritm kanske? u Hur skall vi dela data? Ø Två halvor och söka efter minsta i båda halvorna? o Detta ger inte en korrekt lösning Ø Om vi sorterar båda halvorna och sedan i sammanslagningen hitta de två elementen då? o o Merge-sort eller …? Ineffektiv för detta problem Ø Kan vi dela data på något annat sätt? o o Byta delnings faktor till 3, ger det något? kjet Datastrukturer och algoritmer Men …. VT 2003 28 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Om vi delar upp listan i par u N/2 par, sortera dessa u Det första paret (a, b) u ”Conquer-fasen” Ø Stega igenom paren (xi yi), det finns fyra fall: o o ingen ändring, xi mindre än b men inte a xi mindre än båda men inte yi Båda nya mindre än de förra Ø Vi behöver bara ställa två frågor för att täcka alla 4 fallen o T(n) = 2(n/2 -l)+n/2 (sorteringen) -> T(n) = 3 n/2 Datastrukturer och algoritmer VT 2003 29 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Dynamisk programmering u Undviker problemet med söndra och härska, dvs att samma problem kan lösas flera gånger. u METOD: Ø Lös större och större problem tills man har löst sitt problem av storlek n, och använd information från föregångarna för i varje steg Ø Ställ upp en tabell som håller reda på redan kända lösningar. o o För varje nytt anrop kollar man om man redan löst det problemet och hämtar det Om inte löser man det och sätter in lösningen Datastrukturer och algoritmer i tabellen. VT 2003 30 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempel u l-dimensionell Øk! = fac(n) = l*2*3*…*n o rtnyttja att man vet (n-l)! när n! ska beräknas u Multi-dimensionell programmering dynamisk ØMatrisbaserad shortest path Ø 0 -l knap sack o eär får man alltså inte delar av elementen utan måste Datastrukturer och algoritmer ta allt på en gång. VT 2003 31 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Exempelproblem: u Du skapa ett program som spelar ett spel mot en person med följande regler. u Det ligger 30 tändstickor på bordet. Spelarna får plocka upp 1, 2, eller 3 tändstickor varje gång och spelet pågår tills den sista stickan plockas upp. Den som tar upp sista stickan förlorar. u Om datorn alltid får börja, hur ska den se till att den vinner? Datastrukturer och algoritmer VT 2003 32 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Vilken algoritm? u Brute-force ØTesta alla varianter och leta fram den bästa… u Giriga algoritmer ØHur vet man i varje steg vilken väg som är den bästa? u Divide and Conquer ØHur ska man dela upp? u Dynamisk programmering Datastrukturer och algoritmer VT 2003 33 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Dynamisk programmering Mot. Dator Kvar spelare 1 1 2 1 Ø Målet: Datorns sista drag ska lämna en sticka 1 kvar. 3 Ø Hur kan jag hamna i det läget? 1 u Vi 3 börjar med problemet nedifrån och upp. 2 o o o Mot. Dator Kvar Om motspelaren startar ett spel med bara 5 stickor: spelare OK, hur få motspelaren att hamna med 5 stickor? 3 1 5 – Se till att denne hamnar med 9 stickor! 2 2 5 Fortsätt tänka ”bottom-up” – 1, 5, 9, 13, 17, 21, 25, 29 1 3 5 – Alltså ska datorn alltid starta med att bara dra en sticka! Datastrukturer och algoritmer VT 2003 34 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Biologiskt insperade algoritmer u Evolutionär programmering Ø Genetiska algoritmer (Holland) Ø Genetisk programmering u Sociala algoritmer Ø Myralgoritmer Ø Flockalgoritmer Ø Foraging u Simulated annealing u u Datastrukturer och algoritmer VT 2003 35 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
- Slides: 35