Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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.

Lignende præsentationer


Præsentationer af emnet: "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."— Præsentationens transcript:

1 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. MM3 Eksempler på algoritmer. fx. –Sortering. MM4 –Søgning. MM5 Af: Per Printz Madsen Hjemmeside: http://www.control.auc.dk/~ppm/E4kurser/Note/ Indhold:

2 28-03-2015Per 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

3 28-03-2015Per 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.

4 28-03-2015Per 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

5 28-03-2015Per 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);

6 28-03-2015Per 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.

7 28-03-2015Per 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.

8 28-03-2015Per 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.

9 28-03-2015Per P. Madsen- Proces9 Algoritmiske grundprincipper Iteration Rekursion Induktion

10 28-03-2015Per 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

11 28-03-2015Per 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 }

12 28-03-2015Per P. Madsen- Proces12 F(4)

13 28-03-2015Per 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.

14 28-03-2015Per 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); }

15 28-03-2015Per 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); }

16 28-03-2015Per 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); }

17 28-03-2015Per 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); }

18 28-03-2015Per 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); }

19 28-03-2015Per 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); }

20 28-03-2015Per 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); }

21 28-03-2015Per 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.

22 28-03-2015Per 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 }

23 28-03-2015Per 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.

24 28-03-2015Per 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

25 28-03-2015Per 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

26 28-03-2015Per 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)

27 28-03-2015Per 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)

28 28-03-2015Per 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.

29 28-03-2015Per 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 ):


Download ppt "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."

Lignende præsentationer


Annoncer fra Google