Rekursion og eksperimental analyse




Tuesday, February 23, 2010                  1
Dagens læringsmål

       • Efter dagens forelæsning vil du være i stand til at

             • Forklare hvad en rekursiv ...
Rekursion




Tuesday, February 23, 2010   3
Rekursion

       • Iteration


             • Aktioner der skal gentages beskrives ved hjælp af en løkke.




       • Re...
Rekursion: Skriv ord ud i omvendt rækkefølge

       • Input:                                          • Output:
         ...
Input:
           er                line: er        public static void reverse(Scanner input){
           dette           ...
Input:
           er                line: er                 public static void reverse(Scanner input){
       dette      ...
Input:
           er                line: er        public static void reverse(Scanner input){
           dette           ...
Rekursion

       • Basis-tilfælde. Simpelt/simple tilfælde der løses uden rekursivt kald


       • Rekursions-tilfælde/s...
Eksempel

                             public static void reverse(Scanner input){
                             if (input.h...
Rekursion og induktion

       • Rekursion

             • Basis-tilfælde. Simpelt/simple tilfælde der løses uden rekursiv...
Eksempel
                             public static void reverse(Scanner input){
                             if (input.ha...
Eksempel
                               public static void reverse(Scanner input){
                                if (inp...
Største fælles divisor (gcd)

       • gcd(p,q). Find største heltal der går op i begge tal.


       • Eksempel. gcd(4032...
Største fælles divisor

       • gcd(p,q). Find største heltal der går op i både p og q.


       • Euclids algoritme.
   ...
Største fælles divisor

       • gcd(p,q). Find største heltal der går op i både p og q.


       • Euclids algoritme.
   ...
Største fælles divisor

    • gcd(p,q). Find største heltal der går op i både p og q.
                                    ...
Towers of Hanoi

       • Ryk alle plader fra den venstre pind til den højre pind.

             • Kun tilladt at rykke én...
Towers of Hanoi: Rekursiv løsning




Tuesday, February 23, 2010                 25
Towers of Hanoi: Rekursiv løsning

       • TowersOfHanoi(n, left) udskriver de flytninger der skal til for at rykke n plad...
Towers of Hanoi: Rekursiv løsning

       • TowersOfHanoi(n, left) udskriver de flytninger der skal til for at rykke n plad...
Towers of Hanoi: Rekursiv løsning

       • Antal flytninger: T(n) = 2·T(n-1) + 1
             • T(1) = 1, T(2) = 3, T(3) =...
Towers of Hanoi: Rekursiv løsning

       • Antal flytninger: T(n) = 2·T(n-1) + 1 = 2n - 1


       • Induktionsbevis:
    ...
Towers of Hanoi: Rekursiv løsning

       • Antal flytninger: T(n) = 2n - 1
             • For n = 64 tager det 585 milliar...
Mergesort




Tuesday, February 23, 2010   31
Sortering

       • Sortering. Givet n elementer, omarranger dem i ikke-faldende orden.

       • Oplagte anvendelser

   ...
Mergesort

       • Mergesort

             • Del tabellen i 2 halvdele.

             • Sorter rekursivt hver del

      ...
Fletning

       • Mål. Kombiner to sorterede lister til én sorteret liste i lineær tid


       • Idé.

             • Ho...
Fletning

       • Flet.

             • Hold styr på mindste element i hver sorteret halvdel.

             • Indsæt mind...
Fletning

       • Flet.

             • Hold styr på mindste element i hver sorteret halvdel.

             • Indsæt mind...
Mergesort


                             Mergesort(A, low, hi){
                                 if (low  hi)
            ...
Mergesort: Eksempel

       • A =  5, 2, 4, 7, 1, 3, 2, 6 


                                                 1       2   ...
Mergesort: Korrekthed

       • Påstand. Mergesort sorterer korrekt enhver tabel.


       • Bevis: (induktion over n)

  ...
Mergesort: Køretid

       • Analyse

       • Hvis n = 0, 1 eller 2: bruger vi konstant tid

       • Hvis n  2 bruger vi...
Mergesort: rekursionsligningen

       • Rekursionsligning

             • T(n) ≤ 2T(n/2) + cn,     for n  2 og en konstan...
Bevis: Rekursionstræ

       • T(n) ≤ 2T(n/2) + cn, for n  2 og en konstant c, og T(2) ≤ c.

       • Påstand. T(n) = O(n ...
Bevis: Substitution

       • Substitutionsmetoden.


             1. Gæt på løsningen.


             2. Brug matematisk ...
Bevis: Substitution

       • T(n) ≤ 2T(n/2) + cn, for n  2 og en konstant c, og T(2) ≤ c.

       • Påstand. T(n) = O(n l...
Rekursion: faldgruber

       • Manglende basistilfælde


       • Ingen konvergens mod basistilfældet


       • Overdrev...
Rekursion: QA

       • Er der situationer hvor iteration er den eneste mulige måde at angribe
         problemet på?

   ...
Opsummering

       • Rekursive algoritmer


             • Basistilfælde, rekursionsskridt


             • Tæt knyttet t...
Eksperimentiel Analyse af Programmer
       Philip Bille




Tuesday, February 23, 2010                    1
Plan

       • Teoretisk vs. eksperimentiel analyse

       • Den videnskabelige metode

             • Bubblesort som eks...
Teoretisk vs. Eksperimentiel Analyse

       • Teoretisk analyse:

             • Analysere algoritmer for at estimere ant...
Den Videnskabelige Metode




Tuesday, February 23, 2010         4
Den Videnskabelige Metode


                                                Udfør og observer
            Indtil hypoteser...
Eksempel: BubbleSort




Tuesday, February 23, 2010    6
BubbleSort


                             public static void bubbleSort(int[] A) {
                             	  int tmp...
BubbleSort

       • Hvad ved vi om effektivitet af bubbleSort?

       • Teori: Køretid for bubbleSort er cn2 (Θ(n2)) for...
Observer

                              n       tid
                             10000      0.27
                         ...
300




                                   250




                                   200




                            ...
Fordoblingshypotese

       • Lad T(n) være tid for bubbleSort på tabel af størrelse n.

       • Kig på forholdet mellem ...
Fordoblingshypotese

                              n        tid     T(2n)/T(n)
                             10000      0.2...
Forudsigelse og Verifikation

                                n            tid     T(2n)/T(n)
                             ...
Hvad Med c?

       • Hvad nu hvis vi gerne vil finde konstanten c i køretid for cn2 for bubbleSort?

       • Metode:

   ...
Målinger passer med 1/5 ⋅ n2




                             1000




                             100




              ...
Hypotese

       • Hypotese 2: Køretid for bubbleSort er 1/5⋅n2 .

       • Kan ligeledes bruges til forudsigelse af køret...
Klassifikation af Køretider




Tuesday, February 23, 2010          17
Teoretisk vs. Eksperimentiel Analyse

       • Eksperimentiel analyse:

             • Mål køretider, opstil hypoteser

  ...
Resume

       • Teoretisk vs. eksperimentiel analyse

       • Den videnskabelige metode

             • Bubblesort som e...
Upcoming SlideShare
Loading in...5
×

04slides

425

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
425
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "04slides"

  1. 1. Rekursion og eksperimental analyse Tuesday, February 23, 2010 1
  2. 2. Dagens læringsmål • Efter dagens forelæsning vil du være i stand til at • Forklare hvad en rekursiv algoritme er • Forklare forskellen mellem rekursion og iteration • Konstruere rekursive algoritmer • Analysere køretiden og argumentere for korrektheden af en rekursiv algoritme • Anvende mergesort, analysere dens køretid, samt argumentere for dens korrekthed. • Bruge den videnskabelige metode til at lave eksperimentel analyse af algoritmer. • Pensum: • Reges og Stepp udleverede kopier (om rekursion) • KT 5.1 + s. 48-50 (om merge, mergesort og analysen af dem). • Sedgewick og Wayne udleverede kopier. Tuesday, February 23, 2010 2
  3. 3. Rekursion Tuesday, February 23, 2010 3
  4. 4. Rekursion • Iteration • Aktioner der skal gentages beskrives ved hjælp af en løkke. • Rekursion • Aktioner der skal gentages beskrives ved hjælp af en metode/algoritme der kalder sig selv. Tuesday, February 23, 2010 4
  5. 5. Rekursion: Skriv ord ud i omvendt rækkefølge • Input: • Output: er sjovt dette ikke ikke dette sjovt er public static void reverse(Scanner input){ if (input.hasNextLine()) { String line = input.nextLine(); reverse(input); System.out.println(line); } } Tuesday, February 23, 2010 5
  6. 6. Input: er line: er public static void reverse(Scanner input){ dette environment if (input.hasNextLine()) { String line = input.nextLine(); ikke reverse(input); sjovt System.out.println(line); } } Tuesday, February 23, 2010 6
  7. 7. Input: er line: er public static void reverse(Scanner input){ dette environment if (input.hasNextLine()) { String line = input.nextLine(); ikke reverse(input); sjovt line: dette System.out.println(line); public static void reverse(Scanner input){ } if (input.hasNextLine()) { environment } String line = input.nextLine(); reverse(input); line: ikke System.out.println(line); public static void reverse(Scanner input){ } if (input.hasNextLine()) { environment } String line = input.nextLine(); reverse(input); line: sjovt System.out.println(line); public static void reverse(Scanner input){ } if (input.hasNextLine()) { environment } String line = input.nextLine(); reverse(input); System.out.println(line); public static void reverse(Scanner input){ } if (input.hasNextLine()) { } String line = input.nextLine(); reverse(input); System.out.println(line); } } Tuesday, February 23, 2010 10
  8. 8. Input: er line: er public static void reverse(Scanner input){ dette environment if (input.hasNextLine()) { String line = input.nextLine(); ikke reverse(input); sjovt System.out.println(line); } } Output: sjovt ikke dette er Tuesday, February 23, 2010 14
  9. 9. Rekursion • Basis-tilfælde. Simpelt/simple tilfælde der løses uden rekursivt kald • Rekursions-tilfælde/skridt. Reducerer til simplere problem der kan løses ved et (eller flere) rekursive kald. Tuesday, February 23, 2010 15
  10. 10. Eksempel public static void reverse(Scanner input){ if (input.hasNextLine()) { String line = input.nextLine(); reverse(input); System.out.println(line); } } • Basis-tilfælde. Gør ingenting. • Rekursions-tilfælde. reverse(input) Tuesday, February 23, 2010 16
  11. 11. Rekursion og induktion • Rekursion • Basis-tilfælde. Simpelt/simple tilfælde der løses uden rekursivt kald • Rekursions-tilfælde/skridt. Reducerer til simplere problem der kan løses ved et (eller flere) rekursive kald. • Induktion (over n) • Basis-tilfælde. Simpelt/simple tilfælde der bevises for specifikke værdier af n. • Induktionsskridt. Antag at udsagnet gælder for alle heltal mindre end n, og brug dettte til at vise det er sandt for n. Tuesday, February 23, 2010 17
  12. 12. Eksempel public static void reverse(Scanner input){ if (input.hasNextLine()) { String line = input.nextLine(); reverse(input); System.out.println(line); } } • Korrekthed • Tom linie: Gør ingenting. ✓ • n linier: Antag reverse(input) udskriver de sidste n-1 linier i omvendt rækkefølge. Så udskrives de n-1 sidste linier i omvendt rækkefølge først og bagefter udskrives den første linie. ✓ Tuesday, February 23, 2010 18
  13. 13. Eksempel public static void reverse(Scanner input){ if (input.hasNextLine()) { String line = input.nextLine(); reverse(input); System.out.println(line); } } • Køretid T(n) Hvert rekursivt kald tager worst-case O(1) tid T(n) = O(n). Tuesday, February 23, 2010 19
  14. 14. Største fælles divisor (gcd) • gcd(p,q). Find største heltal der går op i begge tal. • Eksempel. gcd(4032,1272) = 24. 4032 = 26 × 32 × 71 1272 = 23 × 31 × 531 gcd = 23 × 31 = 24 • Anvendelser • Simple brøker = 1272/4032 = 53/168 • RSA kryptografisystem Tuesday, February 23, 2010 20
  15. 15. Største fælles divisor • gcd(p,q). Find største heltal der går op i både p og q. • Euclids algoritme. p if q = 0 ← Basistilfælde gcd(p, q) = gcd(q, p % q) otherwise ← Rekursionsskridt Konvergerer mod basistilfældet. gcd(4032, 1272) = gcd(1272, 216) 4032 = 3 × 1272 + 216 = gcd(216, 192) = gcd(192, 24) = gcd(24, 0) = 24. Tuesday, February 23, 2010 21
  16. 16. Største fælles divisor • gcd(p,q). Find største heltal der går op i både p og q. • Euclids algoritme. p if q = 0 ← Basistilfælde gcd(p, q) = gcd(q, p % q) otherwise ← Rekursionsskridt Konvergerer mod basistilfældet. p q q p%q x x x x x x x x gcd(p,q) = x, p = 8x, q = 3x Tuesday, February 23, 2010 22
  17. 17. Største fælles divisor • gcd(p,q). Find største heltal der går op i både p og q. p if q = 0 ← Basistilfælde gcd(p, q) = gcd(q, p % q) otherwise ← Rekursionsskridt • Pseudokode gcd(p,q) { if (q = 0) return p; ← Basistilfælde else return gcd(q,p % q); ← Rekursionsskridt } Tuesday, February 23, 2010 23
  18. 18. Towers of Hanoi • Ryk alle plader fra den venstre pind til den højre pind. • Kun tilladt at rykke én plade ad gangen. • En plade kan enten placeres på en tom pind eller ovenpå en større plade. start slut • Legende: Verdens ende når en gruppe af munke er færdige med at flytte pladerne i et tempel med 64 guldplader på 3 diamantnåle. • http://mazeworks.com/hanoi/index.htm Tuesday, February 23, 2010 24
  19. 19. Towers of Hanoi: Rekursiv løsning Tuesday, February 23, 2010 25
  20. 20. Towers of Hanoi: Rekursiv løsning • TowersOfHanoi(n, left) udskriver de flytninger der skal til for at rykke n plader til venstre (hvis left = true) eller til højre (hvis left = false). TowersOfHanoi(n, left){ if (n=0) return; // Basistilfælde TowersOfHanoi(n-1, !left) Ryk n-1 øverste til modsat side if (left) print(n + “ left”) Ryk største til else print(n + “ right”) ønskede sted. TowersOfHanoi(n-1, !left) Ryk n-1 ovenpå den største } Tuesday, February 23, 2010 26
  21. 21. Towers of Hanoi: Rekursiv løsning • TowersOfHanoi(n, left) udskriver de flytninger der skal til for at rykke n plader til venstre (hvis left = true) eller til højre (hvis left = false). TowersOfHanoi(n, left){ if (n=0) return; // Basistilfælde TowersOfHanoi(n-1, !left) Ryk n-1 øverste til modsat side if (left) print(n + “ left”) Ryk største til else print(n + “ right”) ønskede sted. TowersOfHanoi(n-1, !left) Ryk n-1 ovenpå den største } • Antal flytninger. T(n) = 2·T(n-1) + 1 Tuesday, February 23, 2010 27
  22. 22. Towers of Hanoi: Rekursiv løsning • Antal flytninger: T(n) = 2·T(n-1) + 1 • T(1) = 1, T(2) = 3, T(3) = 7, T(4) = 15 • T(n) = 2n - 1 • Bevis: • Hjælpefunktion U(n): U(n) = T(n) + 1 • U(0) = T(0) +1 = 1 • U(n) = T(n) + 1 = (2·T(n-1) + 1) + 1 = 2·T(n-1) + 2 = 2·U(n-1) • U(n) = 2n • T(n) = U(n) -1 = 2n - 1 Tuesday, February 23, 2010 28
  23. 23. Towers of Hanoi: Rekursiv løsning • Antal flytninger: T(n) = 2·T(n-1) + 1 = 2n - 1 • Induktionsbevis: • Basis tilfælde: T(0) = 20 - 1 = 0. • Induktionsskridt: • Antag T(n-1) = 2n-1 - 1. • T(n) = 2 · (2n-1 - 1) + 1 = 2n - 2 + 1 = 2n - 1. Tuesday, February 23, 2010 29
  24. 24. Towers of Hanoi: Rekursiv løsning • Antal flytninger: T(n) = 2n - 1 • For n = 64 tager det 585 milliarder år (hvis der rykkes en plade i sekundet). • Enhver løsning bruger mindst så mange skridt. • Køretiden af TowersOfHanoi: T(n) = 2·T(n-1) + O(1) = Θ(2n) • Pas på programmer der tager eksponentiel tid!!! Tuesday, February 23, 2010 30
  25. 25. Mergesort Tuesday, February 23, 2010 31
  26. 26. Sortering • Sortering. Givet n elementer, omarranger dem i ikke-faldende orden. • Oplagte anvendelser • Sorter en liste af navne, organiser et MP3 bibliotek, vis Google PageRank resultater, skriv RSS nyheder op i omvendt kronologisk orden. • Nemme problemer for sorterede elementer • Find medianen, find nærmeste par, binær søgning i database, identificer statistiske “outliers”, find duplikater i mailingliste. • Ikke oplagte anvendelser • Datakompression, computergrafik, computational biology, anbefaling af bøger på Amazon. Tuesday, February 23, 2010 32
  27. 27. Mergesort • Mergesort • Del tabellen i 2 halvdele. • Sorter rekursivt hver del • Flet de to halvdele sammen til én sorteret liste. Jon von Neumann (1945) A L G O R I T H M S A L G O R I T H M S Del A G L O R H I M S T Sorter rekursivt A G H I L M O R S T Flet Tuesday, February 23, 2010 33
  28. 28. Fletning • Mål. Kombiner to sorterede lister til én sorteret liste i lineær tid • Idé. • Hold styr på mindste element i hver sorteret halvdel. • Indsæt mindste af de to elementer i en ekstra tabel. • Gentag indtil færdig. Tuesday, February 23, 2010 34
  29. 29. Fletning • Flet. • Hold styr på mindste element i hver sorteret halvdel. • Indsæt mindste af de to elementer i en ekstra tabel. • Gentag indtil færdig. mindste mindste A G L O R H I M S T A ekstra tabel Tuesday, February 23, 2010 35
  30. 30. Fletning • Flet. • Hold styr på mindste element i hver sorteret halvdel. • Indsæt mindste af de to elementer i en ekstra tabel. • Gentag indtil færdig. første halvdel anden halvdel udtømt udtømt A G L O R H I M S T A G H I L M O R S T ekstra tabel Tuesday, February 23, 2010 45
  31. 31. Mergesort Mergesort(A, low, hi){ if (low hi) then { mid = (hi + low)/2 L = Mergesort(A, low, mid) R = Mergesort(A, mid+1, hi) return Merge(L,R) } } Tuesday, February 23, 2010 46
  32. 32. Mergesort: Eksempel • A = 5, 2, 4, 7, 1, 3, 2, 6 1 2 2 3 4 5 6 7 flet 2 4 5 7 1 2 3 6 flet flet 2 5 4 7 1 3 2 6 flet flet flet flet 5 2 4 7 1 3 2 6 Tuesday, February 23, 2010 47
  33. 33. Mergesort: Korrekthed • Påstand. Mergesort sorterer korrekt enhver tabel. • Bevis: (induktion over n) • Basistilfælde. n=1. Allerede sorteret. • Induktionsskridt. Antag at påstanden er sand for alle tabeller af størrelse mindre end n. • Venstre og højre halvdel har begge størrelse mindre end n. • det rekursive kald sorterer dem korrekt • Merge fletter de to sorterede tabeller korrekt. Tuesday, February 23, 2010 48
  34. 34. Mergesort: Køretid • Analyse • Hvis n = 0, 1 eller 2: bruger vi konstant tid • Hvis n 2 bruger vi tid på • indeling af tabellen i 2 halvdele • rekursivt kald på venstre og højre halvdel • fletning af de sorterede tabeller • Rekursionsligning • T(n) ≤ 2T(n/2) + cn, for n 2 og en konstant c. • T(2) ≤ c. Tuesday, February 23, 2010 49
  35. 35. Mergesort: rekursionsligningen • Rekursionsligning • T(n) ≤ 2T(n/2) + cn, for n 2 og en konstant c. • T(2) ≤ c. • Løsning • T(n) = O(n log n) • Forskellige beviser • Rekursionstræ • Substitution/induktion Tuesday, February 23, 2010 50
  36. 36. Bevis: Rekursionstræ • T(n) ≤ 2T(n/2) + cn, for n 2 og en konstant c, og T(2) ≤ c. • Påstand. T(n) = O(n log n) T(n) cn T(n/2) T(n/2) 2(cn/2) T(n/4) T(n/4) T(n/4) T(n/4) 4(cn/4) log2n ... T(n / 2k) 2k (cn / 2k) ... T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(2) cn/2 (2) cn log2n Tuesday, February 23, 2010 51
  37. 37. Bevis: Substitution • Substitutionsmetoden. 1. Gæt på løsningen. 2. Brug matematisk induktion til at finde konstanterne og vise at løsningen virker. Tuesday, February 23, 2010 52
  38. 38. Bevis: Substitution • T(n) ≤ 2T(n/2) + cn, for n 2 og en konstant c, og T(2) ≤ c. • Påstand. T(n) = O(n log n) • Bevis: (induktion over n). • Basistilfælde: n = 2, cn log n = 2c ≥ T(2). • Induktionshypotese: T(m) ≤ cm log m for alle m n. T(n) ≤ 2T(n/2) + cn ≤ 2c(n/2) log(n/2) + cn = cn(log n -1) + cn = cn log n - cn + cn = cn log n. Tuesday, February 23, 2010 53
  39. 39. Rekursion: faldgruber • Manglende basistilfælde • Ingen konvergens mod basistilfældet • Overdrevent pladsforbrug • Overdreven genberegning Tuesday, February 23, 2010 54
  40. 40. Rekursion: QA • Er der situationer hvor iteration er den eneste mulige måde at angribe problemet på? • Nej. Enhver løkke kan erstattes af en rekursiv funktion. • Er der situationer hvor rekursion er den eneste mulige måde at angribe problemet på? • Nej. Enhver rekursion kan erstattes af en tilsvarende iterativ metode. • Hvad bør jeg foretrække? • Det der giver den simpleste, nemmest forståelige og mest effektive algoritme (afhængigt af det konkrete problem). Tuesday, February 23, 2010 55
  41. 41. Opsummering • Rekursive algoritmer • Basistilfælde, rekursionsskridt • Tæt knyttet til matematisk induktion. • Køretid: Rekursionstræ, substitutionsmetoden. • Del-og-hersk. Elegant løsning til mange vigtige problemer. • Mergesort: O(n log n) Tuesday, February 23, 2010 56
  42. 42. Eksperimentiel Analyse af Programmer Philip Bille Tuesday, February 23, 2010 1
  43. 43. Plan • Teoretisk vs. eksperimentiel analyse • Den videnskabelige metode • Bubblesort som eksempel Tuesday, February 23, 2010 2
  44. 44. Teoretisk vs. Eksperimentiel Analyse • Teoretisk analyse: • Analysere algoritmer for at estimere antal operationer som funktion af input størrelse. • Forsimplet model af virkelighed • Kan kræve avanceret matematik • Eksperimentiel analyse: • Udføre eksperimenter for at måle køretid • Foregår i virkeligheden :-) • Nemt at gøre. Brug videnskabelig metode. Tuesday, February 23, 2010 3
  45. 45. Den Videnskabelige Metode Tuesday, February 23, 2010 4
  46. 46. Den Videnskabelige Metode Udfør og observer Indtil hypoteser og observation eksperimenter stemmer overens Verificer forudsigelse med nye Opstil hypoteser der passer eksperimenter med observationer Forudsig udfald af nye eksperimenter vha. af hypotese Tuesday, February 23, 2010 5
  47. 47. Eksempel: BubbleSort Tuesday, February 23, 2010 6
  48. 48. BubbleSort public static void bubbleSort(int[] A) { int tmp; for(int i = 1; i A.length; i++) { for (int j = A.length - 1; j = i; j--) { if(A[j] A[j-1]) { tmp = A[j]; A[j] = A[j-1]; A[j-1] = tmp; } } } } Tuesday, February 23, 2010 7
  49. 49. BubbleSort • Hvad ved vi om effektivitet af bubbleSort? • Teori: Køretid for bubbleSort er cn2 (Θ(n2)) for konstant c 0 • Praksis: Hvordan passer den teoretiske køretid med praksis? • Er køretiden faktisk Θ(n2) for standard input (f. eks. tilfældige tal)? • Hvad er konstanten c? • Er der andre faktorer der har væsentlig betydning for praktisk køretid? Tuesday, February 23, 2010 8
  50. 50. Observer n tid 10000 0.27 20000 1.40 40000 3.23 80000 12.87 160000 51.38 320000 205.49 Tuesday, February 23, 2010 9
  51. 51. 300 250 200 150 100 50 -80 0 80 160 240 320 400 480 • Kunne ligne cn2 Tuesday, February 23, 2010 10
  52. 52. Fordoblingshypotese • Lad T(n) være tid for bubbleSort på tabel af størrelse n. • Kig på forholdet mellem T(2n) og T(n). • Hvis T(n) = cn2 har vi: T (2n) c(2n)2 c4n2 = = =4 T (n) cn 2 cn 2 • Hypotese 1 (fordoblingshypothese): T(2n)/T(n) ≈ 4 Tuesday, February 23, 2010 11
  53. 53. Fordoblingshypotese n tid T(2n)/T(n) 10000 0.27 20000 1.40 5.18 40000 3.23 2.31 80000 12.87 3.98 160000 51.38 3.99 320000 205.49 4.00 Ser ud til at konvergere mod 4 Tuesday, February 23, 2010 12
  54. 54. Forudsigelse og Verifikation n tid T(2n)/T(n) 10000 0.27 20000 1.40 5.18 40000 3.23 2.31 80000 12.87 3.98 160000 51.38 3.99 320000 205.49 4.00 • Forudsigelse: T(640000) = 205.49 ⋅ 4 = 821.96 • Observation: T(640000) = 822.01 ! • Yderligere observationer verificerer fordoblingshypotese. • Overensstemmelse med hypotese og observationer :-) Tuesday, February 23, 2010 13
  55. 55. Hvad Med c? • Hvad nu hvis vi gerne vil finde konstanten c i køretid for cn2 for bubbleSort? • Metode: • Plot eksperimentielle målinger og tilpas c for kurve f(n) = cn2. • Nemmest på dobbeltlogaritmisk skala da cnd bliver ret linie. Tuesday, February 23, 2010 14
  56. 56. Målinger passer med 1/5 ⋅ n2 1000 100 10 1 10 100 1000 10000 100000 1000000 10000000 Tuesday, February 23, 2010 15
  57. 57. Hypotese • Hypotese 2: Køretid for bubbleSort er 1/5⋅n2 . • Kan ligeledes bruges til forudsigelse af køretider. Tuesday, February 23, 2010 16
  58. 58. Klassifikation af Køretider Tuesday, February 23, 2010 17
  59. 59. Teoretisk vs. Eksperimentiel Analyse • Eksperimentiel analyse: • Mål køretider, opstil hypoteser • Nemt at udføre eksperimenter • Brugbar til at forudsige opførsel af programmer men ikke forklare • Teoretisk Analyse: • Analysere algoritmer for at estimere antal operationer som funktion af input størrelse. • Kan kræve avanceret matematik • Brugbar til at forudsige og forklare Tuesday, February 23, 2010 18
  60. 60. Resume • Teoretisk vs. eksperimentiel analyse • Den videnskabelige metode • Bubblesort som eksempel • Fordoblingshypoteser • Bestemmelse af konstanter vha. dobbeltlogaritmisk plot Tuesday, February 23, 2010 19
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×