SlideShare ist ein Scribd-Unternehmen logo
1 von 80
Downloaden Sie, um offline zu lesen
Velkommen

                                                                                                     • Inge Li Gørtz. Adjunkt, forsker i algoritmer og datastrukturer.

                                                                                                     • Kontortid: mandag kl. 12.30-13. Bygning 322, kontor 124.

       Algoritmik og datastrukturer I                                                                • Læringsmål: Læs dem. Det er dem I bliver checket i til eksamen!

                                                                                                     • Medbring papir og blyant.
       02105/02326
                                                                                                     • Lav øvelserne - kom til grupperegningerne.

                                                                                                     • Slides.

                                                                                                     • Feedbackpersoner.




torsdag den 4. februar 2010                                                               1   torsdag den 4. februar 2010                                                2




       Velkommen

       • Forelæsninger. kl. 10.15-12.00.

       • Grupperegning: kl. 8.15-10.00.

       • Afleveringsopgaver: 5 stk. Obligatoriske.

       • Samarbejdspolitik omkring afleveringsopgaverne.                                              Algoritmer
             • Tilladt at snakke sammen, brainstorme, diskutere.

             • Skal skrive individuelt - ikke tilladt at vise besvarelser til hinanden.

             • Skriv på besvarelsen hvem I har arbejdet sammen med.




torsdag den 4. februar 2010                                                               3   torsdag den 4. februar 2010                                                4
Hvad er en algoritme?                                                                            Algoritme

       • En algoritme er en beskrivelse af, skridt for skridt, hvordan noget gøres                      • Beskrives i klart sprog: præcist, kortfattet, entydigt.
         (beregnes). Alle skridt skal beskrives entydigt og det skal være klart hvordan
         ethvert skridt udføres.
                                                                                                        • Dårlige beskrivelser af franskbrødsalgoritmen.

       • Eksempel. Franskbrødsalgoritme:                                                                 1. Bland gær og lidt vand.                     1. Åbn køleskabet og tag pakken i
                                                                                                         2. Bland mel og mere vand, lidt                   øverste venstre hjørneoaf lågen.
                                                                                                                                                                                     g
             1. Bland 30 g gær med 1 dl lunkent vand.                                                                                                                             r
                                                                                                            sukker og salt i dejen.                     2. Tag den midterste lje
                                                                                                                                                                             tapose i 3. skuffe
             2. Bland yderligere 500 g mel og 2 del vand i dejen og ælt i 10 minutter. Lad                                          ist
                                                                                                         3. Bland mel i til det har en passende            fra højre.     de ion
                                                                                                                                                                        ge tut
                hæve til dobbelt størrelse.                                                                 konsistens.
                                                                                                         4. Lad brødet hæve.   præc                                   an t in i øverste skuffe.
                                                                                                                                                        3. Find decilitermål
                                                                                                                                                                  r m lid
                                                                                                                                                                Fo fo vand fra vandhanen og
                                                                                                                                                        4. Afmål 2 dl r
             3. Slå dejen ned, form brødet og lad hæve i 20 min.                                                         u
             4. Bag i ovnen i 40 minutter ved 200 C.                                                              F   or
                                                                                                         5. Slå dejen ned, form brødet og lad
                                                                                                            det hæve igen.
                                                                                                                                                           5 dl fra den hentede pose.
                                                                                                                                                        5. Bland med indholdet af den
                                                                                                         6. Bag i ovnen til det er færdigt.                hentede pakke fra køleskabet.
            Input: 500g mel, 3 dl vand, 30 g gær, 5 g sukker, 5 g salt.                                  Input: mel, vand, gær, sukker og salt i        6. ....
            Output: Et franskbrød.                                                                       passende mængder.
                                                                                                         Output: Et franskbrød



torsdag den 4. februar 2010                                                                  5   torsdag den 4. februar 2010                                                                       6




       Algoritmisk problem                                                                              Algoritme: Et andet eksempel

       • Algoritmisk problem.                                                                           • Input: En følge [a1,....,an] af heltal.
                                                                                                        • Output: Det mindste tal m fra inputfølgen.
             • Input.
                                                                                                        • Følgende algoritme løser problemet:
             • Output: beskrevet som funktion af input.                                                       1. Sæt m = a1.
                                                                                                              2. Sæt i = 2.
                                                                                                              3. Hvis ai < m så sæt m = ai.
       • Eksempel: FindMin                                                                                    4. Læg 1 til i.
                                                                                                              5. Hvis i ≤ n så gå til linie 3.
             • Input: En følge [a1,....,an] af heltal.
                                                                                                              6. Returnér m.
             • Output: Det mindste tal m fra inputfølgen [a1,....,an].                                  • Algoritmen er korrekt: Hver gang linie 3 er udført er m lig det mindste af
                                                                                                          tallene [a1,....,ai]. Når i til sidst sættes til n+1 er m altså det mindste af tallene
                                                                                                          [a1,....,an].



torsdag den 4. februar 2010                                                                  7   torsdag den 4. februar 2010                                                                       8
Algoritme: Pseudokode                                                                           Mere om algoritmer

       • Input: En følge [a1,....,an] af heltal.                                                       • Hvad er forskellen på et program og en algoritme for et givet problem?
       • Output: Det mindste tal m fra inputfølgen.
       • Følgende algoritme løser problemet:                                                                           Algoritmer er uafhængige af specifikke programmeringssprog. En
                                                                                                                       algoritme beskriver en løsning til et problem. Et program udtrykker en
                                       Min( a1,....,an]){                                                              algoritme i et programmeringssprog så computeren kan udføre det.
                                         m = a1
                                         for i = 2 to n do
                                            if (ai < m)
                                                                                                       • Se mere på
                                              then m = ai
                                         return m                                                          http://cimel3.cse.lehigh.edu/movies/Algorithm/facts/Algorithm_sec2.htm
                                       }


       • = kan erstattes af <- eller :=. Det vigtige er at I gør det samme i hele
         beskrivelsen. Husk at algoritmer og pseudokode er uafhængige af konkrete
         programmeringssprog.


torsdag den 4. februar 2010                                                                 9   torsdag den 4. februar 2010                                                                     10




       Hvad er algoritmik?                                                                             Hvorfor algoritmik?

       • Læren om diskrete beregningsprocesser.                                                        • Internet. Web søgning, rutning af pakker, streaming, distribueret fildeling.
                                                                                                       • Biologi. Human genome project, protein foldning.
       • Design og analyse af algoritmer og datastrukturer.
                                                                                                       • Computers. Circuit layout, filsystem, compilere.
                                                                                                       • Computer spil. Computergrafik, virtual reality.
       • Effektive: hurtige, bruger mindst mulig plads i hukommelsen.
                                                                                                       • Transport. Skedulering af flypersonale, rutefindere.
       • Analyse:
             • Korrekthed: Algoritmen/datastrukturen virker som ønsket.
             • Effektivitet:
                    • Hvor mange skridt bruger algoritmen/datastrukturen på en beregning
                      på et input af en vis størrelse.
                    • Hvor meget plads bruger algoritmen/datastrukturen i hukommelsen.



torsdag den 4. februar 2010                                                                11   torsdag den 4. februar 2010                                                                     12
Læringsmål og pensum for dagens forelæsning

       • Efter denne forelæsning vil du være i stand til at:
             !   Forklare begrebet algoritme.
             !   Definere stabil matching problemet.
             !   Beskrive Gale-Shapley (GS) algoritmen på en klar måde.                             Stabil Matching	
             !   Anvende GS-algoritmen.
             !   Argumentere for at GS-algoritmen terminerer i endelige tid.                        Et eksempel
             !   Argumentere for at GS-algoritmen finder en korrekt løsning.


       • Pensum: KT (Kleinberg og Tardos: Algorithm Design) side 1-22.




torsdag den 4. februar 2010                                                             13   torsdag den 4. februar 2010                                                             14




       Matching af lægestuderende til hospitaler                                                    Matching af lægestuderende til hospitaler

       • Mål: Givet præferencer fra hospitaler og lægestuderende skal der designes en               • Mål: Givet præferencer fra hospitaler og lægestuderende skal der designes en
         selvjusterende tildelingsproces.                                                             selvjusterende tildelingsproces.


       • Tildeling: Alle studerende skal tildeles et hospital og hvert hospital skal                • Tildeling: Alle studerende skal tildeles et hospital og hvert hospital skal
         tildeles et bestemt antal studerende.                                                        tildeles et bestemt antal studerende.


       • Mulige problemer: De studerende og hospitalerne laver aftaler bag om ryggen                • Ustabilt par: Studerende x og hospital y er ustabile hvis:
         på systemet og nogle studerende ender uden et hospital og omvendt.
                                                                                                          • x foretrækker y frem for sit tildelte hospital.
                                                                                                          • y foretrækker x fremfor en af sine tildelte studerende.
           Selvjusterende: Algoritmen skal designes så ingen hospitaler og studerende
           laver private aftaler.
                                                                                                    • Stabil tildeling: En tildeling uden ustabile par.
                                                                                                        Individuel interesse vil forhindre private aftaler i at blive lavet mellem
                                                                                                        studerende og hospitaler.


torsdag den 4. februar 2010                                                             15   torsdag den 4. februar 2010                                                             16
Stabil matching problemet                                                                                                         Stabil matching problemet

       • Mål: Givet n mænd og n kvinder find en “tilfredstillende” matching.                                                              • Perfekt matching:
         Deltagerne prioriterer deltagere af modsatte køn.                                                                                  • Enhver mand får præcis én kvinde.
          • Enhver mand laver en liste med kvinder i sin foretrukne rækkefølge (fra                                                         • Enhver kvinde får præcis én mand.
            bedst til værst).
          • Enhver kvinde laver en liste med mænd i sin foretrukne rækkefølge (fra                                                       • Ustabilt par: En mand Søren og en kvinde Trine er ustabile hvis de
            bedst til værst).                                                                                                              foretrækker hinanden frem for deres nuværede partner:
                                                                                                Thomas
                                        Schröder
                                       Søren Brun
                                                        Søren Brun
                                                          Thomas
                                                                         Søren Brun
                                                                          Franklin             Franklin                                     • Søren foretrækker Trine frem for sin nuværende partner.
                                        Franklin         Franklin          Thomas              Schröder
                                         Thomas          Schröder         Schröder            Søren Brun                                    • Trine foretrækker Søren frem for sin nuværende partner.
                                                                                                                                            • Et ustabilt par kan forbedre deres situation ved at stikke af sammen.

                                        Trine         Rikke Rask        Lotte                  Nina                                      • Stabil matching: Perfekt matching uden nogen ustabile par.
                                       Søren Brun         Thomas       Schröder               Franklin


                                                                                                                                         • Stabil matching problemet: Givet præferencelister fra n mænd og n kvinder
                                                                                                                                           find en stabil matching, hvis en sådan eksisterer.
                                          Trine           Lotte           Lotte               Rikke Rask
                                       Rikke Rask         Nina            Trine                  Nina
                                          Lotte           Trine        Rikke Rask                Lotte
                                          Nina         Rikke Rask         Nina                   Trine

