Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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.

Lignende præsentationer


Præsentationer af emnet: "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."— Præsentationens transcript:

1 Begreber og Redskaber 6

2 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 bedre algoritmer

3 Tabeller/Arrays int[] tabel = new int[100]; tabel[0]=1; tabel[99]=117; for(int i=0;i<tabel.length;i++) tabel[i]=i*29; Erklæring, konstruktion, initialisering

4 Tabeller Underprogrammer static void fill(int[] t, int v){ for(int i=0;i<t.length;i++)t[i]=v; }... main(…){ int[] tabel=new int[100]; fill(tabel,23); int[] tabel1=new int[10000]; fill(tabel1,0); }

5 Køretid static void fill(int[] t, int v){ for(int i=0;i<t.length;i++)t[i]=v; } Køretid proportional med længden af tabellen – jo større tabel, jo længere tid tager det. O(n) hvor n er størrelsen af inddata Eksempler: O(n 2 )O(2 n )O(n log(n))

6 Sortering En vilkårlig liste af heltal [11, 9, 17, 5, 12] ønskes sorteret [5, 9, 11, 12, 17]

7 Udvalgssortering Det mindste element og det forreste element [11, 9, 17, 5, 12] ombyttes. I den resulterende liste [5, 9, 17, 11, 12] er det forreste element korrekt placeret [5, 9, 17, 11, 12] Sådan fortsættes

8 Udvalgssortering [11, 9, 17, 5, 12] [5, 9, 17, 11, 12] [5, 9, 11, 17, 12] [5, 9, 11, 12, 17]

9 Udvalgssortering public static void sort(int[] a){ for (int i=0; i<a.length-1; i++){ int minPos = minimumPosition(a,i); if (minPos!=i){ int temp = a[minPos]; a[minPos] = a[i]; a[i] = temp; }

10 Hjælpeprogram til udvalgssortering public static int minimumPosition(int[] a, int from){ int minPos = from; for (int i=from+1; i<a.length; i++) if (a[i]<a[minPos]) minPos = i; return minPos; }

11 Figure 1 Time Taken by Selection Sort Bemærk køretid bliver hastigt lang for store tabeller

12 Køretid for udvalgssortering Husk public static void sort(int[] a){ for (int i=0; i<a.length-1; i++){ int minPos = minimumPosition(a,i);... public static int minimumPosition(int[] a, int from){ for (int i=from+1; i<a.length; i++)... Groft overslag: Lad n være a.length. for-løkke i sort gennemløbes ca n-gange. Hver gang kaldes minimumPosition der har optil n gennemløb. Altså n * n gennemløb eller O(n 2 )

13 Lidt mere præcist Første gang minimumPosition kaldes er der n-1 gennemløb, anden gang n-2 gennemløb, osv (n-1)+(n-2)+(n-3)+…+1 = n * (n-1) * 0.5 ca = n 2 altså O(n 2 )

14 Eksempel Antal sammenligninger (<): Tabel med 1000 udvalgssortering: 499500 Flettesortering:8706 Tabel med 10000 udvalgssortering: 49995000 Flettesortering:120472

15 Køretider Eksempler: O(n 2 )O(2 n )O(n log(n)) Kvadratisk, eksponentiel, næsten lineær Gode algoritmer: lineær, næsten lineær Ubruglige algoritmer: eksponentiel

16 Logaritmer Det omvendte af potenser 10 5 =10000010 0 =1 log 10 (100000)=5log 10 (1)=0 2 8 =2562 0 =1 log 2 (256)=8log 2 (1)=0 Regne med potenser og logaritmer a n+m =a n * a m log(n * m)=log(n)+log(m)

17 Logaritmer Hvor mange gange skal man knække et 256 meter langt rør midt over for at få et 1 meter langt stykke? Du tænker på et tal mellem 1 og 256. Hvor mange ja/nej spørgsmål skal jeg stille for at gætte det?

18 Overblik over objekter i Java Parametre til underprogrammer Data beskyttelse Statiske felter Nedarvning Overskrivning

19 public/private Synlighed: Felter og metoder kan være private for en klasser – usynlige udenfor class A{ private int i,j; public int getI(){return i;} public void setI(int x){i=x;} } // A a = new A(); // a.i=3 ej ok, a.setI(3) ok

20 Accessor/mutator God stil: Felter gøres private Værdier hentes med accessormetoder Felter ændres med mutatormetoder accessor: public int getI(){return i;} mutator public void setI(int x){i=x;}

21 Statiske felter class A{ static private int nr=0; A(){nr++;} static int getNr(){return nr;} } System.out.println(A.getNr()); A a = new A(); System.out.println(a.getNr());

22 Initialisering af statiske felter class A{ static int i; static { i = 0; } } Statisk initialiseringsblok – Udføres når programmet starter (i god tid før objekter oprettes)

23 Nedarvning class A{ int i; } class B extends A { int j;} //B er subtype af A A a = new A(); a.i = 1; B b = new B(); b.i = 1; b.j = 2; A aa = new B(); aa.i = 1; //ej aa.j // ej B bb = new A();

24 Subtyper A a = new A(); a.i = 1; B b = new B(); b.i = 1; b.j = 2; A aa = new B(); aa.i = 1; //ej aa.j b = (B) aa; // casting - typecheck b = (B) a; // køretidsfejl if(aa instanceof B) b = (B) aa; //typecheck

25 Subtyper A a; B b = new B(); a = b; // ingen casting b = (B) a // casting nødvendig A er supertype for B, B subtype af A Værdier af subtype må bruges som supertype

26 Overskrivning (overwriting) class A{ void hej(){System.out.println(”AA”);} } class B extends A{ void hej(){System.out.println(”BB”);} } A a = new A(); a.hej(); // AA B b = new B(); b.hej(); // BB A c = new B(); c.hej(); // BB I B: void hej1(){super.hej();} b.hej1(); // AA ((B) c).hej1(); // AA

27 Rekursive datastrukturer class Liste{ int i Liste naeste; Liste(int ii,Liste nn){i=ii;naeste=n;} } Liste list=new Liste(1,new Liste(2,null));


Download ppt "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."

Lignende præsentationer


Annoncer fra Google