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” !