torsdag den 4. februar 2010                                                                                                  17   torsdag den 4. februar 2010                                                                  18




                                                                    Eksempel                                                                                                 Find en stabil matching
                           Schröder                  Søren Brun                  Søren Brun                  Thomas                                          Schröder           Søren Brun      Søren Brun     Thomas
                          Søren Brun                   Thomas                     Franklin                  Franklin                                        Søren Brun            Thomas         Franklin     Franklin
                           Franklin                   Franklin                     Thomas                   Schröder                                         Franklin            Franklin         Thomas      Schröder
                            Thomas                    Schröder                    Schröder                 Søren Brun                                         Thomas             Schröder        Schröder    Søren Brun




                              Trine                 Rikke Rask                  Lotte                       Nina                                                Trine          Rikke Rask     Lotte           Nina




                              Søren Brun             Thomas                Schröder                        Franklin                                             Søren Brun        Thomas     Schröder        Franklin




                                 Trine                  Lotte                   Lotte                      Rikke Rask                                              Trine           Lotte         Lotte       Rikke Rask
                              Rikke Rask                Nina                    Trine                         Nina                                              Rikke Rask         Nina          Trine          Nina
                                 Lotte                  Trine                Rikke Rask                       Lotte                                                Lotte           Trine      Rikke Rask        Lotte
                                 Nina                Rikke Rask                 Nina                          Trine                                                Nina         Rikke Rask       Nina           Trine
                                                                                                                        19                                                                                                20
torsdag den 4. februar 2010                                                                                                  19   torsdag den 4. februar 2010                                                                  20
En stabil matching
                           Schröder
                          Søren Brun
                                            Søren Brun
                                              Thomas
                                                            Søren Brun
                                                             Franklin
                                                                              Thomas
                                                                             Franklin
                                                                                                          Fri-og-afvis algoritmen
                           Franklin          Franklin         Thomas         Schröder
                            Thomas           Schröder        Schröder       Søren Brun
                                                                                                          • Fri-og-afvis algoritmen. [Gale & Shapley 1962] Intuitiv måde der garanteret
                                                                                                            altid finder en stabil matching.


                                                                                                          • Til at starte med er alle ledige.
                              Trine        Rikke Rask     Lotte                 Nina
                                                                                                          • Så længe der findes en ledig mand der endnu ikke har friet til alle kvinder gør
                                                                                                            følgende:
                                                                                                                !   Vælg en sådan mand m.
                                                                                                                !   Manden m frier til den kvinde øverst på hans liste som han ikke allerede
                              Søren Brun      Thomas     Schröder          Franklin
                                                                                                                    har friet til:
                                                                                                                       !   Hvis hun er ledig, siger hun ja, og de bliver forlovet.
                                                                                                                       !   Hvis hun foretrækker ham frem for sin nuværende forlovede, siger hun
                                                                                                                           ja, de bliver forlovet, og samtidig ophæver hun sin tidligere forlovelse.
                                 Trine         Lotte         Lotte          Rikke Rask                                 !   Hvis hun foretrækker sin nuværende forlovede, afviser hun manden m.
                              Rikke Rask       Nina          Trine             Nina
                                 Lotte         Trine      Rikke Rask           Lotte
                                 Nina       Rikke Rask       Nina              Trine
                                                                                         21
torsdag den 4. februar 2010                                                                   21   torsdag den 4. februar 2010                                                                         22




                                                                                                                                              Fri-og-afvis algoritmen
       Fri-og-afvis algoritmen                                                                                                Schröder
                                                                                                                             Søren Brun
                                                                                                                                                Søren Brun
                                                                                                                                                  Thomas
                                                                                                                                                                    Søren Brun
                                                                                                                                                                     Franklin
                                                                                                                                                                                       Thomas
                                                                                                                                                                                      Franklin
                                                                                                                              Franklin           Franklin             Thomas          Schröder
                                                                                                                               Thomas            Schröder            Schröder        Søren Brun
       • Fri-og-afvis algoritmen. [Gale & Shapley 1962] Intuitiv måde der garanteret
         altid finder en stabil matching.

       Initialiser alle personer til at være frie.
       while (der findes en mand er fri som ikke har friet til alle kvinder) {                                                    Trine         Rikke Rask         Lotte               Nina
           Vælg sådan en mand m
           k = øverste kvinde på m’s liste som m ikke allerede har friet til
           if (k er fri)
                                                                                                                                 Søren Brun     Thomas           Schröder            Franklin
                then sæt m og k til at være forlovede
           else if (k foretrækker m frem for sin forlovede z)
                then sæt m og k til at være forlovede, og z til at være fri.
           else
                k afviser m.
                                                                                                                                    Trine          Lotte             Lotte           Rikke Rask
       }                                                                                                                         Rikke Rask        Nina              Trine              Nina
                                                                                                                                    Lotte          Trine          Rikke Rask            Lotte
                                                                                                                                    Nina        Rikke Rask           Nina               Trine
                                                                                                                                                                                                  24
torsdag den 4. februar 2010                                                                   23   torsdag den 4. februar 2010                                                                         24
Bevis for korrekthed: Terminering                                                           Bevis for korrekthed: Terminering

       • Spørgsmål: Hvorfor stopper fri-og-afvis algoritmen altid på et eller andet                • Observation 1. Mænd frier til kvinder i faldende orden i forhold til præferencer
         tidspunkt?                                                                                  (bedste først).


       • Hint 1. I hvilken rækkefølge frier en mand til kvinderne på sin liste?                    • Observation 2. Når en kvinde er blevet forlovet bliver hun aldrig ledig igen,
                                I faldende orden fra bedst til værst.                                men hun kan skifte til noget bedre.
       • Hint 2. Hvis en kvinde er ledig kan vi så sige noget om hvor mange der har
         friet til hende?                                                                          • Påstand: Algoritmen terminerer efter højst n2 iterationer af while-løkken
                                               Ingen!
                                                                                                     (= højst n2 frierier).
       • Hint 3. Hvor mange gange kan en mand fri til den samme kvinde?
                                             1 gang.                                               • Bevis. Hver gang while-løkken gennemløbes frier en mand til en kvinde han
                                                                                                     ikke har friet til før. Der er kun n2 forskellige frierier. ∎
       • Hint 4. Hvor mange frierier kan vi have i alt (der er n mænd og n kvinder)?
                                                n2




torsdag den 4. februar 2010                                                            25   torsdag den 4. februar 2010                                                                 26




       Bevis for korrekthed: Perfektion                                                            Bevis for korrekthed: Perfektion

       • Påstand. Alle mænd og kvinder får en partner.                                             • Påstand. Alle mænd og kvinder får en partner.


       • Hint 1. Brug modbevis (antag der findes en ledig kvinde).                                  • Bevis. (modsætningsbevis)
                                                                                                         !   Antag der findes en ledig kvinde, Hanne.
       • Hint 2. Hvad kan man sige om en kvinde der er ledig når algoritmen                              !   I følge Observation 2, er der ikke nogen der har friet til Hanne.
         terminerer?                                                                                     !
                                     Ingen har friet til hende.                                              Når Hanne er ledig må der også være en ledig mand, f.eks. Per, da der er
                                                                                                             lige mange mænd og kvinder.
       • Hint 3. Hvis der er en ledig kvinde så er der også en .....?                                    !   Men Per frier til alle, siden han ender med at være ledig. ∎
                                            ledig mand
       • Hint 4. Hvor mange kvinder har en ledig mand friet til når algoritmen
         terminerer?
                                                Alle




torsdag den 4. februar 2010                                                            27   torsdag den 4. februar 2010                                                                 28
Bevis for korrekthed: Stabilitet                                                                      Opsummering: Stabil matching

       • Påstand. Der er ingen ustabile par.                                                                 • Stabil matching problemet. Givet n mænd og n kvinder, og deres præferencer,
                                                                                                               find en stabil matching.
       • Bevis. (ved modsætning)                                                                             • Eksempel: Tildeling af lægestuderende til hospitaler.
             !   Antag at Per og Hanne er et ustabilt par: de foretrækker hinanden frem for
                                                                                                             • Gale-Shapley algoritmen. Fri-og-afvis.
                 deres nuværende partner.                       Mænd frier i faldende orden
             !   Tilfælde 1: Per har ikke friet til Hanne.         af deres præferencer.                     • GS-algoritmen terminerer. Hver gang en mand frier, så frier han til en ny
                                                                                                               kvinde.
                    ¬   Per foretækker sin nuværende partner frem for Hanne.
                    ¬   Per og Hanne er ikke et ustabilt par.                                                • GS-algoritmen finder altid en perfekt matching.
                                                                      Kvinder bytter kun opad.
             !   Tilfælde 2: Per har friet til Hanne.
                    ¬   Hanne afviste Per (med det samme eller senere).
                    ¬   Hanne foretrækker sin nuværende partner frem for Per.
                    ¬   Per og Hanne er ikke et ustabilt par. ∎



torsdag den 4. februar 2010                                                                      29   torsdag den 4. februar 2010                                                            30




       Stabil matching	

       • GS-algoritmen kan modificeres til at håndtere mange varianter af problemet:
             !   Polygami (hospitaler-lægestuderende)
             !   Forbudte partnere.
             !   Kun præferencer for nogle - resten lige meget.                                              5 repræsentative problemer
             !   Kun to præferencer: god eller dårlig.
                                                                                                             Flere eksempler
       • Effektiv implementation?
             !   Ser vi på om 2 uger i forbindelse med datastrukturer.


       • Hvis der er flere stabile matching’er hvilken en finder GS så?




torsdag den 4. februar 2010                                                                      31   torsdag den 4. februar 2010                                                            32
Interval skedulering                                                                                                   Vægtet interval skedulering

       • Input. Mængde af opgaver med start- og sluttider.                                                                    • Input. Mængde af opgaver med start- og sluttider og vægte.
       • Mål. Find den største delmængde af kompatible opgaver.                                                               • Mål. Find den delmængde af kompatible opgaver der har størst vægt.

                                                                                           Opgaverne overlapper
                                                                                             ikke tidsmæssigt.

                                              a                                                                                                                               23

                                          b                                                                                                                              12

                                                  c                                                                                                                                20

                                                          d                                                                                                                                   26

                                                          e                                                                                                                                   13

                                                                  f                                                                                                                                    20

                                                                      g                                                                                                                                         11

                                                                                  h                                                                                                                                      16             Tid
                                                                                                  Tid
                              0   1   2       3   4   5       6   7   8       9       10    11                                                       0       1       2        3    4      5        6   7        8    9        10   11




torsdag den 4. februar 2010                                                                                       33   torsdag den 4. februar 2010                                                                                            34




       2-delt matching                                                                                                        Uafhængig mængde

       • Input. 2-delt graf.                                                                                                  • Input. Graf.
       • Mål. Find den største matching.                                                                                      • Mål. Find den største mængde uafhængige knuder.

                                                                                                                                                                                                  Mængde af knuder
                                                                                                                                                                                        hvor der ikke er nogen kanter imellem.
                                          A                               1



                                          B                           2
                                                                                                                                                                 1                                 2



                                          C                           3
                                                                                                                                                                                          4                 5
                                                                                                                                                         3
                                          D                           4

                                                                                                                                                                     6                             7

                                          E                           5




torsdag den 4. februar 2010                                                                                       35   torsdag den 4. februar 2010                                                                                            36
Kompetitiv facilitetsplacering                                                                      Læringsmål og pensum for dagens forelæsning

       • Input. Graf med vægte på knuderne.                                                                • Efter denne forelæsning vil du være i stand til at:
                                                                                                                 !   Forklare begrebet algoritme.
       • Spil. 2 konkurrerende spiller skiftes til at vælge en knude. Det er ikke tilladt at
         vælge en knude hvis en af dens naboer er valgt.                                                         !   Definere stabil matching problemet.
       • Mål. Find ud af om der findes en strategi for spiller 2 der giver værdi B.                               !   Beskrive Gale-Shapley (GS) algoritmen på en klar måde.
                                                                                                                 !   Anvende GS-algoritmen.
                                                                                                                 !   Argumentere for at GS-algoritmen terminerer i endelige tid.
                                                                                                                 !   Argumentere for at GS-algoritmen finder en korrekt løsning.
                               10   1    5     15    5      1     5     1     15     10



                                                                                                           • Pensum: KT side 1-22.
                                        2nd spiller kan garantere 20, men ikke 25.




