1 Nordjyllands Erhvervakademi - 2006 Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte.

Slides:



Advertisements
Lignende præsentationer
Flugtveje. Problemanalyse Hvordan finder man optimale flugtveje? Hvordan kan man finde optimale flugtveje ved hjælp af grafteori? Hvordan kan vores optimale.
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.
Algoritmer og Datastrukturer 1 Merge-Sort [CLRS, kapitel 2.3] Heaps [CLRS, kapitel 6] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 1...mere Sortering [CLRS, kapitel 8] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
Rekursion og rekursive algoritmer Rekursion Sorteringsalgoritmer Forklaring af sorteringsalgoritmer Rasmus D. Lehrmann1.
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.
Søgning & sortering Intro 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.
Induktion og rekursion
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 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...mere Sortering [CLRS, kapitel 8] Gerth Stølting Brodal.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
Algoritmer og Datastrukturer 1 Merge-Sort [CLRS, kapitel 2.3] Heaps [CLRS, kapitel 6] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
1 Søgning I. 2 Plan Sekventiel søgning Binær søgning Binære søgetræer Balancerede binære søgetræer træer.
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
Algoritmer og Datastrukturer 1...mere Sortering [CLRS, kapitel 8] Gerth Stølting Brodal Aarhus Universitet.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel 2.3, , problem 30.1.c] Gerth Stølting Brodal.
1 Rekursion og algoritmedesign. 2 Rekursion Matematisk induktion Rekursion Simple eksempler Kryptering Plan Designmetoder Del-og-hersk Dynamisk programmering.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Per P. Madsen- Proces1 Algoritmer og datastrukturer Grundprincipper og analyse af algoritmer. MM1 Lister, stakke og køer. MM2 Træer, og Hash-tabeller.
1 Algoritmisk geometri. 2 Intervalsøgning 3 Motivation for intervaltræer Lad der være givet en database over ansatte i en virksomhed Alder Løn Ansættelsesdato.
Design, verifikation og analyse
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-
Grafalgoritmer II.
1 Sortering II. 2 Plan Avancerede sorteringsmetoder: Metoder med kompleksitet O(n logn): - Quicksort (ekskurs: udvælgelse) - Sortering ved fletning
FEN IntroJava AAU1 Loops og algoritmer Sweep – for-loop Søgning – while-loop.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
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.
Algoritmer og Datastrukturer 1 Quicksort [CLRS, kapitel 7] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 1 Quicksort [CLRS, kapitel 7] Gerth Stølting Brodal Aarhus Universitet.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
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 Analyseværktøjer [CLRS, 1-3.1]
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
Rekursion 2.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.2 Introduktion Vi har tidligere set eksempler på rekursive.
Sortering.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSortering.2 Sortering Vi hartidligere set at effektiv søgning forudsætter.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14B.1 Sortering.
I o p o DAIMI, AU, November 1999Introducerende objektorienteret programmering9D.1 Del, løs og kombinér.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Del, løs og kombinér Et algoritmemønster.
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
”Sådan bruger du digital post”
Algoritmer og Datastrukturer 2
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 2
Algoritmer og Datastrukturer 1
Grundlæggende Algoritmer og Datastrukturer
Grundlæggende Algoritmer og Datastrukturer
Præsentationens transcript:

1 Nordjyllands Erhvervakademi Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte datatyper –ADT’en SeqInt –Realisering i C#: ArrayList –Stak og Kø

2 Nordjyllands Erhvervakademi Del og Hersk algoritmer proc DivCon(in P: Problem; out S: Solution) if P er simpel then Simpel(P, S) else Divide(P, P1, P2) DivCon(P1, S1) DivCon(P2, S2) Combine(S, S1, S2) endif endproc DivCon

3 Nordjyllands Erhvervakademi Kompleksitet Formålet med kompleksitetsteori er at undersøge en metodes (eller algoritmes) tids- og/eller pladsforbrug Normalt er man interesseret i –worst-case (lettere at undersøge) –grove vurderinger En metodes tidsforbrug angives vha. store-O: –O(f(n)) n er størrelsen af input, f er en funktion, som angiver algoritmens effektivitet som funktion af n, fx log(n). –store O: er asymptotisk (kun for tilpas store værdier af n) –store O ser kun på mest betydende led –store O: se bort fra konstanter

4 Nordjyllands Erhvervakademi Forskellige kompleksiteter

5 Nordjyllands Erhvervakademi Sorteringer Simple (dvs. Ikke-rekursive O(n 2 )): –Bubble-sort –Insert-sort –Selection-sort Avancerede (dvs rekursive O(nlogn)): –Merge-sort –Quick-sort Se også

