0
Velkommen

                                                                                                     • Inge Li ...
Hvad er en algoritme?                                                                            Algoritme

       • En al...
Algoritme: Pseudokode                                                                           Mere om algoritmer

      ...
Læringsmål og pensum for dagens forelæsning

       • Efter denne forelæsning vil du være i stand til at:
             !  ...
Stabil matching problemet                                                                                                 ...
En stabil matching
                           Schröder
                          Søren Brun
                              ...
Bevis for korrekthed: Terminering                                                           Bevis for korrekthed: Terminer...
Bevis for korrekthed: Stabilitet                                                                      Opsummering: Stabil ...
Interval skedulering                                                                                                   Væg...
Kompetitiv facilitetsplacering                                                                      Læringsmål og pensum f...
Analyse af algoritmer                                                                 Køretid og beregningskridt

       •...
Worst-case analyse (værste tilfælde-analyse)

       • Worst-case analyse. Find en grænse for den størst mulige køretid af...
Asymptotisk størrelseorden                                                                                        Notation...
Egenskaber                                                                              Egenskaber

       • Transitivitet...
Eksempler m. 2 for-løkker                                                                               Eksempler

       ...
Effektiv algoritme

                                                                                                     •...
Hvorfor det er vigtigt                                                                         Faldgruber

               ...
Læringsmål og pensum

                                                                                               • Lær...
Tabeller (arrays)

                                                  • Egenskaber ved en tabel:
                          ...
Hægtede lister                                                                                     Hægtede lister

       ...
Søgning i hægtede lister                                                                                  Indsættelse i hæ...
Sletning i hægtede lister                                                                       Sletning i hægtede lister
...
Binær søgning i tabeller (arrays)                                                                               Binær søgn...
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
Upcoming SlideShare
Loading in...5
×

Lectures1st half

353

Published on

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

  • Be the first to like this

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

No notes for slide

Transcript of "Lectures1st half"

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  1. A particular slide catching your eye?

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

×