torsdag den 4. februar 2010                                                                    37   torsdag den 4. februar 2010                                                               38




                                                                                                           Læringsmål og pensum

                                                                                                           • Læringsmål: Efter denne forelæsning vil du kunne

                                                                                                                 !   Forklare hvad køretid af en algoritme betyder og hvordan det beregnes.

       Analyse af algoritmer                                                                                     !   Forklare hvad worst-case køretid er.

                                                                                                                 !   Lave simple beregninger i O-notation.

                                                                                                                 !   Analysere algoritmers køretid vha. asymptotisk notation.

                                                                                                                 !   Forklare hvad en polynomiel tids algoritme er.



                                                                                                           • Pensum: KT side 29-42 (afsnit 2.0-2.2) og side 65 midt-66 (“Solved
                                                                                                             Exercises”).


torsdag den 11. februar 2010                                                                    1   torsdag den 11. februar 2010                                                               2
Analyse af algoritmer                                                                 Køretid og beregningskridt

       • Analyse af algoritmer.                                                            • Køretid. Antal beregningsskridt en algoritme bruger på et givet input.

             • Afgøre algoritmens forbrug af ressourcer
                                                                                           • Beregningsskridt. Abstraherer væk fra detaljer og forskelle i hardware ved at
                   • tid,                                                                    måle køretid i beregningskridt. Følgende operationer tæller som ét
                                                                                             beregningskridt (RAM modellen):
                   • hukommelse,                                                                 !   Simple tildelinger: x = y,
                   • cache-forbrug, ...                                                          !   Simple aritmetiske operationer (+, *, -, /, floor, ceiling, %, m.fl.).
                                                                                                 !   Simple sammenligninger: a < b, a = b, a > b. Eks. i > 0 and j>i;
                   • Dette kursus: Mest om tid og en lille smule om hukommelse.
                                                                                                 !   Andre “trivielle” operationer som er uafhængige af inputstørrelsen
             • Argumentere for korrekthed.                                                           (conditional and unconditional branching, and, or,...).


                                                                                           • Køretid angives som en funktion af inputstørrelsen: T(n).




torsdag den 11. februar 2010                                                      3   torsdag den 11. februar 2010                                                           4




       Beregningskridt: Eksempler                                                            Opgaver

       • Konstant antal beregningsskridt:                                                    • For hvilke af følgende operationer er T(n) konstant:

                                                                                                                     for i = 1 to n {
                                          if (i > 0)
                                            then { j = 1 }
                                            else { j = j+2 }
                                                                                                                       j = i·i + 3
                                                                                                                       }
                                                                                                                                          ÷
       • Operationer som ikke tæller som et konstant antal beregningskridt er
                                                                                                                                           ✓
                                                                                                                     for i = 1 to 27 {
         eksempelvis                                                                                                   j = i·i + 3
                                                                                                                       }
                 !   Tildelingen
                               x = Min(A)
                                                                                                                if (i < 14)

                 !
                     T(n) afhænger af køretiden af algoritmen Min.
                     for-løkken:
                                                                                                                  then { x = i % 2}
                                                                                                                  else { x = i / 2}
                                                                                                                                          ✓
                                    for i = 1 to n {
                                        j = i + 1
                                      }
                     T(n) afhænger af n: T(n)~n.

torsdag den 11. februar 2010                                                      5   torsdag den 11. februar 2010                                                           6
Worst-case analyse (værste tilfælde-analyse)

       • Worst-case analyse. Find en grænse for den størst mulige køretid af en
         algoritme på input af en given størrelse n.


       • Average case analyse. Find en grænse for køretid af en algoritme på tilfældigt              Asymptotisk analyse
         input af størrelse n.

                                                                                                     O-notation
       • Køretid = worst-case køretid i resten af dette kursus med mindre andet bliver
         sagt eksplicit.




torsdag den 11. februar 2010                                                              7   torsdag den 11. februar 2010                                                                              8




       Størrelsesorden af køretidsfunktioner                                                         T(n)=7n2+3n+42

       • Ønsker at sige noget om køretiden af en algoritme på input af størrelse n.
                                                                                                                                                                           7n^2        3n        42
                                                                                                                      7n^2             3n               42
                                            T(n) = 7n2 + 3n + 42.
                                                                                                                                                                3000
                                                                                                       800

       • For store n er led af lavere orden ubetydelige:
                               T(n) ~ 7n2                                                                                                                       2250
                                                                                                       600


       • Kan desuden ignorere konstante faktorer (ser kun på væksthastigheden):                                                                                 1500
                                                                                                       400
                               T(n) ~ n2

                                                                                                       200                                                       750



                                                                                                           0                                                      0
                                                                                                                0     1      2 3   4   5    6   7   8    9 10          0      5   10        15    20
torsdag den 11. februar 2010                                                              9   torsdag den 11. februar 2010                                                                             10
Asymptotisk størrelseorden                                                                                        Notation

       • Øvre grænse. T(n) er O(f(n)) hvis der eksisterer konstanter c>0 og n0 ≥ 0                                       • Lettere misbrug af notation. T(n) = O(f(n)).
         således at for alle n ≥ n0 gælder T(n) ≤ c · f(n).
                                                                                                                         • Vær opmærksom på:
       • Eksempler: T(n)= 7n2 + 3n + 42.                                                                                       !   O(f(n)) er en mængde af funktioner.
                   ! 7n2        + 3n + 42 ≤     7n2   +   3n2   +   42n2   ≤   (7+3+42)n2   for alle n ≥ 1                     !   Kan ikke skrive O(n3) = f(n).
                               T(n) er O(n2).                                                                                  !   f(n)=O(n3) og g(n)=O(n3) medfører ikke f(n) = g(n). Eks. f(n) = 5n3, g(n) = 3n2,
                   !
                                                                                                                                   men f(n) ≠ g(n).
                       T(n) er også O(n3)!
                   !   T(n) er ikke O(n).
                                                                                                                         • Tænk på det som ∈ eller ⊆: T(n) ∈ O(f(n)) eller O(n2) ⊆ O(n3)




torsdag den 11. februar 2010                                                                                 11   torsdag den 11. februar 2010                                                                        12




       Opgaver                                                                                                           Asymptotisk størrelseorden

       • f(n) = 3n + 2n3 - n2                                                                                            • Øvre grænse. T(n) er O(f(n)) hvis der eksisterer konstanter c > 0 og n0 ≥ 0
                                                                                                                           således at for alle n ≥ n0 gælder T(n) ≤ c · f(n).
             • f(n) = O(n)?            ÷
             • f(n) = O(n3)? ✓                                                                                           • Nedre grænse. T(n) er Ω(f(n)) hvis der eksisterer konstanter c>0 og n0 ≥ 0
             • f(n) = O(n4)? ✓                                                                                             således at for alle n ≥ n0 gælder T(n) ≥ c · f(n).

       • g(n) = 4n2 + log n
                                                                                                                         • Tæt grænse. T(n) er Θ(f(n)) hvis T(n) er både O(f(n)) og Ω(f(n)).
             • g(n)=O(n2 log n)? ✓
             • g(n) = O(n2)? ✓                                                                                           • Eksempel: T(n) = 7n2 + 3n + 42.
             • g(n) = O(f(n))? ✓                                                                                                     !   T(n) er O(n2), O(n3), Ω(n2), Ω(n) og Θ(n2).
                                                                                                                                     !   T(n) er ikke O(n), Ω(n3), Θ(n) eller Θ(n3).
             • f(n) = O(g(n))?          ÷
                                                                                                                         • Obs: O-notation (O, Ω og Θ) bruges kun på ikke-negative funktioner.


torsdag den 11. februar 2010                                                                                 13   torsdag den 11. februar 2010                                                                        14
Egenskaber                                                                              Egenskaber

       • Transitivitet.                                                                        • Symmetri
             !   f=O(g) og g=O(h)                     f=O(h).                                        !   f = Θ(g)      hvis og kun hvis    g = Θ(f)

             !   f=Ω(g) og g=Ω(h)                      f=Ω(h)
                                                                                               • Transponeret symmetri.
             !   f=Θ(g) og g=Θ(h)                      f=Θ(h).
                                                                                                     !   f=O(g) hvis og kun hvis          g=Ω(f)
       • Additivitet.
             !   f=O(h) og g = O(h)                     f+g =O(h).                             • Addition og maximum.
             !   f=Ω(h) og g=Ω(h)                      f+g=Ω(h)                                      !   max{f,g} = Θ(f+g)

             !   f=Θ(h) og g=Θ(h)                       f+g=Θ(h).




torsdag den 11. februar 2010                                                       15   torsdag den 11. februar 2010                                                 16




       Asymptotiske grænser for nogle almindelige funktioner                                   Eksempler

       • Polynomier. a0 + a1 n + ....+ ad nd = Θ(nd) for ad > 0                                • Find mindste tal:

                                                                                                                              Min( a1,....,an]){
                                                                                                                                m = a1                konstant tid
       • Logaritmer. O(loga n) = O(logb n) for alle konstanter a, b > 0.                       gentages n-1 gange               for i = 2 to n {
                                         kan undgå at specificere basen
                                                                                                                                   if (ai < m)
                                                                                                                                     then {m = ai}
                                                                                                                                }
       • Logaritmer. log n = O(nx) for alle x > 0.
                                                                                                                                return m
                          log vokser langsommere end ethvert polynomie                                                        }

                                                                                               • Lineær køretid: T(n)=O(n) og T(n)=Ω(n) dvs. T(n) = Θ(n)
       • Eksponenter. nd = O(rn) for alle r > 1 og d > 0.
              Enhver exponentiel funktion vokser hurtigere end ethvert polynomie




torsdag den 11. februar 2010                                                       17   torsdag den 11. februar 2010                                                 18
Eksempler m. 2 for-løkker                                                                               Eksempler

              • Kvadratisk køretid:                   Loop1(n){
                                                                                gentages n gange
                                                                                                               • Bubble-sort: Sorterer et array A af længde n indeholdende tal.
                                                         x = 1
                    • T(n) = O(n2),                      for i = 1 to n {
                                                            for j = 1 to n {                                         • Eks. Input A=<3,67,34,2,25>. Output: A=<2,3,25,34,67>
                    • T(n) = Ω(n2),                              x = x + 1       O(n) tid

                    • T(n) = Θ(n2)                          }
                                                                                                                                       Bubblesort(A){
                                                          }
                                                          return x                                                                       for i = 2 to length[A]{
                                                       }                                                                                   for j = length[A] downto i {
                                                                                                                                               if (A[j] < A[j-1])
                                                      Loop2(n){                                                                                  then { exchange A[j]   A[j-1] }
              • Lineær køretid:
                                                        x = 1                                                                                  }
                                                                                gentages n gange
                    • T(n) = O(n),                      for i = 1 to n {
                                                           x = x + 1
                                                                                                                                           }
                    • T(n) = Ω(n),                       }                                                                             }
                                                                                gentages n gange
                    • T(n) = Θ(n)                       for j = 1 to n {
                                                           x = x + 1
                                                         }
                                                                                                                     • Kvadratisk køretid: T(n)=O(n2), T(n)=Ω(n2), dvs. T(n) = Θ(n2), hvor n er
                                                         return m                                                      længden af A.
                                                      }