6 Nordjyllands Erhvervakademi MergeSort proc mergeSort(inout v: vector; in l, u: int) pre true post segmentet v[l..u] er sorteret i voksende orden if l<u then m:= (l+ u) div 2 mergeSort(v,l,m) mergeSort(v,m+1,u) merge(v,l,m,u)-- udfører total fletning på v[l..m] og -- v[m+1..u] ogreturnerer v fi endproc mergeSort source

7 Nordjyllands Erhvervakademi QuickSort proc quickSort(inout v: vector; in l, u: int) pre true post segmentet v[l..u] er sorteret i voksende orden if l<u then p:= -- et eller andet pivotindex -- opdel v omkring p, så alle elementer i v[l..p-1] er mindre -- end ethvert element i v[p+1..u] quickSort(v,l,p-1) quickSort(v,p+1,u) fi endproc quickSort

8 Nordjyllands Erhvervakademi Effektivitet: O(n 2 ) (O. Astrachan: ”Bubble Sort: An Archaeoloical Algorithmic Analysis.” SIGCSE’03 Proceedings Sortering af store strenge

9 Nordjyllands Erhvervakademi Effektivitet mergeSort: –O(n log n) i worst case –O(n) ekstra lager –større overhead end quickSort i gennemsnit quickSort: –i gennemsnit: O(n log n) (worst case O(n 2 ) - ved bla. sorteret input) ekstra lager: O(log n) (O(n) i worst case) –mindre sandsynlighed for worst case: vælg pivot: ”mean of three” (eller medianen)

10 Nordjyllands Erhvervakademi Del og Hersk og Effektivitet Effektiviteten af del og hersk strategien afhænger bla. af hvordan problemet deles: –Binær søgning: halvdelen af problemet smides væk hver gang – O(log n) –MergeSort: deler i to delproblemer, som hver er halvt så store som det oprindelige – O(nlogn) –Fibonacci-tal eller Hanoi’s tårne: deler i to delproblemer, som er næsten lige så store som det oprindelige problem (n-1) – O(2 n ) Endvidere overhead til rekursive kald og rekursionsstak

11 Nordjyllands Erhvervakademi Datastrukturer - ADT En datastruktur er en systematisk måde at organisere en mængde af data på. –Array – statisk –Kædet liste – dynamisk –Træstruktur – oftest dynamisk Datastrukturer har brug for en række algoritmer til indsættelse, sletning, søgning af data Den samme mængde data kan ofte repræsenteres af forskellige datastrukturer

12 Nordjyllands Erhvervakademi Datatyper En datatype er karakteriseret ved: –Værdimængde (Hvilke værdier kan typen indeholde?) –Datarepræsentation (Hvordan repræsenteres datatypen i hukommelsen) –Operationer (Hvilke operationer er lovlige at udføre på elementer af datatypen?) Alle programmeringssprog tilbyder indbyggede datatyper – værdier, datarepræsentation og lovlige operationer defineres af sproget. OOPLs mfl. Tilbyder typekonstruktører som fx class Alle variable erklæres af programmøren som tilhørende en type (som regel ikke i Scriptsprog). Compileren til de fleste sprog undersøger om man bruger lovlige operationer.

13 Nordjyllands Erhvervakademi Abstrakte datatyper (ADT) En ADT er karakteriseret ved: –Værdimængde –Operationer Som før, bortset fra at datarepræsentationen nu er private. Dvs. vi kan kun tilgå data gennem de tilknyttede operationer (dvs. den kaldende kode er løst koblet til datarepræsentationen). En ADT skal have en tilhørende specifikation, dvs. en præcis beskrivelse af værdimængde og operationer. Implementeres uden at kende brugen – bruges uden at kende implementationsdetaljer – en kontrakt definerer interfacet. Indkapsler ofte en datastruktur

14 Nordjyllands Erhvervakademi Design af ADT’er En godt designet ADT tilbyder nødvendige og tilstrækkelige operationer: –ADT’en skal tilfredsstille alle de krav der stilles til den –Hvis nogle operationer på tilstrækkeligt let vis kan implementeres vha. de øvrige operationer, skal de undlades Overflødige operationer er altid en hårfin balance, mellem ADT’ens kompleksitet (vedligeholdesomkostninger) og hvor meget lettere det bliver for brugeren af ADT’en ADT’er i System.Collections har mange overflødige operationer

15 Nordjyllands Erhvervakademi Dataabstraktion: Adskillelse af –hvad man kan gøre ved en samling af data (interface) fra –hvordan man gør det (class) (Anvendelse af et generelt SE-princip: Separation of Concerns) Hvad indebærer specifikation af en abstrakt datatype Hvordan indebærer valg af en datastruktur og implementering af operationer ved passende algoritmer

16 Nordjyllands Erhvervakademi Abstrakte datatyper ADT’ere er ofte en indkapsling af datastrukturer: –arrays –kædede lister –træer –med mange flere

17 Nordjyllands Erhvervakademi Figure 3.7 ADT operations provide access to a data structure ADT: spec Realisering: DS+alg. interface class

18 Nordjyllands Erhvervakademi ADT: Sekvens – eller (ordnet liste) Positionsbaseret, dvs. elementerne står i en eller anden rækkefølge, de kan indekseres (jf. arrays) Fx SeqInt sekvens af heltal: [1, 3, 5] [1, 5, 3] [-1, 34, 56] [1] [2, 65, 8, 999, 434, 0, 12, 1, -5, 78, 9] [] (en tom sekvens, men dog stadig en sekvens).

19 Nordjyllands Erhvervakademi Operationer på SeqInt Opret en tom sekvens Tilføj element sidst i sekvensen (Add) Indsæt element på en bestemt plads (Insert) Slet element på en bestemt plads (RemoveAt) Aflæs eller ændrer værdien på en bestemt plads (…[ ]) Aflæs sekvensens størrelse Og mange flere… Er dette præcist nok???

20 Nordjyllands Erhvervakademi public interface ISequenceOfAnsat { void insert( int i,Ansat a); //Pre: 0 <= i <= length() //Post: a er indsat på den i'plads i sekvensen og efterfølgende // elementer er flyttet til plads+1 Ansat inspect(int i); //Pre: 0 <= i < length() //Post: værdien af elementet på den i'te position returneres void update(int i, Ansat a); //Pre: 0 <= i < length() //Post: elementet på den i'te plads er overskrevet med a void remove(int i); //Pre: 0 <= i < length() //Post: elementet på den i'te plads er slettet og efterfølgende //elementer er flyttet til plads-1 int length(); //Pre: none //Post: antallet af elementer i sekvensen returneres } Er dette præcist nok???

21 Nordjyllands Erhvervakademi I C#: ArrayList eller List ArrayList s= new ArrayList(); // List s.Clear(); s.Insert(i,e); s.RemoveAt(i); s.Add(e); s.Count; //s[i]: Elementtype x= s[i]; s[i]= x; Kun hvis s er en List. Ellers eksplicit cast

22 Nordjyllands Erhvervakademi Stak Dataelementerne kan kun tilgås fra toppen Kendes også som en Last-In-First-Out (LIFO) Krav til en stak: –Skal kunne tilføje et element til (toppen af) stakken: void Push(Object) –Skal kunne fjerne et element fra (toppen af) stakken Object Pop() –Skal kunne teste om den er tom boolean IsEmpty() –Skal kunne tilgå øverste element uden at fjerne det Object Peek()

23 Nordjyllands Erhvervakademi Implementation of the ADT stack that use a) an array; b) a linked list; c) an ADT list

