Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.

Slides:



Advertisements
Lignende præsentationer
1 Ekstern sortering. 2 (sortering på eksterne lagermedier) Særlige hensyn: (1) Det er tidsmæssigt dyrt at tilgå et dataelement (2) Der er begrænsninger.
Advertisements

Formularer (Access, del 3)
Søgning & sortering Intro søgning Lineær søgning Binær søgning
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
Begreber og Redskaber 7. Plan for idag Sorteringsalgoritmer Logaritmer,tabeller,køretid Simpelt iterativt: udvalgssortering Rekursivt: Flette sortering.
Datastrukturer og Collections Rasmus D. Lehrmann DM
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.
Begreber og Redskaber 6. Plan for idag Tabeller Udvalgssortering, køretid Lidt mere om objekter Budskab: Køretid kan være et problem og bør løses med.
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.
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
Fundamentale datastrukturer
1 Sortering. 2 Plan Elementære metoder til sortering -sortering ved indsættelse -Shellsort Sorteringsmetoder baseret på rekursion –quicksort –flettesortering.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
GP8, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 8 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
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.
1 Sortering. 2 Plan Elementære metoder til sortering -sortering ved indsættelse -Shellsort Sorteringsmetoder baseret på rekursion –quicksort –flettesortering.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Grundlæggende programmering Forår 2002
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.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
Sortering.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSortering.2 Sortering Vi hartidligere set at effektiv søgning forudsætter.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14B.1 Sortering.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
dagsorden Metoder i samfundsfag – hvorfor?
Trigonometri som værktøj for problemløsninger ved geometri og måling
Hvilke sager ligger der på vejlederkonsulentens bord for tiden?
C4 C4 i Hillerød Erhverv Handel Turisme, kultur, sport Uddannelse
Amukurs.dk Power point 1: Online præsentation af amukurs.dk - Sådan gør du: Læs ”Værd at vide, når du skal give en online præsentation af amukurs.dk”
Mit liv - nu med DAT MIT LIV - nu med DAT.
SOPU Sund – motion Kondition og kredsløb.
Tema 5: Relationer og kommunikation Psykoedukation til patienter med emotionel ustabil personlighedsforstyrrelse.
Modulet International Projektudvikling og –Ledelse
Hvor går de unge hen, når de går ud?
Det danske ejendomsmarked
Bevis for længdeformlen i rummet
3d Billeddata (Side i artiklen: 2. Repræsentation og manipulation af Data)
August, Holm, Olsen, Tobias og Viktor
Lokale lønforhandlinger
Rullede deje.
Skrivedag 2: At skrive analyserende
Fremme af LGBTI-personers ligestilling i Den Europæiske Union
Kort-sitet Med alle relevante temaer fra Kommuneplanen
Grundlæggende Algoritmer og Datastrukturer
Sejlklubben Sundet og Svanemøllehavnen
Nyt dagtilbud på Værebrovej 49 Planlægning og proces
Hvem bestemmer dine valg? Tobaksforebyggelse i Sønderborg Kommune
Model og Tilgang strategi på det specialiserede voksenområde
             Økonomi Årsmøde på DBI 8. april 2019.