torsdag den 11. februar 2010                                                                       19   torsdag den 11. februar 2010                                                              20




       Eksempler                                                                                               Eksempel
                                    Loop4(n){                                                                  • Mere om løkker:
                                      x = 1
                                      for i = 1 to n {
                                                                                                                                                   for i = 2 to n {
                                        j = 1
                                                                                                                                                     x = Alg(i)
                                        while (j ≤ n) {
                                                                                                                                                   }
                                          x = x + 1
                                          j = 2·j
                                        }
                                      }                                                                        • Hvor køretiden for Alg(i) = O(i)?           O(n2)
                                      return x
                                    }
                                                                                                               • Hvor køretiden for Alg(i) = O(1)?            O(n)
       • Linearitmisk (linearitmic) køretid: T(n)=O(n log n) og T(n)=Ω(n log n) dvs. T(n) =
         Θ(n log n).                                                                                           • Hvor køretiden for Alg(i) = O(log i)? O(n log n)

       • For hver iteration af for-løkken kører while-løkken log n gange: 1. gang er j =1,
         2. gang er j=2, osv. Efter k iterationer er j= 2k. Løkken stopper når j = 2k > n,
         dvs. når k > log n.
torsdag den 11. februar 2010                                                                       21   torsdag den 11. februar 2010                                                              22
Effektiv algoritme

                                                                                                     • Forslag til definition af effektiv algoritme (1): En algoritme er effektiv hvis den
                                                                                                       kører hurtigt på alle input.


       Effektive algoritmer
                                                                                                     • Brute force. For mange ikke-trivielle problemer er der en naturlig brute-force
                                                                                                       søgealgoritme der checker alle mulige løsninger.
                                                                                                           !   Typisk 2n tid/skridt eller værre for input af størrelse n.
                                                                                                           !   Uacceptabelt i praksis.                                   n! for stabil matching
                                                                                                                                                                       med n mænd og n kvinder




                                                                                                     • Forslag til definition af effektiv algoritme (2): En algoritme er effektiv hvis den
                                                                                                       har bedre (worst-case) køretid end brute-force søgning.




torsdag den 11. februar 2010                                                             23   torsdag den 11. februar 2010                                                                        24




       Polynomiel tid                                                                                Worst-case polynomiel tid

       • Ønskelig skaleringsegenskab. Når input-størrelsen fordobles bliver algoritmen               • Definition. En algoritme er effektiv hvis dens (worst-case) køretid er
         kun en konstant faktor langsommere.                                                           polynomiel.

                                                                                                     • Begrundelse. Det virker rent faktisk i praksis!
                               Der findes en konstant d>0 således at T(n) =O(nd).
                                                                                                           !   Selv om 6.02 x 1023 x n20 teknisk set er polynomiel-tid, ville den være
                                                                                                               ubrugelig i praksis.
                                                                                                           !   I praksis, har polynomiel-tids algoritmer som bliver udviklet næsten altid
       • Definition. En algoritme kaldes for en polynomiel-tids algoritme hvis                                  små konstanter og små eksponenter.
         ovenstående skaleringsegenskab holder. Vi siger også at algoritmen har                            !   At bryde igennem den eksponentielle barriere af brute force afdækker
         polynomiel køretid.                                                                                   typisk nogle grundlæggende strukturer ved problemet.

                                                                                                     • Undtagelser.
                                                                                                           !   Nogle polynomiel-tids algoritmer har høje konstanter og/eller høje
                                                                                                               eksponenter og er ubrugelige i praksis.
                                                                                                           !   Nogle eksponentiel-tids (eller værre) algoritmer er meget brugte da worst-
                                                                                                               case tilfældene ser ud til at være sjældne.
torsdag den 11. februar 2010                                                             25   torsdag den 11. februar 2010                                                                        26
Hvorfor det er vigtigt                                                                         Faldgruber

                                                                                                      • Pas på med ikke at forveksle Ω, Θ og O med worst-case, average-case og
                                                                                                        best-case analyse:


                                                                                                      • Worst-case analyse:
                                                                                                            !   Vi kigger på hvad T(n) er i værste tilfælde for input af størrelse n.


                                                                                                      • Ω, Θ og O:
                                                                                                            !   Siger noget om hvor tætte grænser vi har på funktionen T(n).
                                                                                                            !   T(n) = O(n) bruges når vi kender en øvre grænse for T(n).
                                                                                                            !   T(n) = Ω(f) bruges når vi har en nedre grænse for T(n).
                                                                                                            !    T(n) = Θ(n). Angiver at analysen af algoritmen er “tæt”.




torsdag den 11. februar 2010                                                              27   torsdag den 11. februar 2010                                                              28




       Eksempel                                                                                       Læringsmål og pensum

       • T(n) = antal iterationer i GS-algoritmen: Viste T(n)=O(n2) sidste gang. Er den               • Læringsmål: Efter denne forelæsning vil du kunne
         også Ω(n2)?
                                                                                                            !   Forklare hvad køretid af en algoritme betyder og hvordan det beregnes.
       • Husk vi taler om worst-case!                                                                       !   Forklare hvad worst-case køretid er.

                                                                                                            !   Lave simple beregninger i O-notation.
       • Sidst: for ethvert input er der højst n2 iterationer, dvs. T(n)=O(n2).
                                                                                                            !   Analysere algoritmers køretid vha. asymptotisk notation.
       • Vis at der findes input så der udføres n(n+1)/2 iterationer. Dvs. T(n)=Ω(n2).
                                                                                                            !   Forklare hvad en polynomiel tids algoritme er.



                                                                                                      • Pensum: KT side 29-42 (afsnit 2.0-2.2) og side 65 midt-66 (“Solved
                                                                                                        Exercises”).


torsdag den 11. februar 2010                                                              29   torsdag den 11. februar 2010                                                              30
Læringsmål og pensum

                                                                                               • Læringsmål: Efter denne forelæsning vil du kunne
                                                                                                     !   Forklare hvad en hægtet liste er.
                                                                                                     !   Indsætte og slette elementer, samt søge i en hægtet liste.
       Introduktion til datastrukturer                                                               !   Argumentere for køretiderne af ovenstående operationer på en hægtet liste
                                                                                                         og angive dem i O-notation.
       Hægtede lister og tabeller                                                                    !   Anvende binær søgning på en tabel (array).
                                                                                                     !   Angive køretiden for binær søgning i O-notation samt argumentere for den.
                                                                                                     !   Vurdere om tabeller eller hægtede lister passer bedst til en given
                                                                                                         implementation.
                                                                                                     !   Vælge datastrukturer til implementation af GS-algoritmen, samt analysere
                                                                                                         køretiden af implementationen.


                                                                                               • Pensum: KT afsnit 2.3 + side 56.

fredag den 19. februar 2010                                                         1   fredag den 19. februar 2010                                                                                2




       Datastruktur                                                                            Implementation af stabil matching

       • Datastruktur: Måde til at organisere data så der effektivit kan søges og              • Ønsker at implementere af GS-algoritmen
         modificeres i det.                                                                                            Initialiser alle personer til at være frie.
                                                                                                                      while (en mand er fri som ikke har friet til alle kvinder) {
                                                                                                                               Vælg sådan en mand m
                                                                                                                               k = øverste kvinde på m’s liste som m ikke allerede har friet til
                                                                                                                               if (k er fri)
                                                                                                                                    sæt m og k til at være forlovede
                                                                                                                               else if (k foretrækker m frem for sin forlovede z)
                                                                                                                                    sæt m og k til at være forlovede, og z til at være fri.
                                                                                                                               else
                                                                                                                                    k afviser m.
                                                                                                                      }
                                                                                               • Hvordan holder vi styr på
                                                                                                     • Hvilke mænd der er ledige.
                                                                                                     • Hvilken kvinde m skal fri til i denne runde.
                                                                                                     • Om kvinde k er ledig.
                                                                                                     • Om kvinde k foretrækker mand m frem for sin forlovede z.

fredag den 19. februar 2010                                                         3   fredag den 19. februar 2010                                                                                4
Tabeller (arrays)

                                                  • Egenskaber ved en tabel:
                                                        • Kan tilgå det i’te element i O(1) tid: A[i]



                                                  • Eksempel
       Tabeller                                               • Hvem er forlovet med hvem


                                                  • Tabel ikke egnet til dynamisk mængde: f.eks. ledige mænd.
                                                        • besværligt at tilføje/fjerne elementer.




fredag den 19. februar 2010            5   fredag den 19. februar 2010                                                               6




                                                  Hægtede lister (linked lists)

                                                  • Implementation af dynamisk mængde: (mængde der kan ændre størrelse).


                                                  • Operationer:
                                                        • Insert
                                                        • Delete
       Hægtede lister (linked lists)
                                                        • Search


                                                  • Hægtet liste ~ kæde: Liste over de enkelte led i kæden, hvor det for hvert led
                                                    er angivet hvilket led der er det efterfølgende.
                                                  • Dobbelthægtet liste: Hvert led angiver hvilket led der er det foregående og
                                                    hvilket der er det efterfølgende.




fredag den 19. februar 2010            7   fredag den 19. februar 2010                                                               8
Hægtede lister                                                                                     Hægtede lister

       • Hægtet liste: Mængde af knuder, hvor hver knude har en værdi/et navn og                          • Demo
         indeholder en reference/peger til næste knude.


       • Hægtede lister i Java:
             • Nemt at definere som Java klasse.
             • En reference til en String eller Int.
             • En reference til en anden knude.
             • Brug speciel værdi null til at slutte listen.


                                          public class Node {
                                            private String name;
                                            private Node next;
                                          }



fredag den 19. februar 2010                                                                    9   fredag den 19. februar 2010                                                                     10




       Hægtede lister                                                                                     Hægtede lister

       • Dobbelthægtet liste: Mængde af knuder, hvor hver knude har en værdi/et                           • Eksempler: Liste L
         navn og indeholder referencer/pegere til en næste og foregående knude.                                 • first.val = 9
                                                                                                                • first.next.val = 4                      eller (first.next).val = 4
       • Hvert element e har:                                                                                   • first.next.next.val = 13                ((first.next).next).val = 13
             • En værdi: e.val                                                                                  • x = first.next: x.prev.val = 9
             • En pointer/reference til næste element: e.next
             • En pointer/reference til forrige element: e.prev

                                 9               4          13          27           5
                      First   prev next       prev next   prev next   prev next   prev next
                                                                                                                                    9           4              13           27            5
                                                                                                                       first(L)   prev next   prev next       prev next    prev next    prev next

       • Pointer first: peger på første element.
             • first.prev = null, last.next = null.
       • Pointer last: peger på sidste element (kan undværes).

fredag den 19. februar 2010                                                                   11   fredag den 19. februar 2010                                                                     12
Søgning i hægtede lister                                                                                  Indsættelse i hægtede lister

       • Søg efter værdien k i listen L.                                                                         • Indsæt element e i forrest listen

                               Search(L,k){
                                                                                                                                            InsertFirst(L,e){
                                 x = first(L)
                                                                                                                                              e.next = first(L)
                                 while x ≠ Null and x.val ≠ k do {
                                                                                                                                              if (first(L) ≠ Null)
                                   x = x.next
                                                                                                                                                then {first(L).prev = e}
                                 }
                                                                                                                                              first(L) = e
                                 return x
                                                                                                                                              e.prev = Null
                               }
                                                                                                                                            }
       • Eksempel: Search(L,13)
                                                                                                                                            e
                                  9             4            13            27             5                                                 5             9           4          13          27
                    First(L)   prev next     prev next     prev next     prev next     prev next
                                                                                                                               first(L)   prev next     prev next   prev next   prev next   prev next



       • Køretid: Θ(n)                                                                                           • InsertFirst tager en pointer/reference til elementet som input.