24 Nordjyllands Erhvervakademi Eksempel på brug af en stak

25 Nordjyllands Erhvervakademi Kø: Operationer: –create –isEmpty –deQueue –enQueue –peek ???

26 Nordjyllands Erhvervakademi Array-realisering af køen I stedet cirkulær kø (buffer): back flytter til 0

27 Nordjyllands Erhvervakademi Stak og Kø i.NET Stack Queue I System.Collections Stack s = new Stack(); for (int i = 0; i < 10; i++) s.Push(i); while (s.Count > 0) System.Console.WriteLine(s.Pop()); Queue q = new Queue(); for (int i = 0; i < 10; i++) q.Enqueue(i); while (q.Count > 0) System.Console.WriteLine(q.Dequeue());

28 Nordjyllands Erhvervakademi Stak og Kø i.NET 2 og højere: Nu med typesikkerhed Stack Queue I System.Collections.Generic Stack s = new Stack (); for (int i = 0; i < 10; i++) s.Push(i); while (s.Count > 0) System.Console.WriteLine(s.Pop()); Queue q = new Queue (); for (int i = 0; i < 10; i++) q.Enqueue(i); while (q.Count > 0) System.Console.WriteLine(q.Dequeue());

29 Nordjyllands Erhvervakademi Opgave Specificér en ADT: deque ( en kø med to ender: på engelsk: double-ended queue, eller "deque" - udtales "dæk"). En deque har følgende operationer: public interface IDeque { void InsertFirst(Object e); void InsertLast(Object e); Object RemoveFirst(); Object RemoveLast(); bool IsEmpty(); } Skriv pre- og post-betingelser, som præcist specificerer ADT’en. (Overvej fordele og ulemper ved forskellige datastrukturer (array eller kædede) til implementering af). Skriv en klasse, som implementerer dit interface. Skriv et testprogram. Lav en typesikker version.