28-03-2015Per P. Madsen- Proces1 Algoritmer og datastrukturer Grundprincipper og analyse af algoritmer. MM1 Lister, stakke og køer. MM2 Træer, og Hash-tabeller.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
1 Rekursion og algoritmedesign. 2 Rekursion Rekursiv definition af X: X defineres i termer af sig selv. Rekursion er nyttig, når en generel version af.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
1 Nordjyllands Erhvervakademi Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte.
Datastruktur & Algoritmik1 Datastruktur & Algoritmik 99 Kim Guldstrand Larsen.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
MM4 Algoritmiske grundprincipper. MM1 Lister, stakke og køer. MM2 Hash-tabeller og Træer. MM3 Sortering.MM4 Søgning.MM5.
GP12, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 12 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Anvendelser I Leg og spil.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel 2.3, , problem 30.1.c] Gerth Stølting Brodal.
1 Algoritmik ved Keld Helsgaun. 2 Plan Algoritmebegrebet et simpelt eksempel Et eksempel på algoritmedesign.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
W1b1 PC baseret analyse og simulering. w1b2 Definition Digital Elektronisk beregningsmaskine, der har intern hukommelse til lagring af program og mellem-regninger.
Lektion 7 Læsestof: Kopier fra Caranno
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Fundamentale datastrukturer
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
Design, verifikation og analyse
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
Ingeniørhøjskolen i Århus Slide 1 Newton approximation ”Oversæt” til algoritme - Step 5: Skriv kode - Step 4: Skriv pseudokode - Step 3: Specificér pre-
FEN IntroJava AAU1 Loops og algoritmer Sweep – for-loop Søgning – while-loop.
Proces og projekt metrikker. Proces metrikker er metrikker målt henover alle projekter og over lange tidsperioder Projekt metrikker er metrikker der bruges.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
Eksempler på en beregningsprocess… Puslespil ved ombytninger Maximum delsum.
Anvendelser I Leg og spil.
Per Printz Madsen 1 Linux kernen Monolithic kernel Support for dynamiske moduler Få kerne tråde Preemptive.
Grundlæggende programmering Forår 2002
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Algoritmer og Datastrukturer 1 ”Rush Hour” Gerth Stølting Brodal.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering9B.1 Fletning.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
DAIMIIntroducerende objektorienteret programmeringfletning.1 Fletning.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Algoritmer og Datastrukturer 2
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 2
Grundlæggende Algoritmer og Datastrukturer
Præsentationens transcript:

Per P. Madsen- Proces1 Algoritmer og datastrukturer Grundprincipper og analyse af algoritmer. MM1 Lister, stakke og køer. MM2 Træer, og Hash-tabeller. MM3 Eksempler på algoritmer. fx. –Sortering. MM4 –Søgning. MM5 Af: Per Printz Madsen Hjemmeside: Indhold:

Per P. Madsen- Proces2 Datastruktur Datastruktur: En organisering af data, ofte anvendt af en algoritme. Fx: Lister, linkede-lister, stakke, køer, træer, hash- tabeller og grafer. Ved valg af datastruktur bør overvejes: –Effektivitet –Abstraktion –Genbrug

Per P. Madsen- Proces3 Abstrakt datatype En datastruktur med tilhørende operationer. Ideen er, at der fokuseres på anvendelsen af data og ikke på implementationen. Definition: A set of data values and associated operations that are precisely specified independent of any particular implementation. –Datastruktur fx. en liste. –Metoder fx. insert, delete, find osv.

Per P. Madsen- Proces4 #include ”list.h” typedef struct DataElm_ { void *Data; } DataElm; static DataElm list[ListSize]; void init_list() { int index; for(index= 0; index < ListSize; index++) list[index].Data= (void *)0; } int insert_data(void *data) { int index=0; while ((list[index].Data != 0) && (index < ListSize)) ++index; list[index].Data= data; return (index < ListSize) ? index : ListFull; } Simpel list eksempel: list.c

