SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
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 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
Rekursion




Tuesday, February 23, 2010   3
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 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
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
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
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
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
Mergesort




Tuesday, February 23, 2010   31
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
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
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
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
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
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
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
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
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
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
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
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
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
Rekursion: faldgruber

       • Manglende basistilfælde


       • Ingen konvergens mod basistilfældet


       • Overdrevent pladsforbrug


       • Overdreven genberegning




Tuesday, February 23, 2010                     54
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
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
Eksperimentiel Analyse af Programmer
       Philip Bille




Tuesday, February 23, 2010                    1
Plan

       • Teoretisk vs. eksperimentiel analyse

       • Den videnskabelige metode

             • Bubblesort som eksempel




Tuesday, February 23, 2010                      2
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
Den Videnskabelige Metode




Tuesday, February 23, 2010         4
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
Eksempel: BubbleSort




Tuesday, February 23, 2010    6
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
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
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
300




                                   250




                                   200




                                   150




                                   100




                                   50



                             -80         0   80   160   240   320   400   480




       • Kunne ligne cn2




Tuesday, February 23, 2010                                                      10
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
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
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
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
Målinger passer med 1/5 ⋅ n2




                             1000




                             100




                              10




                              1     10      100   1000   10000   100000   1000000   10000000




Tuesday, February 23, 2010                                                                     15
Hypotese

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

       • Kan ligeledes bruges til forudsigelse af køretider.




Tuesday, February 23, 2010                                     16
Klassifikation af Køretider




Tuesday, February 23, 2010          17
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
Resume

       • Teoretisk vs. eksperimentiel analyse

       • Den videnskabelige metode

             • Bubblesort som eksempel

             • Fordoblingshypoteser

             • Bestemmelse af konstanter vha. dobbeltlogaritmisk plot




Tuesday, February 23, 2010                                              19

Contenu connexe

En vedette

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 

En vedette (20)

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 

04slides

  • 1. Rekursion og eksperimental analyse Tuesday, February 23, 2010 1
  • 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Towers of Hanoi: Rekursiv løsning Tuesday, February 23, 2010 25
  • 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. 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. 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. 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. 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Rekursion: faldgruber • Manglende basistilfælde • Ingen konvergens mod basistilfældet • Overdrevent pladsforbrug • Overdreven genberegning Tuesday, February 23, 2010 54
  • 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. 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. Eksperimentiel Analyse af Programmer Philip Bille Tuesday, February 23, 2010 1
  • 43. Plan • Teoretisk vs. eksperimentiel analyse • Den videnskabelige metode • Bubblesort som eksempel Tuesday, February 23, 2010 2
  • 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. Den Videnskabelige Metode Tuesday, February 23, 2010 4
  • 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
  • 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. 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. 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. 300 250 200 150 100 50 -80 0 80 160 240 320 400 480 • Kunne ligne cn2 Tuesday, February 23, 2010 10
  • 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. 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. 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. 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. Målinger passer med 1/5 ⋅ n2 1000 100 10 1 10 100 1000 10000 100000 1000000 10000000 Tuesday, February 23, 2010 15
  • 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
  • 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. Resume • Teoretisk vs. eksperimentiel analyse • Den videnskabelige metode • Bubblesort som eksempel • Fordoblingshypoteser • Bestemmelse af konstanter vha. dobbeltlogaritmisk plot Tuesday, February 23, 2010 19