fredag den 19. februar 2010                                                                          13   fredag den 19. februar 2010                                                                  14




       Indsættelse i hægtede lister                                                                              Indsættelse i hægtede lister

       • Indsæt element e i forrest listen                                                                       • Indsæt element e mellem element d og f i listen L

                                    InsertFirst(L,e){                                                                                           Insert(L,e,d,f){
                                      e.next = first(L)                                                                                           e.next = f
                                      if (first(L) ≠ Null)                                                                                        e.prev = d
                                        then {first(L).prev = e}                                                                                  d.next = e
                                      first(L) = e                                                                                                f.prev = e
                                      e.prev = Null                                                                                             }
                                    }

                                      e                                                                          • Insert tager en pointer/reference til elementet som input.
                                      5             9            4            13            27
                     first(L)     prev next     prev next     prev next     prev next     prev next
                                                                                                                 • Køretid: O(1)


       • InsertFirst tager en pointer/reference til elementet som input.
       • Køretid: O(1)

fredag den 19. februar 2010                                                                          15   fredag den 19. februar 2010                                                                  16
Sletning i hægtede lister                                                                       Sletning i hægtede lister

       • Slet element e fra listen L.                                                                  • Slet element e fra listen L.

                                Delete(L,e){                                                                                    Delete(L,e){
                                  if (e.prev = Null)                                                                              if (e.prev = Null)
                                    then {first(L) = e.next}                                                                        then {first(L) = e.next}
                                    else {(e.prev).next = e.next}                                                                   else {(e.prev).next = e.next}
                                  if (e.next ≠ Null)                                                                              if (e.next ≠ Null)
                                    then {e.next.prev = e.prev}                                                                     then {e.next.prev = e.prev}
                                }                                                                                               }

                                              e
                                  9           4          13          27           5                                               9                13          27           5
                    First(L)   prev next   prev next   prev next   prev next   prev next                            First(L)   prev next         prev next   prev next   prev next




       • Delete tager en pointer/reference til elementet som input.                                    • Delete tager en pointer/reference til elementet som input.
                                                                                                       • Slet element med en given værdi v: Kald først Search(L,v)
                                                                                                       • Køretid: O(1)
fredag den 19. februar 2010                                                                17   fredag den 19. februar 2010                                                          18




       Hægtede lister opsummering

       • Følgende operationer:
             • Search(L,k): Θ(n)
             • InsertFirst(L,e): O(1)
             • Insert(L,e,d,f): O(1)
             • Delete(L,e): O(1)
                                                                                                       Mere om tabeller: binær søgning
       • Hvordan ville køretiderne blive påvirket hvis vi implementerede operationerne
         i en simpel tabel?
             • Dårligere køretider.
             • Search: Θ(N), hvor N størrelsen af tabellen (N ≥ n).
             • Enten Insert eller Delete får køretid Θ(n).




fredag den 19. februar 2010                                                                19   fredag den 19. februar 2010                                                          20
Binær søgning i tabeller (arrays)                                                                               Binær søgning: Analyse

       • Givet sorteret tabel (array) A med n tal findes tallet x i A?                                                  • Hvor mange indgange kigger vi højst på?


       • Lineær søgning: Check alle indgange i tabellen fra 1....n.                                                    • En iteration: Tabellen vi kigger på bliver halvt så stor. Efter
                                                                                                                             • 1. omgang: n/2
       • Binær søgning:                                                                                                      • 2. omgang: n/4
               • Find værdien v af midterste indgang i A.                                                                    • ......
                   • v = x: færdige                                                                                          • k’te omgang: n/2k
                   • v < x: Gentag proceduren rekursivt på øverste halvdel af A
                   • v > x: Gentag proceduren rekursivt på nederste halvdel af A                                       • k skal være så stor at n/2k ≤ 1     k ≥ log2 n.


                                                                                                                       • Køretid: Θ(log n).