Per P. Madsen- Proces5 Interface: list.h #define ListFull -1 #define ListSize 10 void init_list(); int insert_data(void *data); void delete_data(int index); int find_data(void *data);

Per P. Madsen- Proces6 Algoritmer Algoritme: En veldefineret opskrift på at løse en opgave. Opgave/ProcesAlgoritmeTypisk trin At bygge et modelflyBrugsanvisningLim stang 1 sammen med plade 2 At bage en kageOpskriftTag 3 kg mel og hæld i en skål At spilleNoder på et nodeblad Omsætte noder til toner vha et instrument.

Per P. Madsen- Proces7 Algoritmer Algoritme: En procedure for løsning af en opgave. Fx: Søgning, sortering, komprimering, kryptering, beregning, osv. Ved opbygning af algoritmer bør overvejes: –Effektivitet –Hvis generel anvendelse så også abstraktion.

Per P. Madsen- Proces8 Grundlæggende algoritmer. En god algoritme anvender de rigtige metoder til at løse en opgave. Med ”rigtig metode” menes der her ”mest effektive metode” Grundlæggende metoder: Divide-and-conquer algoritmer. –Baseret på deling i håndterbare og uafhængige størrelser, der hver især kan håndteres og sammensættes igen. Ofte rekursiv. Dynamisk-programmering algoritmer. –Problemløsningen deles i afhængige delproblemer. Greedy algoritmer. –Lokaloptimering. Approximations algoritmer. –En iterativ søgning efter en ”god nok” løsning. Randomized eller Probabilistic algoritmer. –Baseret på statistiske egenskaber ved tilfældige tal.

Per P. Madsen- Proces9 Algoritmiske grundprincipper Iteration Rekursion Induktion

Per P. Madsen- Proces10 Iteration En gentagen udførelse af samme trin. Fx: Find minimum af en funktion. Start et sted: x Gentag mange gange { Find gradienten: g x= x – A*g : hvor A er et lille tal. } xx ny

