Effektiva algoritmer.pptx

LULEÅ UNIVERSITY OF TECHNOLOGY
LULEÅ UNIVERSITY OF TECHNOLOGY
Översikt
•  Algoritm?
•  Analys
–  Vad är det?
Effektiva algoritmer
Håkan Jonsson
Slides och kod av Fredrik Bengtsson
LULEÅ UNIVERSITY OF TECHNOLOGY
•  Effektiva algoritmer
–  En telefonlista!
•  Hur hittar man
namnet?
–  I telefonlistan
–  Två olika metoder
–  Stegvis beskrivning av procedur
•  För att utföra en bestämd uppgift
•  Effektivitet?
–  Proceduren går snabbt att genomföra
•  Ofta kan man göra en uppgift på flera olika sätt
•  Vi tar ett exempel
–  Leta upp ett telefonnummer
•  i en telefonlista
•  Sortering
–  ett exempel
•  Forskningsfronten...
!
•  Hemuppgift...
•  Slutsatser
LULEÅ UNIVERSITY OF TECHNOLOGY
Algoritm
•  Vad är det?
–  Hur fort går det
egentligen?
En telefonlista
•  Slå upp i telefonlista?
Namn
–  Leta från början?
•  Exempel
–  Stefan Candefjord
–  Hittad efter 5 namn
•  Maximalt
–  7 namn
–  samma som hela listan
Namn hittat!
telefon
Andersson(Karl(
5364(
Backlund4Norberg(Mia(
1019(
Bengtsson(Fredrik(
2431(
Birk(Wolfgang(
1965(
CandeCord(Stefan(
2386(
Carlson(Johan(
2517(
Castano(Miguel(
2328(
LULEÅ UNIVERSITY OF TECHNOLOGY
LULEÅ UNIVERSITY OF TECHNOLOGY
Telefonlista
•  Om vi börjar i mitten?
Namn
–  Står namnet före
–  ...eller efter mitten?
•  Exempel
–  Stefan Candefjord
–  Hittad efter 3 namn!
•  Maximalt
Vilken metod är bäst?
telefon
Andersson(Karl(
5364(
Backlund4Norberg(Mia(
1019(
Bengtsson(Fredrik(
2431(
Birk(Wolfgang(
1965(
CandeCord(Stefan(
2386(
Carlson(Johan(
2517(
Castano(Miguel(
2328(
–  Längre tid än tidigare
–  ...men hur mycket?
LULEÅ UNIVERSITY OF TECHNOLOGY
Större lista
•  ...istället för 14
•  Det var bra resultat!
–  Om vi dubblar igen?
•  Ytterligare ett steg
•  Vad händer om man fördubblar listans
storlek?
•  Första metoden (söka från början):
•  Andra metoden (dela på mitten):
LULEÅ UNIVERSITY OF TECHNOLOGY
–  OBS! Tillbaka till
gamla fallet efter
första jämförelsen!
–  Totalt 4 namn!
–  ...men!
–  Den är ännu bättre än det ser ut!
–  Dubbelt så lång tid (naturligtvis!)
Namn hittat!
–  3 namn
–  Mycket bättre än 7!
•  Börjar med Ding
Limei
•  Den senare verkar överlägsen...
Namn
Tidsåtgång
telefon
Andersson(Karl(
5364(
Backlund4Norberg(Mia(
1019(
Bengtsson(Fredrik(
2431(
Birk(Wolfgang(
1965(
CandeCord(Stefan(
2386(
Carlson(Johan(
2517(
Castano(Miguel(
2328(
Ding(Limei(
1788(
Elkotob(Muslim(
1594(
Gustafsson(Thomas(
1323(
Hallberg(Josef(
1177(
Harlin(Gösta(
1141(
Hedman(Anna(
3067(
Johansson(Anders(
1907(
Johansson(Andreas(
2334(
•  Första metoden (sök från början)
Gamla listan
...efter ett
steg
–  Tiden ökar lika fort som listans storlek
•  dubbelt=dubbelt
•  Andra metoden (dela på mitten)
–  Tiden ökar endast konstant (med 1)...
•  ...per fördubbling av listan
–  Det blir ”billigare” per namn
•  ... dvs behövs färre och färre jämförelser per namn...
•  ...ju större listan är!
LULEÅ UNIVERSITY OF TECHNOLOGY
LULEÅ UNIVERSITY OF TECHNOLOGY
Tidsåtgång
•  Andra metoden har Antal steg
lägre komplexitet!
•  För 4 miljarder namn
(4000000000)
–  Kolla alla: 4 miljarder
namn
–  Dela på mitten: 32
namn!
Hur gick det till?
•  Listan var sorterad
–  Annars hade vi inte kunnat söka så snabbt
–  Man säger att vi har använt en effektiv
representation av datat
Kolla alla
•  Ordna (representera) datamängd effektivt
Dela i två
LULEÅ UNIVERSITY OF TECHNOLOGY
–  Mycket viktigt
Antal namn
LULEÅ UNIVERSITY OF TECHNOLOGY
Slutsats
•  Enkelt exempel på effektiv algoritm
–  Kallas binärsökning
–  (den sämre kallas linjärsökning)
•  Effektiva algoritmer
–  Mycket stora prestandavinster
•  Väldigt många olika problem
–  liknande förbättringar
–  ...med effektiva algoritmer!
Tid för linjärsökning
•  Tiden för sökning i lista av
storlek n [i värsta fall]
–  Kalla tiden T(n)
–  Vi räknar antalet jämförelser
•  Vi inser:
T(n) = 1+ T(n-1 )
•  Vi utvecklar:
T(n) =
= 1 + T(n-1 ) =
= 2 + T(n- 2 ) =
= ... =
= k + T(n-k)
•  Vi vet att T(1)=1 (basfall!)
•  När n-k=1 <=> k=n-1 :
T(n) =
= k + T(n-k) =
= n-1 + T(n-(n-1 )) =
= n-1 + T( 1 ) =
= n-1 + 1 =
=n
•  Vi gör alltså n st jämförelser
–  i en lista av längd n
LULEÅ UNIVERSITY OF TECHNOLOGY
LULEÅ UNIVERSITY OF TECHNOLOGY
Tid för binärsökning
•  Tiden för sökning i lista av
storlek n [i värsta fall]
•  Vi vill att
⇔ n = 2k ⇔
k
= k + T(n/ 2 )
Vi delar listan i två delar
⇔ log n = log ( 2 k ) ⇔
⇔ log n = k
•  Vi inser att
•  Vi vet att T(1)=1 (basfall!)
T(n) =
= 1 + T(n/ 2 ) =
= 2 + T(n/ 4 ) =
= ... =
7 3 1 2 9 5 0 4 6 8
n/ 2 k = 1 ⇔
–  Kalla tiden T(n)
–  Vi räknar antalet jämförelser
T(n) = 1+ T(n/ 2 )
Mergesort
7 3 1 2 9
1 2 3 7 9
= log n + T(1) =
= log n +1
•  Vi gör alltså log n + 1 st
jämförelser
1 2 3 7 9
...sen sätter vi samman
delarna till en lista:
–  i en lista av längd n
–  Väldigt mycket färre än n
•  Hur många jämförelser?
T(n) =
= 2T(n/ 2 ) + n =
= 2( 2T(n/ 4 ) + n / 2 ) + n =
= 2 k T(n/ 2 k ) + n + n + ... + n =
= 2 T(n/ 2 ) + kn
0 4 5 6 8
= k + T(n / 2 k ) =
0 1 2 3 4 5 6 7 8 9
0 4 5 6 8
LULEÅ UNIVERSITY OF TECHNOLOGY
Varför är Mergesort bra nu då?
k
5 0 4 6 8
...och sorterar varje del för sig...
•  Då får vi
T(n) =
LULEÅ UNIVERSITY OF TECHNOLOGY
k
John von Neumann (1945)
Mergesort analys
•  ok, så vi vet att
T(n) = 2k T(n/ 2k ) + kn
•  Basfallet är ju T(1)=1
•  Vi vill att
k
n/ 2 = 1
•  Känner vi igen!
n/ 2 k = 1 ⇔
⇔ log n = k
•  Vi sätter in detta k:
T(n) =
= 2 k T(n/ 2 k ) + kn =
= 2log n T (1) + n log n =
= n + n log n
•  Att sortera n tal tar
alltså n + n log n
jämförelser med
Mergesort
LULEÅ UNIVERSITY OF TECHNOLOGY
LULEÅ UNIVERSITY OF TECHNOLOGY
Annan algoritm: ZelectionSort
•  I princip SelectionSort
–  (Ej in-place)
•  Ta hela tiden bort det
minsta och sätt sist i
resultaten
•  Exempel med
spelkort
•  Enkel analys:
•  Att ta bort minsta ur k
tal tar k-1 jämförelser
–  Tänk: Behövs bara 1
jämförelse för att ta det
minsta av 2 tal
En jämförelse
•  Mergesort i ena
ringhörnan
•  ZelectionSort i den andra
–  "Ta upprepade gånger och i
tur och ordning ut minsta
kvarvarande."
–  "Söndra och härska"
•  Komplexitet: n + n log n
•  Komplexitet: n(n-1)/2
–  ”O(n log n)"
–  ”O(n2)”
•  Alltså, med n tal i
början behövs
(n-1)+(n-2)+...+3+2+1
jämförelser, vilket är
n (n-1) / 2.
LULEÅ UNIVERSITY OF TECHNOLOGY
LULEÅ UNIVERSITY OF TECHNOLOGY
Maximum sum subsequence
•  Hitta största
sammanhängande
delsekvens
–  största = högst summa
•  Exempel:
•  Hur göra?
•  Räkna ut summan av alla
möjliga delsekvenser
–  spara den största
•  Ganska tidskrävande:
–  Med n tal finns
•  ”O(n2)”
-1 -1 4
-2 1
–  Tar i storleksordningen
jämförelser(!)
•  ”O(n3)”
•  Hitta de k st. segment vars totalsumma är maximal!
(vi bestämmer oss för ett visst k)
•  För några år sedan ett öppet forskningsproblem
•  Komplexitet?
–  T(n) = n
n(n-1) / 2
olika delsekvenser som alla
ska summeras...
-3 3
Helt kort: Ett svårare problem...
[Fredrik Bengtsson och Jingsen Chen, 2006]
k=2:
n3
-3 3
-1 -1 4
-2 1
3
-1 3
-2
•  Finns smartare sätt!
5
+
6
= 11
LULEÅ UNIVERSITY OF TECHNOLOGY
LULEÅ UNIVERSITY OF TECHNOLOGY
Hemuppgift - artikel
•  Läs artikel:
•  Communications of the ACM
•  Volume 27 Issue 9, Sept. 1984
•  Läs fram t o m avsnittet Two Quadratic algorithms
–  I det avsnittet beskrivs två algoritmer som är snabbare
(effektivare) än The cubic algorithm (Algorithm 1, sid. 865)
•  Skriv en rapport med LaTeX på svenska och förklara med
dina egna ord hur algoritmerna fungerar
–  Programming pearls: algorithm design
techniques – Jon Bentley
–  Börja med att introducera problemet och The Cubic Algorithm
–  Viktigast: Vad är det för specifika (konkreta) insikter som gör
algoritmerna snabbare?
•  http://dl.acm.org/citation.cfm?id=381162
–  Förklara så att någon i klassen som inte läst artikeln förstår
–  Den 2:a algoritmen använder en "cumulative array", även kallad
Prefix sum:
https://en.wikipedia.org/wiki/Prefix_sum
•  Länken fungerar (bara) inom LTU
•  Från ett LTU-datornät t ex det trådlösa
•  Jämför med The Cubic Algorithm
•  Lämna in i Canvas
LULEÅ UNIVERSITY OF TECHNOLOGY
Obs! Ett fel i artikeln
•  Rad 5 i Algorithm 2:
–  ”Sum := Sum + X[I]”
–  …är fel
•  Det ska stå:
–  ”Sum := Sum + X[U]”
LULEÅ UNIVERSITY OF TECHNOLOGY
Nu kan ni allt om algoritmer! !
•  Bra citat:
–  ”Grubbla på detta hemma”
–  ”Till och med vaktmästarn kan detta” !