Der er en forsoner Jesus Krist Guds søn. Han er hellig og retfærdig
Bruttoliste for Interessentanalyse GD1
En sundheds-aktivitet der henvender sig til de unge
Kompendium: Scenarier - Øvelseskoncept for strategiske krisestabe
Videncenter for Velfærdsteknologi Vest Læringscenter
Introduktion til CE-mærkning
Grundlæggende Algoritmer og Datastrukturer
[Dette oplæg indeholder udvalgte centrale budskabet fra informationsmaterialet om brug af lægemidler til personer med demens. Materialet er udarbejdet.
Op, al den ting, som Gud har gjort 1, S1
Præsentationens transcript:

Begreber og Redskaber 8

Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning

Udvalgssortering Find mindste og sæt på første plads Find næstmindste og sæt på anden plads Osv. Kompleksitet: O(n 2 ) Dvs køretid er ca k * n 2 hvor n er længden af tabellen og k er en konstant der bl.a. afhænger af maskinens hastighed

Flettesortering Bliv ved med at dele tabellen op i mindre dele til delene kun er et felt langt. Alle delene er så sorteret! Bliv ved med at flette de enkelte dele sammen til man har flettet det hele. Kompleksitet: O(n * log 2 (n)) Man kan halvere en tabel log 2 (n) gange Fletning er lineær i tid

Bedst opnåelige Antal måder en tabel kan være usorteret på: n! = 1 * 2 * 3 *.. * n F.eks. ”tea”: ”tea” ”tae” ”eta” ”ate” ”eat” ”aet” En sortering skal stille nogle ja/nej spørgsmål for at finde ud af hvordan tabellen er usorteret på: Bedste måde at spørge på halverer mulighederne, dvs Bedste sortering kan nøjes med log 2 (n!) sammenligninger

Eksperiment: antal ”<” N=længdeUdvalg- sortering Flette- sortering Javas sortering log2(n!)

Sortering i Java F.eks import java.util.*; int[] tabel=new int[1000]; Arrays.sort(tabel); Sortering med en algoritme kaldet ”Shellsort” Lidt flere sammenligninger, men til gengæld nogle færre flytninger

Comparable class Person implements Comparable{ public int compareTo(Object other){ if(! (other instanceof Person))return -1; Person p = (Person) other; if(this.xxx < p.xxx) return -1; if(this.xxx > p.xxx) return 1; return 0; } … eller et andet indhold i sammenligningen Comparable[] tabel=new Person[1000]; eller Person[] tabel=new Person[1000]; … Arrays.sort(tabel);

Søgning Lineær søgning: Start fra en ende af og led…. Findes et heltal på en liste af heltal? For eksempel findes 17 i listen [11, 9, 17, 5, 12] men ikke i [14, 2, 4, 19, 3] Ved lineær søgning findes svaret ved at gennemløbe hele listen

Program til lineær søgning public static int search(int[] a, int v){ for (int i=0; i<a.length; i++){ if (a[i]==v) return i; } return -1; } Hvis det søgte tal ikke findes returneres -1

Binær søgning Hvis det man søger i er sorteret er det nemmere Led efter 400 i [5, 14, 32, 43, 76, 100, 104, 115, 176, 290, 400, 511, 945] Kig i midten: 104 Det er mindre end 400 så kig i anden halvdel: [115, 176, 290, 400, 511, 945] Kig i midten: 290 Det er mindre end 400 så kig i anden halvdel: [400, 511, 945] Kig i midten: 511 Det er større end 400 så kig i første halvdel: [400]BINGO

Binær søgning – med while static int search(Comparable tb[], Comparable x) { int from=0, to=tb.length-1; while(from<=to){ int mid=(to+from)/2; int v=tb[mid].compareTo(x); if(v==0)return mid; if(v<0)from=mid+1; if(v>0)to=mid-1; } return -1; }

Binær søgning - rekursivt public static int search(int[] a, int v){ return binSea(a, 0, a.length -1, v); } public static int binSea(int[] a, int from, int to, int v) { if (from==to) if (a[from]==v) return from; else return -1; int mid = (from+to)/2; if (v>a[mid]) return binSea(a, mid+1, to, v); else return binSea(a, from, mid, v); }

Binær søgning Der er to tilfælde 1. Listen har eet element -- Det eftersøgte tal sammenlignes med tallet på listen 2. Listen har mere end eet element -- Listen deles op i to halvdele -- Hvis det eftersøgte tal er større end sidste tal i første halvdel eftersøges det i sidste halvdel -- Ellers eftersøges det i første halvdel Bemærk: Basis og rekursivt tilfælde

Kompleksitet Lineær søgning hvis det findes skal man i snit halvvejs igennem. Findes det ikke skal man hele vejen. O(n) Binær søgning: halveringer: O(log 2 (n)

Fibonaccitallene 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,... Hvert tal, pånær de to første, er summen af de to forrige tal Rekursiv definition f(1) = 1 f(2) = 1 f(n) = f(n-1)+f(n-2), n>2

funktion: fib Rekursiv metode der beregner det n’te Fibonaccital public static int fib(int n){ if (n <= 2) return 1; else return fib(n-1)+fib(n-2); }

Plan for idag Når fib kaldes med 7 som argument: fib(7): fib(7) udregnes 1 gang fib(6) udregnes 1 gang fib(5) udregnes 2 gange fib(4) udregnes 3 gange fib(3) udregnes 5 gange fib(2) udregnes 8 gange fib(1) udregnes 5 gange Det samme beregnes altså mange gange

Eksponentielt nFib(n)Antal fib kald

Fibonaccital – med for-løkke Iterativt program der beregner det n’te Fibonaccital public static int fib(int n) {if (n<=2) return 1; int fold = 1; int fold2 = 1; int fnew; for (int i = 3; i <= n; i++) {fnew = fold + fold2; fold2 = fold; fold = fnew; } return fnew; } Hvad er tidskompleksiteten nu?