Datastrukturer och algoritmer Föreläsning 15. Datastrukturer och algoritmer VT08 Innehåll  Vi har tittat på  Abstrakta datatyper oLista, Cell, Fält,

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
hej och välkomna EKVATIONER Ta reda på det okända talet.
Ruttplanering Vad är det??.
2D1311 Programmeringsteknik med PBL
Algoritmer och data strukturer -Länkade listor
Sökning och sortering Linda Mannila
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Logikprogrammering Ons, 25/9
OOP Objekt-orienterad programmering
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
Algoritmer och datastrukturer
Arv.
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.
Alice in Action with Java
i olika programmeringsspråk
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning l5 Abstrakta datatyper och algoritmdesign.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Programmering i C# 3. Klasser.
PROCESSPROGRAMMERING
Pathfinding. –Vad är det? –Sökning från A till B.
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
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmeringsteknik för Media1 & K1
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
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
Datastrukturer och algoritmer
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 16.
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
Problemlösning. Programmeringsmetaforer Instruktion Konstruktion Problemlösning Adaptation Demonstration.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
1 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
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ör utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd,
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
© 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.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
© 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 datastructurer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd.
Ruttplanering Vad är det??.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Föreläsning 8: Exempel och problemlösning
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

Datastrukturer och algoritmer Föreläsning 15

Datastrukturer och algoritmer VT08 Innehåll  Vi har tittat på  Abstrakta datatyper oLista, 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, …  Algoritmdesign oTraversering, Sökning, Sortering, Maximalt flöde, Minimalt uppspännande träd, Kortaste vägen etc oTids- och rumskomplexitet  Vad finns det för generella teorier?  Kapitel 9

Datastrukturer och algoritmer VT08 Abstrakta datatyper  Koncept för att diskutera och jämföra olika typer av datastrukturer.  Ligger på en hög abstraktionsnivå.  Främst intresserad av struktur och organisation, inte implementation.  Operationerna ger datatypen karaktär och specifikationen visar datatypens uttrycksfullhet.

Datastrukturer och algoritmer VT08 Operationskategorier (l)  Konstruktorer - skapar/bygger upp och returnerar ett objekt av aktuell ADT  Grundkonstruktorer osaknar argument av den aktuella ADT:n oEmpty, Make, Create  Vidareutvecklande konstruktorer oett argument av den aktuella ADT:n oList-Insert, Stack-Push  Kombinerande konstruktorer oflera argument av den aktuella ADT:n oSet-Union

Datastrukturer och algoritmer VT08 Operationskategorier (2)  Inspektorer - Undersöker ett objekts inre uppbyggnad på olika sätt  Avläsning/sondering av elementvärden eller strukturella förhållanden oInspect-value, Stack-Top, Table-Lookup, Set-Choose  Test av extremfall av struktur och värden oBinary-tree-has-left-child, Set-member-of  Mätning av objekt oIsempty, Has-value

Datastrukturer och algoritmer VT08 Operationskategorier (3)  Modifikatorer – Ändrar ett objekts struktur och/eller elementvärden  Insättning, borttagning, tilldelning, omstrukturering oArray-Set-Value, Table-Remove, Stack-Pop, Set-Insert  Navigatorer – Används för att ta fram ett objekts struktur  Landmärken (kända positioner), lokala förflyttningar, traverseringar oList-First, List-End, List-kext, Binary-tree-left-child  Komparatorer – jämför objekt av den aktuella ADTn med varandra  Equal, Set-Subset

Datastrukturer och algoritmer VT08 Uttrycksfullhet  Datatyp = objekt + operationer  Abstrakt datatyp = objekt + konstruktion av gränsytan.  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.  Kan jag göra det jag vill kunna göra med objekten??

Datastrukturer och algoritmer VT08 Uttrycksfullhet  Datatypsspecifikationen har två roller:  Beskriva vilka egenskaper datatypen har.  Vara en regelsamling för användningen av datatypen.  Specifikationens uttrycksfullhet kan mätas med tre begrepp:  Objektfullständighet  Algoritmfullständighet  Rik gränsyta