fredag den 19. februar 2010                                                                                21   fredag den 19. februar 2010                                                22




       Binær søgning opgave                                                                                            Binær søgning pseudokode

       • Brug binær søgning til at lede efter tallene 7 og 42 i denne tabel.                                           • Iterativ implementation
                                                                                                                                                        BinarySearch(A,x){
                                                                                                                                                          lo = 1
           1         2         3   4    5    6    7    8    9    10   11   12   13   14     15   16   17
                                                                                                                                                          hi = length[A]
           2        5         7 11 12 14 16 25 32 33 42 45 64 67 78 83 92                                                                                 while (lo ≤ hi) {
                                                                                                                                                            mid = lo + (hi - lo)/2
                                                                                                                                                             if (x < A[mid]) then
                    • 7: A[9]=32, A[4]=11, A[2]=5, A[3]=7                                                                                                      { hi = mid-1 }
                                                                                                                                                             else if (x > A[mid]) then
                    • 42: A[9]=32, A[13]=64, A[11]=42                                                                                                          { lo = mid+1 }
                                                                                                                                                             else          // x = A[mid]
       • Giv et generelt eksempel hvor binær søgning bruger log n skridt (vis at T(n)=                                                                         { return mid // Found }
         Ω(log n)).                                                                                                                                         }
                          Tallet der søges efter er ikke i tabellen.
                                                                                                                                                            return -1      // Not found
       • Hvorfor kan man ikke lave binær søgning i en sorteret hægtet liste i O(log n)                                                                  }

                              Kan ikke tilgå en bestemt position i listen i konstant tid.

fredag den 19. februar 2010                                                                                23   fredag den 19. februar 2010                                                24
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half
Lectures1st half

Weitere ähnliche Inhalte

Empfohlen

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
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
 

Empfohlen (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
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...
 

Lectures1st half

  • 1. Velkommen • Inge Li Gørtz. Adjunkt, forsker i algoritmer og datastrukturer. • Kontortid: mandag kl. 12.30-13. Bygning 322, kontor 124. Algoritmik og datastrukturer I • Læringsmål: Læs dem. Det er dem I bliver checket i til eksamen! • Medbring papir og blyant. 02105/02326 • Lav øvelserne - kom til grupperegningerne. • Slides. • Feedbackpersoner. torsdag den 4. februar 2010 1 torsdag den 4. februar 2010 2 Velkommen • Forelæsninger. kl. 10.15-12.00. • Grupperegning: kl. 8.15-10.00. • Afleveringsopgaver: 5 stk. Obligatoriske. • Samarbejdspolitik omkring afleveringsopgaverne. Algoritmer • Tilladt at snakke sammen, brainstorme, diskutere. • Skal skrive individuelt - ikke tilladt at vise besvarelser til hinanden. • Skriv på besvarelsen hvem I har arbejdet sammen med. torsdag den 4. februar 2010 3 torsdag den 4. februar 2010 4
  • 2. Hvad er en algoritme? Algoritme • En algoritme er en beskrivelse af, skridt for skridt, hvordan noget gøres • Beskrives i klart sprog: præcist, kortfattet, entydigt. (beregnes). Alle skridt skal beskrives entydigt og det skal være klart hvordan ethvert skridt udføres. • Dårlige beskrivelser af franskbrødsalgoritmen. • Eksempel. Franskbrødsalgoritme: 1. Bland gær og lidt vand. 1. Åbn køleskabet og tag pakken i 2. Bland mel og mere vand, lidt øverste venstre hjørneoaf lågen. g 1. Bland 30 g gær med 1 dl lunkent vand. r sukker og salt i dejen. 2. Tag den midterste lje tapose i 3. skuffe 2. Bland yderligere 500 g mel og 2 del vand i dejen og ælt i 10 minutter. Lad ist 3. Bland mel i til det har en passende fra højre. de ion ge tut hæve til dobbelt størrelse. konsistens. 4. Lad brødet hæve. præc an t in i øverste skuffe. 3. Find decilitermål r m lid Fo fo vand fra vandhanen og 4. Afmål 2 dl r 3. Slå dejen ned, form brødet og lad hæve i 20 min. u 4. Bag i ovnen i 40 minutter ved 200 C. F or 5. Slå dejen ned, form brødet og lad det hæve igen. 5 dl fra den hentede pose. 5. Bland med indholdet af den 6. Bag i ovnen til det er færdigt. hentede pakke fra køleskabet. Input: 500g mel, 3 dl vand, 30 g gær, 5 g sukker, 5 g salt. Input: mel, vand, gær, sukker og salt i 6. .... Output: Et franskbrød. passende mængder. Output: Et franskbrød torsdag den 4. februar 2010 5 torsdag den 4. februar 2010 6 Algoritmisk problem Algoritme: Et andet eksempel • Algoritmisk problem. • Input: En følge [a1,....,an] af heltal. • Output: Det mindste tal m fra inputfølgen. • Input. • Følgende algoritme løser problemet: • Output: beskrevet som funktion af input. 1. Sæt m = a1. 2. Sæt i = 2. 3. Hvis ai < m så sæt m = ai. • Eksempel: FindMin 4. Læg 1 til i. 5. Hvis i ≤ n så gå til linie 3. • Input: En følge [a1,....,an] af heltal. 6. Returnér m. • Output: Det mindste tal m fra inputfølgen [a1,....,an]. • Algoritmen er korrekt: Hver gang linie 3 er udført er m lig det mindste af tallene [a1,....,ai]. Når i til sidst sættes til n+1 er m altså det mindste af tallene [a1,....,an]. torsdag den 4. februar 2010 7 torsdag den 4. februar 2010 8
  • 3. Algoritme: Pseudokode Mere om algoritmer • Input: En følge [a1,....,an] af heltal. • Hvad er forskellen på et program og en algoritme for et givet problem? • Output: Det mindste tal m fra inputfølgen. • Følgende algoritme løser problemet: Algoritmer er uafhængige af specifikke programmeringssprog. En algoritme beskriver en løsning til et problem. Et program udtrykker en Min( a1,....,an]){ algoritme i et programmeringssprog så computeren kan udføre det. m = a1 for i = 2 to n do if (ai < m) • Se mere på then m = ai return m http://cimel3.cse.lehigh.edu/movies/Algorithm/facts/Algorithm_sec2.htm } • = kan erstattes af <- eller :=. Det vigtige er at I gør det samme i hele beskrivelsen. Husk at algoritmer og pseudokode er uafhængige af konkrete programmeringssprog. torsdag den 4. februar 2010 9 torsdag den 4. februar 2010 10 Hvad er algoritmik? Hvorfor algoritmik? • Læren om diskrete beregningsprocesser. • Internet. Web søgning, rutning af pakker, streaming, distribueret fildeling. • Biologi. Human genome project, protein foldning. • Design og analyse af algoritmer og datastrukturer. • Computers. Circuit layout, filsystem, compilere. • Computer spil. Computergrafik, virtual reality. • Effektive: hurtige, bruger mindst mulig plads i hukommelsen. • Transport. Skedulering af flypersonale, rutefindere. • Analyse: • Korrekthed: Algoritmen/datastrukturen virker som ønsket. • Effektivitet: • Hvor mange skridt bruger algoritmen/datastrukturen på en beregning på et input af en vis størrelse. • Hvor meget plads bruger algoritmen/datastrukturen i hukommelsen. torsdag den 4. februar 2010 11 torsdag den 4. februar 2010 12
  • 4. Læringsmål og pensum for dagens forelæsning • Efter denne forelæsning vil du være i stand til at: ! Forklare begrebet algoritme. ! Definere stabil matching problemet. ! Beskrive Gale-Shapley (GS) algoritmen på en klar måde. Stabil Matching ! Anvende GS-algoritmen. ! Argumentere for at GS-algoritmen terminerer i endelige tid. Et eksempel ! Argumentere for at GS-algoritmen finder en korrekt løsning. • Pensum: KT (Kleinberg og Tardos: Algorithm Design) side 1-22. torsdag den 4. februar 2010 13 torsdag den 4. februar 2010 14 Matching af lægestuderende til hospitaler Matching af lægestuderende til hospitaler • Mål: Givet præferencer fra hospitaler og lægestuderende skal der designes en • Mål: Givet præferencer fra hospitaler og lægestuderende skal der designes en selvjusterende tildelingsproces. selvjusterende tildelingsproces. • Tildeling: Alle studerende skal tildeles et hospital og hvert hospital skal • Tildeling: Alle studerende skal tildeles et hospital og hvert hospital skal tildeles et bestemt antal studerende. tildeles et bestemt antal studerende. • Mulige problemer: De studerende og hospitalerne laver aftaler bag om ryggen • Ustabilt par: Studerende x og hospital y er ustabile hvis: på systemet og nogle studerende ender uden et hospital og omvendt. • x foretrækker y frem for sit tildelte hospital. • y foretrækker x fremfor en af sine tildelte studerende. Selvjusterende: Algoritmen skal designes så ingen hospitaler og studerende laver private aftaler. • Stabil tildeling: En tildeling uden ustabile par. Individuel interesse vil forhindre private aftaler i at blive lavet mellem studerende og hospitaler. torsdag den 4. februar 2010 15 torsdag den 4. februar 2010 16
  • 5. Stabil matching problemet Stabil matching problemet • Mål: Givet n mænd og n kvinder find en “tilfredstillende” matching. • Perfekt matching: Deltagerne prioriterer deltagere af modsatte køn. • Enhver mand får præcis én kvinde. • Enhver mand laver en liste med kvinder i sin foretrukne rækkefølge (fra • Enhver kvinde får præcis én mand. bedst til værst). • Enhver kvinde laver en liste med mænd i sin foretrukne rækkefølge (fra • Ustabilt par: En mand Søren og en kvinde Trine er ustabile hvis de bedst til værst). foretrækker hinanden frem for deres nuværede partner: Thomas Schröder Søren Brun Søren Brun Thomas Søren Brun Franklin Franklin • Søren foretrækker Trine frem for sin nuværende partner. Franklin Franklin Thomas Schröder Thomas Schröder Schröder Søren Brun • Trine foretrækker Søren frem for sin nuværende partner. • Et ustabilt par kan forbedre deres situation ved at stikke af sammen. Trine Rikke Rask Lotte Nina • Stabil matching: Perfekt matching uden nogen ustabile par. Søren Brun Thomas Schröder Franklin • Stabil matching problemet: Givet præferencelister fra n mænd og n kvinder find en stabil matching, hvis en sådan eksisterer. Trine Lotte Lotte Rikke Rask Rikke Rask Nina Trine Nina Lotte Trine Rikke Rask Lotte Nina Rikke Rask Nina Trine torsdag den 4. februar 2010 17 torsdag den 4. februar 2010 18 Eksempel Find en stabil matching Schröder Søren Brun Søren Brun Thomas Schröder Søren Brun Søren Brun Thomas Søren Brun Thomas Franklin Franklin Søren Brun Thomas Franklin Franklin Franklin Franklin Thomas Schröder Franklin Franklin Thomas Schröder Thomas Schröder Schröder Søren Brun Thomas Schröder Schröder Søren Brun Trine Rikke Rask Lotte Nina Trine Rikke Rask Lotte Nina Søren Brun Thomas Schröder Franklin Søren Brun Thomas Schröder Franklin Trine Lotte Lotte Rikke Rask Trine Lotte Lotte Rikke Rask Rikke Rask Nina Trine Nina Rikke Rask Nina Trine Nina Lotte Trine Rikke Rask Lotte Lotte Trine Rikke Rask Lotte Nina Rikke Rask Nina Trine Nina Rikke Rask Nina Trine 19 20 torsdag den 4. februar 2010 19 torsdag den 4. februar 2010 20
  • 6. En stabil matching Schröder Søren Brun Søren Brun Thomas Søren Brun Franklin Thomas Franklin Fri-og-afvis algoritmen Franklin Franklin Thomas Schröder Thomas Schröder Schröder Søren Brun • Fri-og-afvis algoritmen. [Gale & Shapley 1962] Intuitiv måde der garanteret altid finder en stabil matching. • Til at starte med er alle ledige. Trine Rikke Rask Lotte Nina • Så længe der findes en ledig mand der endnu ikke har friet til alle kvinder gør følgende: ! Vælg en sådan mand m. ! Manden m frier til den kvinde øverst på hans liste som han ikke allerede Søren Brun Thomas Schröder Franklin har friet til: ! Hvis hun er ledig, siger hun ja, og de bliver forlovet. ! Hvis hun foretrækker ham frem for sin nuværende forlovede, siger hun ja, de bliver forlovet, og samtidig ophæver hun sin tidligere forlovelse. Trine Lotte Lotte Rikke Rask ! Hvis hun foretrækker sin nuværende forlovede, afviser hun manden m. Rikke Rask Nina Trine Nina Lotte Trine Rikke Rask Lotte Nina Rikke Rask Nina Trine 21 torsdag den 4. februar 2010 21 torsdag den 4. februar 2010 22 Fri-og-afvis algoritmen Fri-og-afvis algoritmen Schröder Søren Brun Søren Brun Thomas Søren Brun Franklin Thomas Franklin Franklin Franklin Thomas Schröder Thomas Schröder Schröder Søren Brun • Fri-og-afvis algoritmen. [Gale & Shapley 1962] Intuitiv måde der garanteret altid finder en stabil matching. Initialiser alle personer til at være frie. while (der findes en mand er fri som ikke har friet til alle kvinder) { Trine Rikke Rask Lotte Nina Vælg sådan en mand m k = øverste kvinde på m’s liste som m ikke allerede har friet til if (k er fri) Søren Brun Thomas Schröder Franklin then sæt m og k til at være forlovede else if (k foretrækker m frem for sin forlovede z) then sæt m og k til at være forlovede, og z til at være fri. else k afviser m. Trine Lotte Lotte Rikke Rask } Rikke Rask Nina Trine Nina Lotte Trine Rikke Rask Lotte Nina Rikke Rask Nina Trine 24 torsdag den 4. februar 2010 23 torsdag den 4. februar 2010 24
  • 7. Bevis for korrekthed: Terminering Bevis for korrekthed: Terminering • Spørgsmål: Hvorfor stopper fri-og-afvis algoritmen altid på et eller andet • Observation 1. Mænd frier til kvinder i faldende orden i forhold til præferencer tidspunkt? (bedste først). • Hint 1. I hvilken rækkefølge frier en mand til kvinderne på sin liste? • Observation 2. Når en kvinde er blevet forlovet bliver hun aldrig ledig igen, I faldende orden fra bedst til værst. men hun kan skifte til noget bedre. • Hint 2. Hvis en kvinde er ledig kan vi så sige noget om hvor mange der har friet til hende? • Påstand: Algoritmen terminerer efter højst n2 iterationer af while-løkken Ingen! (= højst n2 frierier). • Hint 3. Hvor mange gange kan en mand fri til den samme kvinde? 1 gang. • Bevis. Hver gang while-løkken gennemløbes frier en mand til en kvinde han ikke har friet til før. Der er kun n2 forskellige frierier. ∎ • Hint 4. Hvor mange frierier kan vi have i alt (der er n mænd og n kvinder)? n2 torsdag den 4. februar 2010 25 torsdag den 4. februar 2010 26 Bevis for korrekthed: Perfektion Bevis for korrekthed: Perfektion • Påstand. Alle mænd og kvinder får en partner. • Påstand. Alle mænd og kvinder får en partner. • Hint 1. Brug modbevis (antag der findes en ledig kvinde). • Bevis. (modsætningsbevis) ! Antag der findes en ledig kvinde, Hanne. • Hint 2. Hvad kan man sige om en kvinde der er ledig når algoritmen ! I følge Observation 2, er der ikke nogen der har friet til Hanne. terminerer? ! Ingen har friet til hende. Når Hanne er ledig må der også være en ledig mand, f.eks. Per, da der er lige mange mænd og kvinder. • Hint 3. Hvis der er en ledig kvinde så er der også en .....? ! Men Per frier til alle, siden han ender med at være ledig. ∎ ledig mand • Hint 4. Hvor mange kvinder har en ledig mand friet til når algoritmen terminerer? Alle torsdag den 4. februar 2010 27 torsdag den 4. februar 2010 28
  • 8. Bevis for korrekthed: Stabilitet Opsummering: Stabil matching • Påstand. Der er ingen ustabile par. • Stabil matching problemet. Givet n mænd og n kvinder, og deres præferencer, find en stabil matching. • Bevis. (ved modsætning) • Eksempel: Tildeling af lægestuderende til hospitaler. ! Antag at Per og Hanne er et ustabilt par: de foretrækker hinanden frem for • Gale-Shapley algoritmen. Fri-og-afvis. deres nuværende partner. Mænd frier i faldende orden ! Tilfælde 1: Per har ikke friet til Hanne. af deres præferencer. • GS-algoritmen terminerer. Hver gang en mand frier, så frier han til en ny kvinde. ¬ Per foretækker sin nuværende partner frem for Hanne. ¬ Per og Hanne er ikke et ustabilt par. • GS-algoritmen finder altid en perfekt matching. Kvinder bytter kun opad. ! Tilfælde 2: Per har friet til Hanne. ¬ Hanne afviste Per (med det samme eller senere). ¬ Hanne foretrækker sin nuværende partner frem for Per. ¬ Per og Hanne er ikke et ustabilt par. ∎ torsdag den 4. februar 2010 29 torsdag den 4. februar 2010 30 Stabil matching • GS-algoritmen kan modificeres til at håndtere mange varianter af problemet: ! Polygami (hospitaler-lægestuderende) ! Forbudte partnere. ! Kun præferencer for nogle - resten lige meget. 5 repræsentative problemer ! Kun to præferencer: god eller dårlig. Flere eksempler • Effektiv implementation? ! Ser vi på om 2 uger i forbindelse med datastrukturer. • Hvis der er flere stabile matching’er hvilken en finder GS så? torsdag den 4. februar 2010 31 torsdag den 4. februar 2010 32
  • 9. Interval skedulering Vægtet interval skedulering • Input. Mængde af opgaver med start- og sluttider. • Input. Mængde af opgaver med start- og sluttider og vægte. • Mål. Find den største delmængde af kompatible opgaver. • Mål. Find den delmængde af kompatible opgaver der har størst vægt. Opgaverne overlapper ikke tidsmæssigt. a 23 b 12 c 20 d 26 e 13 f 20 g 11 h 16 Tid Tid 0 1 2 3 4 5 6 7 8 9 10 11 0 1 2 3 4 5 6 7 8 9 10 11 torsdag den 4. februar 2010 33 torsdag den 4. februar 2010 34 2-delt matching Uafhængig mængde • Input. 2-delt graf. • Input. Graf. • Mål. Find den største matching. • Mål. Find den største mængde uafhængige knuder. Mængde af knuder hvor der ikke er nogen kanter imellem. A 1 B 2 1 2 C 3 4 5 3 D 4 6 7 E 5 torsdag den 4. februar 2010 35 torsdag den 4. februar 2010 36
  • 10. Kompetitiv facilitetsplacering Læringsmål og pensum for dagens forelæsning • Input. Graf med vægte på knuderne. • Efter denne forelæsning vil du være i stand til at: ! Forklare begrebet algoritme. • Spil. 2 konkurrerende spiller skiftes til at vælge en knude. Det er ikke tilladt at vælge en knude hvis en af dens naboer er valgt. ! Definere stabil matching problemet. • Mål. Find ud af om der findes en strategi for spiller 2 der giver værdi B. ! Beskrive Gale-Shapley (GS) algoritmen på en klar måde. ! Anvende GS-algoritmen. ! Argumentere for at GS-algoritmen terminerer i endelige tid. ! Argumentere for at GS-algoritmen finder en korrekt løsning. 10 1 5 15 5 1 5 1 15 10 • Pensum: KT side 1-22. 2nd spiller kan garantere 20, men ikke 25. torsdag den 4. februar 2010 37 torsdag den 4. februar 2010 38 Læringsmål og pensum • Læringsmål: Efter denne forelæsning vil du kunne ! Forklare hvad køretid af en algoritme betyder og hvordan det beregnes. Analyse af algoritmer ! Forklare hvad worst-case køretid er. ! Lave simple beregninger i O-notation. ! Analysere algoritmers køretid vha. asymptotisk notation. ! Forklare hvad en polynomiel tids algoritme er. • Pensum: KT side 29-42 (afsnit 2.0-2.2) og side 65 midt-66 (“Solved Exercises”). torsdag den 11. februar 2010 1 torsdag den 11. februar 2010 2
  • 11. Analyse af algoritmer Køretid og beregningskridt • Analyse af algoritmer. • Køretid. Antal beregningsskridt en algoritme bruger på et givet input. • Afgøre algoritmens forbrug af ressourcer • Beregningsskridt. Abstraherer væk fra detaljer og forskelle i hardware ved at • tid, måle køretid i beregningskridt. Følgende operationer tæller som ét beregningskridt (RAM modellen): • hukommelse, ! Simple tildelinger: x = y, • cache-forbrug, ... ! Simple aritmetiske operationer (+, *, -, /, floor, ceiling, %, m.fl.). ! Simple sammenligninger: a < b, a = b, a > b. Eks. i > 0 and j>i; • Dette kursus: Mest om tid og en lille smule om hukommelse. ! Andre “trivielle” operationer som er uafhængige af inputstørrelsen • Argumentere for korrekthed. (conditional and unconditional branching, and, or,...). • Køretid angives som en funktion af inputstørrelsen: T(n). torsdag den 11. februar 2010 3 torsdag den 11. februar 2010 4 Beregningskridt: Eksempler Opgaver • Konstant antal beregningsskridt: • For hvilke af følgende operationer er T(n) konstant: for i = 1 to n { if (i > 0) then { j = 1 } else { j = j+2 } j = i·i + 3 } ÷ • Operationer som ikke tæller som et konstant antal beregningskridt er ✓ for i = 1 to 27 { eksempelvis j = i·i + 3 } ! Tildelingen x = Min(A) if (i < 14) ! T(n) afhænger af køretiden af algoritmen Min. for-løkken: then { x = i % 2} else { x = i / 2} ✓ for i = 1 to n { j = i + 1 } T(n) afhænger af n: T(n)~n. torsdag den 11. februar 2010 5 torsdag den 11. februar 2010 6
  • 12. Worst-case analyse (værste tilfælde-analyse) • Worst-case analyse. Find en grænse for den størst mulige køretid af en algoritme på input af en given størrelse n. • Average case analyse. Find en grænse for køretid af en algoritme på tilfældigt Asymptotisk analyse input af størrelse n. O-notation • Køretid = worst-case køretid i resten af dette kursus med mindre andet bliver sagt eksplicit. torsdag den 11. februar 2010 7 torsdag den 11. februar 2010 8 Størrelsesorden af køretidsfunktioner T(n)=7n2+3n+42 • Ønsker at sige noget om køretiden af en algoritme på input af størrelse n. 7n^2 3n 42 7n^2 3n 42 T(n) = 7n2 + 3n + 42. 3000 800 • For store n er led af lavere orden ubetydelige: T(n) ~ 7n2 2250 600 • Kan desuden ignorere konstante faktorer (ser kun på væksthastigheden): 1500 400 T(n) ~ n2 200 750 0 0 0 1 2 3 4 5 6 7 8 9 10 0 5 10 15 20 torsdag den 11. februar 2010 9 torsdag den 11. februar 2010 10
  • 13. Asymptotisk størrelseorden Notation • Øvre grænse. T(n) er O(f(n)) hvis der eksisterer konstanter c>0 og n0 ≥ 0 • Lettere misbrug af notation. T(n) = O(f(n)). således at for alle n ≥ n0 gælder T(n) ≤ c · f(n). • Vær opmærksom på: • Eksempler: T(n)= 7n2 + 3n + 42. ! O(f(n)) er en mængde af funktioner. ! 7n2 + 3n + 42 ≤ 7n2 + 3n2 + 42n2 ≤ (7+3+42)n2 for alle n ≥ 1 ! Kan ikke skrive O(n3) = f(n). T(n) er O(n2). ! f(n)=O(n3) og g(n)=O(n3) medfører ikke f(n) = g(n). Eks. f(n) = 5n3, g(n) = 3n2, ! men f(n) ≠ g(n). T(n) er også O(n3)! ! T(n) er ikke O(n). • Tænk på det som ∈ eller ⊆: T(n) ∈ O(f(n)) eller O(n2) ⊆ O(n3) torsdag den 11. februar 2010 11 torsdag den 11. februar 2010 12 Opgaver Asymptotisk størrelseorden • f(n) = 3n + 2n3 - n2 • Øvre grænse. T(n) er O(f(n)) hvis der eksisterer konstanter c > 0 og n0 ≥ 0 således at for alle n ≥ n0 gælder T(n) ≤ c · f(n). • f(n) = O(n)? ÷ • f(n) = O(n3)? ✓ • Nedre grænse. T(n) er Ω(f(n)) hvis der eksisterer konstanter c>0 og n0 ≥ 0 • f(n) = O(n4)? ✓ således at for alle n ≥ n0 gælder T(n) ≥ c · f(n). • g(n) = 4n2 + log n • Tæt grænse. T(n) er Θ(f(n)) hvis T(n) er både O(f(n)) og Ω(f(n)). • g(n)=O(n2 log n)? ✓ • g(n) = O(n2)? ✓ • Eksempel: T(n) = 7n2 + 3n + 42. • g(n) = O(f(n))? ✓ ! T(n) er O(n2), O(n3), Ω(n2), Ω(n) og Θ(n2). ! T(n) er ikke O(n), Ω(n3), Θ(n) eller Θ(n3). • f(n) = O(g(n))? ÷ • Obs: O-notation (O, Ω og Θ) bruges kun på ikke-negative funktioner. torsdag den 11. februar 2010 13 torsdag den 11. februar 2010 14
  • 14. Egenskaber Egenskaber • Transitivitet. • Symmetri ! f=O(g) og g=O(h) f=O(h). ! f = Θ(g) hvis og kun hvis g = Θ(f) ! f=Ω(g) og g=Ω(h) f=Ω(h) • Transponeret symmetri. ! f=Θ(g) og g=Θ(h) f=Θ(h). ! f=O(g) hvis og kun hvis g=Ω(f) • Additivitet. ! f=O(h) og g = O(h) f+g =O(h). • Addition og maximum. ! f=Ω(h) og g=Ω(h) f+g=Ω(h) ! max{f,g} = Θ(f+g) ! f=Θ(h) og g=Θ(h) f+g=Θ(h). torsdag den 11. februar 2010 15 torsdag den 11. februar 2010 16 Asymptotiske grænser for nogle almindelige funktioner Eksempler • Polynomier. a0 + a1 n + ....+ ad nd = Θ(nd) for ad > 0 • Find mindste tal: Min( a1,....,an]){ m = a1 konstant tid • Logaritmer. O(loga n) = O(logb n) for alle konstanter a, b > 0. gentages n-1 gange for i = 2 to n { kan undgå at specificere basen if (ai < m) then {m = ai} } • Logaritmer. log n = O(nx) for alle x > 0. return m log vokser langsommere end ethvert polynomie } • Lineær køretid: T(n)=O(n) og T(n)=Ω(n) dvs. T(n) = Θ(n) • Eksponenter. nd = O(rn) for alle r > 1 og d > 0. Enhver exponentiel funktion vokser hurtigere end ethvert polynomie torsdag den 11. februar 2010 17 torsdag den 11. februar 2010 18
  • 15. Eksempler m. 2 for-løkker Eksempler • Kvadratisk køretid: Loop1(n){ gentages n gange • Bubble-sort: Sorterer et array A af længde n indeholdende tal. x = 1 • T(n) = O(n2), for i = 1 to n { for j = 1 to n { • Eks. Input A=<3,67,34,2,25>. Output: A=<2,3,25,34,67> • T(n) = Ω(n2), x = x + 1 O(n) tid • T(n) = Θ(n2) } Bubblesort(A){ } return x for i = 2 to length[A]{ } for j = length[A] downto i { if (A[j] < A[j-1]) Loop2(n){ then { exchange A[j] A[j-1] } • Lineær køretid: x = 1 } gentages n gange • T(n) = O(n), for i = 1 to n { x = x + 1 } • T(n) = Ω(n), } } gentages n gange • T(n) = Θ(n) for j = 1 to n { x = x + 1 } • Kvadratisk køretid: T(n)=O(n2), T(n)=Ω(n2), dvs. T(n) = Θ(n2), hvor n er return m længden af A. } torsdag den 11. februar 2010 19 torsdag den 11. februar 2010 20 Eksempler Eksempel Loop4(n){ • Mere om løkker: x = 1 for i = 1 to n { for i = 2 to n { j = 1 x = Alg(i) while (j ≤ n) { } x = x + 1 j = 2·j } } • Hvor køretiden for Alg(i) = O(i)? O(n2) return x } • Hvor køretiden for Alg(i) = O(1)? O(n) • Linearitmisk (linearitmic) køretid: T(n)=O(n log n) og T(n)=Ω(n log n) dvs. T(n) = Θ(n log n). • Hvor køretiden for Alg(i) = O(log i)? O(n log n) • For hver iteration af for-løkken kører while-løkken log n gange: 1. gang er j =1, 2. gang er j=2, osv. Efter k iterationer er j= 2k. Løkken stopper når j = 2k > n, dvs. når k > log n. torsdag den 11. februar 2010 21 torsdag den 11. februar 2010 22
  • 16. Effektiv algoritme • Forslag til definition af effektiv algoritme (1): En algoritme er effektiv hvis den kører hurtigt på alle input. Effektive algoritmer • Brute force. For mange ikke-trivielle problemer er der en naturlig brute-force søgealgoritme der checker alle mulige løsninger. ! Typisk 2n tid/skridt eller værre for input af størrelse n. ! Uacceptabelt i praksis. n! for stabil matching med n mænd og n kvinder • Forslag til definition af effektiv algoritme (2): En algoritme er effektiv hvis den har bedre (worst-case) køretid end brute-force søgning. torsdag den 11. februar 2010 23 torsdag den 11. februar 2010 24 Polynomiel tid Worst-case polynomiel tid • Ønskelig skaleringsegenskab. Når input-størrelsen fordobles bliver algoritmen • Definition. En algoritme er effektiv hvis dens (worst-case) køretid er kun en konstant faktor langsommere. polynomiel. • Begrundelse. Det virker rent faktisk i praksis! Der findes en konstant d>0 således at T(n) =O(nd). ! Selv om 6.02 x 1023 x n20 teknisk set er polynomiel-tid, ville den være ubrugelig i praksis. ! I praksis, har polynomiel-tids algoritmer som bliver udviklet næsten altid • Definition. En algoritme kaldes for en polynomiel-tids algoritme hvis små konstanter og små eksponenter. ovenstående skaleringsegenskab holder. Vi siger også at algoritmen har ! At bryde igennem den eksponentielle barriere af brute force afdækker polynomiel køretid. typisk nogle grundlæggende strukturer ved problemet. • Undtagelser. ! Nogle polynomiel-tids algoritmer har høje konstanter og/eller høje eksponenter og er ubrugelige i praksis. ! Nogle eksponentiel-tids (eller værre) algoritmer er meget brugte da worst- case tilfældene ser ud til at være sjældne. torsdag den 11. februar 2010 25 torsdag den 11. februar 2010 26
  • 17. Hvorfor det er vigtigt Faldgruber • Pas på med ikke at forveksle Ω, Θ og O med worst-case, average-case og best-case analyse: • Worst-case analyse: ! Vi kigger på hvad T(n) er i værste tilfælde for input af størrelse n. • Ω, Θ og O: ! Siger noget om hvor tætte grænser vi har på funktionen T(n). ! T(n) = O(n) bruges når vi kender en øvre grænse for T(n). ! T(n) = Ω(f) bruges når vi har en nedre grænse for T(n). ! T(n) = Θ(n). Angiver at analysen af algoritmen er “tæt”. torsdag den 11. februar 2010 27 torsdag den 11. februar 2010 28 Eksempel Læringsmål og pensum • T(n) = antal iterationer i GS-algoritmen: Viste T(n)=O(n2) sidste gang. Er den • Læringsmål: Efter denne forelæsning vil du kunne også Ω(n2)? ! Forklare hvad køretid af en algoritme betyder og hvordan det beregnes. • Husk vi taler om worst-case! ! Forklare hvad worst-case køretid er. ! Lave simple beregninger i O-notation. • Sidst: for ethvert input er der højst n2 iterationer, dvs. T(n)=O(n2). ! Analysere algoritmers køretid vha. asymptotisk notation. • Vis at der findes input så der udføres n(n+1)/2 iterationer. Dvs. T(n)=Ω(n2). ! Forklare hvad en polynomiel tids algoritme er. • Pensum: KT side 29-42 (afsnit 2.0-2.2) og side 65 midt-66 (“Solved Exercises”). torsdag den 11. februar 2010 29 torsdag den 11. februar 2010 30
  • 18. Læringsmål og pensum • Læringsmål: Efter denne forelæsning vil du kunne ! Forklare hvad en hægtet liste er. ! Indsætte og slette elementer, samt søge i en hægtet liste. Introduktion til datastrukturer ! Argumentere for køretiderne af ovenstående operationer på en hægtet liste og angive dem i O-notation. Hægtede lister og tabeller ! Anvende binær søgning på en tabel (array). ! Angive køretiden for binær søgning i O-notation samt argumentere for den. ! Vurdere om tabeller eller hægtede lister passer bedst til en given implementation. ! Vælge datastrukturer til implementation af GS-algoritmen, samt analysere køretiden af implementationen. • Pensum: KT afsnit 2.3 + side 56. fredag den 19. februar 2010 1 fredag den 19. februar 2010 2 Datastruktur Implementation af stabil matching • Datastruktur: Måde til at organisere data så der effektivit kan søges og • Ønsker at implementere af GS-algoritmen modificeres i det. Initialiser alle personer til at være frie. while (en mand er fri som ikke har friet til alle kvinder) { Vælg sådan en mand m k = øverste kvinde på m’s liste som m ikke allerede har friet til if (k er fri) sæt m og k til at være forlovede else if (k foretrækker m frem for sin forlovede z) sæt m og k til at være forlovede, og z til at være fri. else k afviser m. } • Hvordan holder vi styr på • Hvilke mænd der er ledige. • Hvilken kvinde m skal fri til i denne runde. • Om kvinde k er ledig. • Om kvinde k foretrækker mand m frem for sin forlovede z. fredag den 19. februar 2010 3 fredag den 19. februar 2010 4
  • 19. Tabeller (arrays) • Egenskaber ved en tabel: • Kan tilgå det i’te element i O(1) tid: A[i] • Eksempel Tabeller • Hvem er forlovet med hvem • Tabel ikke egnet til dynamisk mængde: f.eks. ledige mænd. • besværligt at tilføje/fjerne elementer. fredag den 19. februar 2010 5 fredag den 19. februar 2010 6 Hægtede lister (linked lists) • Implementation af dynamisk mængde: (mængde der kan ændre størrelse). • Operationer: • Insert • Delete Hægtede lister (linked lists) • Search • Hægtet liste ~ kæde: Liste over de enkelte led i kæden, hvor det for hvert led er angivet hvilket led der er det efterfølgende. • Dobbelthægtet liste: Hvert led angiver hvilket led der er det foregående og hvilket der er det efterfølgende. fredag den 19. februar 2010 7 fredag den 19. februar 2010 8
  • 20. Hægtede lister Hægtede lister • Hægtet liste: Mængde af knuder, hvor hver knude har en værdi/et navn og • Demo indeholder en reference/peger til næste knude. • Hægtede lister i Java: • Nemt at definere som Java klasse. • En reference til en String eller Int. • En reference til en anden knude. • Brug speciel værdi null til at slutte listen. public class Node { private String name; private Node next; } fredag den 19. februar 2010 9 fredag den 19. februar 2010 10 Hægtede lister Hægtede lister • Dobbelthægtet liste: Mængde af knuder, hvor hver knude har en værdi/et • Eksempler: Liste L navn og indeholder referencer/pegere til en næste og foregående knude. • first.val = 9 • first.next.val = 4 eller (first.next).val = 4 • Hvert element e har: • first.next.next.val = 13 ((first.next).next).val = 13 • En værdi: e.val • x = first.next: x.prev.val = 9 • En pointer/reference til næste element: e.next • En pointer/reference til forrige element: e.prev 9 4 13 27 5 First prev next prev next prev next prev next prev next 9 4 13 27 5 first(L) prev next prev next prev next prev next prev next • Pointer first: peger på første element. • first.prev = null, last.next = null. • Pointer last: peger på sidste element (kan undværes). fredag den 19. februar 2010 11 fredag den 19. februar 2010 12
  • 21. Søgning i hægtede lister Indsættelse i hægtede lister • Søg efter værdien k i listen L. • Indsæt element e i forrest listen Search(L,k){ InsertFirst(L,e){ x = first(L) e.next = first(L) while x ≠ Null and x.val ≠ k do { if (first(L) ≠ Null) x = x.next then {first(L).prev = e} } first(L) = e return x e.prev = Null } } • Eksempel: Search(L,13) e 9 4 13 27 5 5 9 4 13 27 First(L) prev next prev next prev next prev next prev next first(L) prev next prev next prev next prev next prev next • Køretid: Θ(n) • InsertFirst tager en pointer/reference til elementet som input. fredag den 19. februar 2010 13 fredag den 19. februar 2010 14 Indsættelse i hægtede lister Indsættelse i hægtede lister • Indsæt element e i forrest listen • Indsæt element e mellem element d og f i listen L InsertFirst(L,e){ Insert(L,e,d,f){ e.next = first(L) e.next = f if (first(L) ≠ Null) e.prev = d then {first(L).prev = e} d.next = e first(L) = e f.prev = e e.prev = Null } } e • Insert tager en pointer/reference til elementet som input. 5 9 4 13 27 first(L) prev next prev next prev next prev next prev next • Køretid: O(1) • InsertFirst tager en pointer/reference til elementet som input. • Køretid: O(1) fredag den 19. februar 2010 15 fredag den 19. februar 2010 16
  • 22. Sletning i hægtede lister Sletning i hægtede lister • Slet element e fra listen L. • Slet element e fra listen L. Delete(L,e){ Delete(L,e){ if (e.prev = Null) if (e.prev = Null) then {first(L) = e.next} then {first(L) = e.next} else {(e.prev).next = e.next} else {(e.prev).next = e.next} if (e.next ≠ Null) if (e.next ≠ Null) then {e.next.prev = e.prev} then {e.next.prev = e.prev} } } e 9 4 13 27 5 9 13 27 5 First(L) prev next prev next prev next prev next prev next First(L) prev next prev next prev next prev next • Delete tager en pointer/reference til elementet som input. • Delete tager en pointer/reference til elementet som input. • Slet element med en given værdi v: Kald først Search(L,v) • Køretid: O(1) fredag den 19. februar 2010 17 fredag den 19. februar 2010 18 Hægtede lister opsummering • Følgende operationer: • Search(L,k): Θ(n) • InsertFirst(L,e): O(1) • Insert(L,e,d,f): O(1) • Delete(L,e): O(1) Mere om tabeller: binær søgning • Hvordan ville køretiderne blive påvirket hvis vi implementerede operationerne i en simpel tabel? • Dårligere køretider. • Search: Θ(N), hvor N størrelsen af tabellen (N ≥ n). • Enten Insert eller Delete får køretid Θ(n). fredag den 19. februar 2010 19 fredag den 19. februar 2010 20
  • 23. Binær søgning i tabeller (arrays) Binær søgning: Analyse • Givet sorteret tabel (array) A med n tal findes tallet x i A? • Hvor mange indgange kigger vi højst på? • Lineær søgning: Check alle indgange i tabellen fra 1....n. • En iteration: Tabellen vi kigger på bliver halvt så stor. Efter • 1. omgang: n/2 • Binær søgning: • 2. omgang: n/4 • Find værdien v af midterste indgang i A. • ...... • v = x: færdige • k’te omgang: n/2k • v < x: Gentag proceduren rekursivt på øverste halvdel af A • v > x: Gentag proceduren rekursivt på nederste halvdel af A • k skal være så stor at n/2k ≤ 1 k ≥ log2 n. • Køretid: Θ(log n). fredag den 19. februar 2010 21 fredag den 19. februar 2010 22 Binær søgning opgave Binær søgning pseudokode • Brug binær søgning til at lede efter tallene 7 og 42 i denne tabel. • Iterativ implementation BinarySearch(A,x){ lo = 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 hi = length[A] 2 5 7 11 12 14 16 25 32 33 42 45 64 67 78 83 92 while (lo ≤ hi) { mid = lo + (hi - lo)/2 if (x < A[mid]) then • 7: A[9]=32, A[4]=11, A[2]=5, A[3]=7 { hi = mid-1 } else if (x > A[mid]) then • 42: A[9]=32, A[13]=64, A[11]=42 { lo = mid+1 } else // x = A[mid] • Giv et generelt eksempel hvor binær søgning bruger log n skridt (vis at T(n)= { return mid // Found } Ω(log n)). } Tallet der søges efter er ikke i tabellen. return -1 // Not found • Hvorfor kan man ikke lave binær søgning i en sorteret hægtet liste i O(log n) } Kan ikke tilgå en bestemt position i listen i konstant tid. fredag den 19. februar 2010 23 fredag den 19. februar 2010 24