Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "1 Nordjyllands Erhvervakademi - 2006 Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte."— Præsentationens transcript:

1 1 Nordjyllands Erhvervakademi - 2006 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 2 Nordjyllands Erhvervakademi - 2006 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 3 Nordjyllands Erhvervakademi - 2006 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 4 Nordjyllands Erhvervakademi - 2006 Forskellige kompleksiteter

5 5 Nordjyllands Erhvervakademi - 2006 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å http://cg.scs.carleton.ca/~morin/misc/sortalg/

6 6 Nordjyllands Erhvervakademi - 2006 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 7 Nordjyllands Erhvervakademi - 2006 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 8 Nordjyllands Erhvervakademi - 2006 Effektivitet: O(n 2 ) (O. Astrachan: ”Bubble Sort: An Archaeoloical Algorithmic Analysis.” SIGCSE’03 Proceedings Sortering af store strenge

9 9 Nordjyllands Erhvervakademi - 2006 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 10 Nordjyllands Erhvervakademi - 2006 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 11 Nordjyllands Erhvervakademi - 2006 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 12 Nordjyllands Erhvervakademi - 2006 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 13 Nordjyllands Erhvervakademi - 2006 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 14 Nordjyllands Erhvervakademi - 2006 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 15 Nordjyllands Erhvervakademi - 2006 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 16 Nordjyllands Erhvervakademi - 2006 Abstrakte datatyper ADT’ere er ofte en indkapsling af datastrukturer: –arrays –kædede lister –træer –med mange flere

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

18 18 Nordjyllands Erhvervakademi - 2006 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 19 Nordjyllands Erhvervakademi - 2006 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 20 Nordjyllands Erhvervakademi - 2006 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 21 Nordjyllands Erhvervakademi - 2006 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 22 Nordjyllands Erhvervakademi - 2006 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 23 Nordjyllands Erhvervakademi - 2006 Implementation of the ADT stack that use a) an array; b) a linked list; c) an ADT list

24 24 Nordjyllands Erhvervakademi - 2006 Eksempel på brug af en stak

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

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

27 27 Nordjyllands Erhvervakademi - 2006 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 28 Nordjyllands Erhvervakademi - 2006 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 29 Nordjyllands Erhvervakademi - 2006 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.


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

Lignende præsentationer


Annoncer fra Google