Datastrukturer och algoritmer VT08 Objektfullständighet  Svagaste kriteriet.  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  O l  O 2 …  O n (n  0) (I = Inspektor, O = Operation)  Om vi tittar på en tabell  Empty, Insert och Max (största definierade tabellvärdet) är inte objektfullständigt. Kan inte skilja på två tabeller med samma max-värde.  Empty, Insert och Lookup räcker!

Datastrukturer och algoritmer VT08 Algoritmfullständighet (Expressive completeness)  Starkare än (och implicerar) objektfullständighet.  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.  Räcker att visa att man kan implementera ett test av likhet mellan två dataobjekt med hjälp av operationerna. oVill man veta varför: Läs artikeln (Kapur, Srivas ”Computability and implementability issues in abstract data types”).  Alltså: Algoritmfullständighet = objektfullständighet + likhetstest

Datastrukturer och algoritmer VT08 Rik gränsyta (Expressive richness)  Starkaste kriteriet, implicerar både objektfullständighet och algoritmfullständighet.  Även om man har algoritmfullständighet så kan vissa algoritmer bli hopplöst ineffektiva.  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 VT08 Rik gränsyta – exempel  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 oplocka ut vart och ett av elementen i stacken ohitta strukturen, ordningen på dem outifrån detta kan stacken återskapas

Datastrukturer och algoritmer VT08 Praktisk uttrycksfullhet  Teoretiska mått på uttrycksfullhet  Objektfullständighet, algoritmfullständighet och rik gränsyta.  Måste man uppfylla alla tre kraven?  Ibland blir en rik gränsyta opraktisk, man saknar vissa operationer. oUtskrifter, längdfunktioner eller kopieringsfunktioner tex.  Hur skapar man en gränsyta?

Datastrukturer och algoritmer VT08 Att utforma en gränsyta  Utgå från de operationer som ger ADTn sin speciella karaktär.  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.  Detta ger en rätt stram yta med få operationer.

Datastrukturer och algoritmer VT08 Fördelar med en stram gränsyta  Utbytbarhet  Börja med enkla implementationer och sedan byta ut mot allt effektivare.  Portabilitet  Mindre problem att flytta ett program  Integritet  Mindre risk för att operationer läggs till som strider mot grundidén med ADTn.

Datastrukturer och algoritmer VT08 Programspråksstöd för ADTs  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. exception EmptyStack abstype 'a stack = Stack of 'a list with val emptyStack = Stack [ ] fun isEmptyStack (Stack S) = (S = [ ]) fun push (Stack S, v) = Stack (v::S) fun top (Stack [ ]) = raise EmptyStack | top (Stack (x::xs)) = x fun pop (Stack [ ]) = raise EmptyStack | pop (Stack (x::xs)) = Stack xs end

Datastrukturer och algoritmer VT08 Programspråksstöd för ADTs  Java  Man har ett interface eller en abstrakt klass som definierar ADTn.  Finns inget naturligt stöd för att ta bort/dölja vissa delar av gränsytan.  Före version  Skapar underklasser för olika implementationer av ADTn.  Utnyttjas Object kan elementen vara av olika typ.  Från och med 1.5 finns Generics

