1 / 20

Begreber og Redskaber 8

Begreber og Redskaber 8. BRP. 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 )

kynton
Download Presentation

Begreber og Redskaber 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Begreber og Redskaber 8 BRP

  2. Plan for idag • Sortering fortsat • Comparable • Søgning • Lineær søgning • Binær søgning

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

  4. 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*log2(n)) • Man kan halvere en tabel log2(n) gange • Fletning er lineær i tid

  5. 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 log2(n!) sammenligninger

  6. Eksperiment: antal ”<”

  7. 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

  8. 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);

  9. 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

  10. 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

  11. 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

  12. 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; }

  13. 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); }

  14. Binær søgning Der er to tilfælde1. Listen har eet element -- Det eftersøgte tal sammenlignes med tallet på listen2. 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

  15. 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(log2(n)

  16. Fibonaccitallene 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 definitionf(1) = 1f(2) = 1f(n) = f(n-1)+f(n-2), n>2

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

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

  19. Eksponentielt

  20. Fibonaccital – med for-løkke Iterativt program der beregner det n’te Fibonaccitalpublic 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?

More Related