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

Relationsstyper En-til-en relationer: TABEL 1 NAVN ID Peter Hansen 1
Pc-kørekort Sådan virker pc’en Keld Hinsch.
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 2 Gerth Stølting Brodal.
1 Nordjyllands Erhvervakademi Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte.
Publish Logs Klik på Geocaching.com access Og vælg Publish logs…
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
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
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal.
Begreber og Redskaber 7. Plan for idag Sorteringsalgoritmer Logaritmer,tabeller,køretid Simpelt iterativt: udvalgssortering Rekursivt: Flette sortering.
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
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.
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.
Algoritmer og Datastrukturer 1 Merge-Sort [CLRS, kapitel 2.3] Heaps [CLRS, kapitel 6] Gerth Stølting Brodal.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
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 2 Del-og-kombiner [CLRS, kapitel 2.3, , problem 30.1.c] Gerth Stølting Brodal.
18. Strategisk analyse af interne forhold
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
1 Søgetræer. 2 Binære søgetræer Definition Operationer Balancerede binære søgetræer AVL-træer Rød-sort-træer (AA-træer) B-træer Plan.
1. Database-systemer, introduktion
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
1 Sortering. 2 Plan Elementære metoder til sortering -sortering ved indsættelse -Shellsort Sorteringsmetoder baseret på rekursion –quicksort –flettesortering.
Symmetriske tværsnit P [kN/m].
Grafalgoritmer II.
Slide Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 15 Algorithms for Query Processing and Optimization.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal.
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.
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.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal Aarhus Universitet.
1 Hashing. 2 Hashing Hashfunktioner Kollisionsstrategier Effektivitet Hashing i Javas biblioteker Prioritetskøer Binær hob Anvendelser: heapsort, ekstern.
1 Sortering. 2 Plan Elementære metoder til sortering -sortering ved indsættelse -Shellsort Sorteringsmetoder baseret på rekursion –quicksort –flettesortering.
Anvendelser I Leg og spil.
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.
Algoritmer og Datastrukturer 1 Quicksort [CLRS, kapitel 7] Gerth Stølting Brodal Aarhus Universitet.
Grundlæggende programmering Forår 2002
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.
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.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering9B.1 Fletning.
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.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.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 programmeringfletning.1 Fletning.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Solution Makers A/S – Gruppe 4 Lars Wolter Nils Martinsen Rasmus Seye Tobias Kjeldsen 1.
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Dog Sort Dogs For meget ansvar Låst til én måde at sortere på
Grundlæggende Algoritmer og Datastrukturer
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

Fletning static void merge(int[] tb,int[] tm, int from,int mid,int to){ int n = to-from+1; int i1=from, i2=mid+1, j=0; while(i1<=mid && i2 <= to){ if(tb[i1]<tb[i2]){ tm[j]=tb[i1];i1++;j++; }else{ tm[j]=tb[i2];i2++;j++; } while(i1<=mid){tm[j]=tb[i1]; i1++;j++;} while(i2<=to ){tm[j]=tb[i2]; i2++;j++;} for(j=0;j<n;j++)tb[from+j]=tm[j]; }

Flettesortering static void mergesort(int[] tb,int[] tm, int from,int to){ if(from==to) return; int mid=(to+from)/2; mergesort(tb,tm,from,mid); mergesort(tb,tm,mid+1,to); merge(tb,tm,from,mid,to); } static void sort(int[] tb){ int tm[]=new int[tb.length]; mergesort(tb,tm,0,tb.length-1); }

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 Eksempel på en del og hersk strategi

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 n fib(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?