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