Datastrukturer och algoritmer VT08 Generisk Stack i Java public interface Stack { public boolean isEmpty(); public void push(E elem); public E top() throws EmptyStackException; public E pop() throws EmptyStackException; } public class EmptyStackException extends Exception{ public EmptyStackException(){ super(); } public EmptyStackException(String s){ super(s); }

Datastrukturer och algoritmer VT08 Generisk Stack i Java public class ArrayStack implements Stack { public static final int CAPACITY = 1000; private E stack[]; private int top = -1; public ArrayStack(){ stack = (E[])new Object[CAPACITY]; } public boolean isEmpty(){ return (top < 0); }

Datastrukturer och algoritmer VT08 Generisk Stack i Java public void push(E obj){ if ((top+1) < CAPACITY){ top = top + 1; stack[top] = obj; } public E top(){ return stack[top]; } public E pop(){ E elem; elem = stack[top]; stack[top] = null; top = top - 1; return elem; }

Datastrukturer och algoritmer VT08 Programspråksstöd för ADTs  Många språk ger mycket litet eller inget stöd alls. Då krävs:  Konventioner oNamngivning oOperationsval  God dokumentation av olika val som görs.  Disciplin oInte gå in och peta i interna strukturer

Datastrukturer och algoritmer VT08 Design av algoritmer  Problemlösningsstrategier  Top-down  Bottom-up  Typer av algoritmer (lösningstekniker)  ”Brute-force”  Giriga algoritmer (Greedy-algorithms)  Söndra och härska (Divide and Conquer)  Dynamisk programmering  Biologiskt inspirerade algoritmer

Datastrukturer och algoritmer VT08 Brute-force  Rättfram ansats, utgår direkt från problem-ställningen och de definitioner som finns där.  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  Bra metod att starta med  Garanterar en korrekt lösning om en sådan finns  MEN garanterar inte effektivitet…  Ofta väldigt enkla algoritmer

Datastrukturer och algoritmer VT08 Brute-force  Enda kända lösningen för många problem.  Ger ofta hög tillväxt på tidskomplexiteten  Speciellt för problem där antalet svar ökar snabbt med ökad problemstorlek  Naiva algoritmer går ofta att effektivisera  Avbryt sökningen när man nått en lösning oBättre med en lösning än den bästa.  Avbryt så fort man inser att vägen inte leder till en lösning

Datastrukturer och algoritmer VT08 Brute-force: Exempel  Linjär sökning  Söka det minsta talet i en lista  Antar att alla element är det lägsta  Kolla alla mot alla  Handelsresande problemet  Besöka alla städer bara en gång på minst kostsamma sätt

Datastrukturer och algoritmer VT08 Giriga (Greedy) algoritmer  METOD:  I varje steg titta på alla möjliga steg och välj den för tillfället bästa vägen.  Bra för optimeringsproblem  I många fall får vi optimal lösning med en greedy algoritm. oOm den optimala lösningen kan nås via stegvisa lokala förändringar av starten  Heuristisk metod vs. greedy  Garanti för optimal lösning  greedy  Bra alternativ till brute-force algoritmer

Datastrukturer och algoritmer VT08 Exempel på giriga algoritmer  Att lämna tillbaka växel  Minimalt antal mynt i växel  Ta alltid det största möjliga myntet i varje ”loop- varv”  Minimalt uppspänt träd  Kruksals algoritm  Prims algoritm  Diijsktras algoritm  Huffman-kodning

Datastrukturer och algoritmer VT08 ”The Fractional Knapsack Problem”  Givet, en mängd p med n element där element i har värde/förtjänst b i (benefit) > 0 och en vikt w i > 0  Mål: Välja element med maximal förtjänst utan att den totala vikten blir mer än den maximala vikten W.  I ”The Fractional Knapsack Problem” får man ta bitar av elementen (fractions).  Låt x i vara mängden vi tar av element i Maximera: med begränsningen:  Regel: För varje gång ta elementet med maximalt värde (förtjänst/vikten).  O(n log n)

Datastrukturer och algoritmer VT08

Datastrukturer och algoritmer VT08 Söndra och härska (Divide and Conquer)  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.  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)  O(nlogn) är vanligt  Merge-sort och Quick-sort  Kan ställa krav på implementering av ADT

Datastrukturer och algoritmer VT08 Ex: Finn 2 minsta elementen i en lista  Första försöket:  Sortera listan O(n log n)  Ta fram de två första elementen O(1)  Alternativ  Hitta en effektiv lösning på ett enklare problem o”lösa nästan rätt problem” vs ”lösa problemet nästan rätt” oEnklare att hitta bara det minsta elementet! O(n) –n-l jämförelser oKonvertera till originalproblemet. Vad får vi då? O(2*n)?  Hitta en ineffektiv lösning på originalproblemet

Datastrukturer och algoritmer VT08  Att hitta det första minsta värdet kostar n-l jämförelser.  Att hitta det näst lägsta andra varvet:  Om vi får förstöra data så swappa minsta elementet med första eller sista pos. aå hittar vi det näst minsta på n-2 jämförelser. on-l+n-2 = 2n-3  Annars måste vi hålla reda på vart det är. O(3n)  Leta båda två på en gång: n-2 iterationer  Tre fall i varje steg, ingen är större, mindre än båda, mindre än andra.  2n-3 jämförelser i värsta fallet, medelfallet bättre.

Datastrukturer och algoritmer VT08 Söndra och härska algoritm kanske?  Hur skall vi dela data?  Två halvor och söka efter minsta i båda halvorna? oDetta ger inte en korrekt lösning  Om vi sorterar båda halvorna och sedan i sammanslagningen hitta de två elementen då? oMerge-sort eller …? oIneffektiv för detta problem  Kan vi dela data på något annat sätt? oByta delnings faktor till 3, ger det något? Njet oMen ….

Datastrukturer och algoritmer VT08 Om vi delar upp listan i par  N/2 par, sortera dessa  Det första paret (a, b)  ”Conquer-fasen”  Stega igenom paren (x i y i ), det finns fyra fall: oingen ändring, ox i mindre än b men inte a ox i mindre än båda men inte y i oBåda nya mindre än de förra  Vi behöver bara ställa två frågor för att täcka alla 4 fallen oT(n) = 2(n/2-l)+n/2 (sorteringen) -> T(n) = 3n/2-2

Datastrukturer och algoritmer VT08 Dynamisk programmering  Undviker problemet med söndra och härska, dvs att samma problem kan lösas flera gånger.  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. oFör varje nytt anrop kollar man om man redan löst det problemet och hämtar det oOm inte löser man det och sätter in lösningen i tabellen.

Datastrukturer och algoritmer VT08 Exempel  l-dimensionell  k! = fac(n) = l*2*3*…*n oUtnyttja att man vet (n-l)! när n! ska beräknas  Multi-dimensionell dynamisk programmering  Matrisbaserad shortest path  0-l knapsack oHär får man alltså inte delar av elementen utan måste ta allt på en gång.

Datastrukturer och algoritmer VT08 Exempelproblem:  Du ska skapa ett program som spelar ett spel mot en person med följande regler.  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.  Om datorn alltid får börja, hur ska den se till att den vinner?

Datastrukturer och algoritmer VT08 Vilken algoritm?  Brute-force  Testa alla varianter och leta fram den bästa…  Giriga algoritmer  Hur vet man i varje steg vilken väg som är den bästa?  Divide and Conquer  Hur ska man dela upp?  Dynamisk programmering

Dynamisk programmering  Vi börjar med problemet nedifrån och upp.  Målet: Datorns sista drag ska lämna en sticka kvar.  Hur kan jag hamna i det läget? oOm motspelaren startar ett spel med bara 5 stickor: oOK, hur få motspelaren att hamna med 5 stickor? –Se till att denne hamnar med 9 stickor! oFortsätt tänka ”bottom-up” –1, 5, 9, 13, 17, 21, 25, 29 –Alltså ska datorn alltid starta med att bara dra en sticka! Mot- spelare DatorKvar Mot- spelare DatorKvar

Datastrukturer och algoritmer VT08 Biologiskt inspirerade algoritmer  Evolutionär programmering  Genetiska algoritmer (Holland)  Genetisk programmering  Sociala algoritmer  Myralgoritmer  Flockalgoritmer  Foraging  Simulated annealing

Grundidé  Grundstommen:  Population av individer och/eller lösningar  Fitness funktion som kan jämföra individer  Urvalsoperator  Mutation  Rekombination för att skapa nya individer

Datastrukturer och algoritmer VT08 Genetiska algoritmer  Utvecklades på 50-talet  Fokus på ”recombination”, dvs hur man skapar nya individer från gamla.  John Holland

Datastrukturer och algoritmer VT08 Evolutionära strategier  Utvecklades på 60-talet  Utveckling av flygplansvinge  Väljer individerna efter avkommorna skapats istället för innan.  Mutationen viktigare än i GA.

Datastrukturer och algoritmer VT08 Evolutionär programmering (Genetisk programmering)  Utvecklades på 60-talet, populärt på 80-talet  Har ingen ”recombination”-operator.  Ingen avkomma, bara mutationer

Datastrukturer och algoritmer VT08 Sociala algoritmer  Myralgoritmer  Myror markerar sin väg med fermoner.  När någon finner mat och tar den tillbaka till boet så markeras vägen.  Fler myror väljer samma väg.  Myrsamhället tillsammans finner den kortaste vägen med minst antal hinder. oKunskapen sitter i samhället inte i myran.