Per P. Madsen- Proces11 Recursion Fakultet: n!= n*(n-1)*(n-2)*..... * 1 Iterativ: F(n) { res=1; Gentag sålænge n >1 { res= res*n; n= n - 1; } return res; } n!= F(n)= { 1 for n= 0, 1 n*F(n-1) for n > 1 Rekursion : F(n) { Hvis n >1 return n*F(n-1); else return 1 }

Per P. Madsen- Proces12 F(4)

Per P. Madsen- Proces13 Recursion Regel 1 Enhver rekursiv procedure skal ha’ en slutbetingelse hvor der ikke foretages rekursion. Regel 2 Rekursive procedurer skal bevæge sig hen mod slutbetingelsen.

Per P. Madsen- Proces14 Recursion Buffer ’o’ PC o til buffer ’r’ PC r til buffer ’d’ PC d til buffer ’_’ PC 0 til buffer Stak Tekst: ”ord_tal....” char buf[80]; int i; putbuf(char ch) { buf[i++]= ch; } void nextWord() { char ch= getCh(); if (('a‘ < ch)&&(ch < 'z')) { putbuf(ch); nextWord(); } else putbuf(0); }

Per P. Madsen- Proces15 Recursion ’o’ PC ’r’ PC ’d’ PC ’_’ PC Stak ”ord\0” char buf[80]; int i; putbuf(char ch) { buf[i++]= ch; } void nextWord() { char ch= getCh(); if (('a‘ < ch)&&(ch < 'z')) { putbuf(ch); nextWord(); } else putbuf(0); }

Per P. Madsen- Proces16 Recursion ’o’ PC ’r’ PC ’d’ PC Stak ”ord\0” char buf[80]; int i; putbuf(char ch) { buf[i++]= ch; } void nextWord() { char ch= getCh(); if (('a‘ < ch)&&(ch < 'z')) { putbuf(ch); nextWord(); } else putbuf(0); }

Per P. Madsen- Proces17 Recursion ’o’ PC ’r’ PC Stak ”ord\0” char buf[80]; int i; putbuf(char ch) { buf[i++]= ch; } void nextWord() { char ch= getCh(); if (('a‘ < ch)&&(ch < 'z')) { putbuf(ch); nextWord(); } else putbuf(0); }

Per P. Madsen- Proces18 Recursion ’o’ PC Stak ”ord\0” char buf[80]; int i; putbuf(char ch) { buf[i++]= ch; } void nextWord() { char ch= getCh(); if (('a‘ < ch)&&(ch < 'z')) { putbuf(ch); nextWord(); } else putbuf(0); }

Per P. Madsen- Proces19 Recursion Stak ”ord\0” char buf[80]; int i; putbuf(char ch) { buf[i++]= ch; } void nextWord() { char ch= getCh(); if (('a‘ < ch)&&(ch < 'z')) { putbuf(ch); nextWord(); } else putbuf(0); }

Per P. Madsen- Proces20 Rekursion double power(double number, int pow){ if (pow == 0) return 1.0; else if (pow > 0) return number * power(number, pow - 1); else return 1.0 / power(number, -pow); }

Per P. Madsen- Proces21 Induktion Ofte brugt til at give formelt bevis for en algoritmes korrekthed. Princip: 1.P(0) er korrekt. 2.For n >= 0: Hvis P(n) er korrekt, så er P(n+1) også korrekt.

Per P. Madsen- Proces22 Recursion n!= F(n)= { 1 for n= 0, 1 n*F(n-1) for n > 1 F(n) { Hvis n >1 return n*F(n-1); else return 1 }

Per P. Madsen- Proces23 Analyse af algoritmer Dvs. analyse af hvordan en algoritme performer mht brug af resurser almenligvis CPU-tid. Complexitet: Udviklingstakten for tidsforbrug mht. datamængden. Emne: O-notation. En formel metode til at beskrive en algoritmes complexitet.

Per P. Madsen- Proces24 O-Notation Problemet: Hvor hurtigt vokser afviklingstiden for en given algoritme, når den mængde data, der skal proceseres, vokser. Givet at afviklingstiden f(n), hvor n er datamængden. hvis f(n)= a*n + b*n c og n >> 1 Så er f(n)~ n den interessante del. p p-1p

Per P. Madsen- Proces25 O-Notation Formelt: O(T(n))={f(n): Der eksisterer en positiv konstant C og n0 således at: 0 = n0}; C*T(n) f(n) n0 n

Per P. Madsen- Proces26 O-Notation Regneregler: Konstantled: O(c) = O(1) Multiplicer med en konstant: O(cT) = cO(T) = O(T) Sum: O(T1) + O(T2) = O(T1 + T2) = max(O(T1), O(T2)) Multiplikation: O(T1)O(T2) = O(T1*T2)

Per P. Madsen- Proces27 O-Notation c1 c2 c3 c4 c5 n gange f(n) = c1 + c2 + n(c3 + c4) +c5 Dvs: T(n)= n; Dvs. komplexiteten: O(n)

Per P. Madsen- Proces28 O-Notation Eksempler på alm. forekommende komplexiteter: O(1): Hent et element, man ved hvor er. O(log2(n)): Find et element i et binærtræ. O(n): Find et element i en liste. O(n 2 ): Gennemsøg et sæt af data for hvert element i et sæt. O(2 n ): Generer alle subsæt af et givet datasæt. O(n!):Generer alle mulige permutationer af et sæt.

Per P. Madsen- Proces29 O-Notation void bubbleSort() { int out, in; // c1 for(out=nElems-1; out>1; out--) // outer loop for(in=0; in<out; in++) // inner loop if( a[in] > a[in+1] ) // out of order? swap(in, in+1); // swap them. c2 } // c3 Løkke inden i løkke: f(n) = c1 + ((n-1)(n-1)/2)c2 +c3 = c1+c3+ ((n 2 - 2n+1)/2)c2 => O(n 2 ):