Översit Effetiva algoritmer Håan Jonsson Slides och od av Fredri Bengtsson Algoritm? Vad är det? Effetiva algoritmer En telefonlista! Hur hittar man namnet? I telefonlistan Två olia metoder Slutsatser Analys Hur fort går det egentligen? Sortering ett exempel Forsningsfronten... J Hemuppgift... Algoritm En telefonlista Vad är det? Stegvis besrivning av procedur För att utföra en bestämd uppgift Effetivitet? Hur snabbt proceduren går att genomföra Ofta an man göra en uppgift på flera olia sätt Vi tar ett exempel Leta upp ett telefonnummer i en telefonlista Slå upp i telefonlista? Leta från början? Exempel Stefan Candefjord Hittad efter 5 namn Maximalt 7 namn samma som hela listan Namn hittat! Namn telefon Andersson Karl 5364 Baclund-Norberg Mia 1019 Bengtsson Fredri 2431 Bir Wolfgang 1965 Candefjord Stefan 2386 Carlson Johan 2517 Castano Miguel 2328
Telefonlista Vilen metod är bäst? Om vi börjar i mitten? Står namnet före...eller efter mitten? Exempel Stefan Candefjord Hittad efter 3 namn! Maximalt 3 namn Mycet bättre än 7! Namn telefon Andersson Karl 5364 Baclund-Norberg Mia 1019 Bengtsson Fredri 2431 Bir Wolfgang 1965 Candefjord Stefan 2386 Carlson Johan 2517 Castano Miguel 2328 Namn hittat! Den senare verar överlägsen......men! Den är ännu bättre än det ser ut! Vad händer om man fördubblar listans storle? Första metoden (söa från början): Dubbelt så lång tid (naturligtvis!) Andra metoden (dela på mitten): Längre tid än tidigare...men hur mycet? Större lista Tidsåtgång Börjar med Ding Limei OBS! Tillbaa till gamla fallet efter första jämförelsen! Totalt 4 namn!...istället för 14 Det var ett bra resultat! Om vi dubblar igen? => Ytterligare ett steg Namn telefon Andersson Karl 5364 Baclund-Norberg Mia 1019 Bengtsson Fredri 2431 Bir Wolfgang 1965 Candefjord Stefan 2386 Carlson Johan 2517 Castano Miguel 2328 Ding Limei 1788 Elotob Muslim 1594 Gustafsson Thomas 1323 Hallberg Josef 1177 Harlin Gösta 1141 Hedman Anna 3067 Johansson Anders 1907 Johansson Andreas 2334 Gamla listan...efter ett steg Första metoden (sö från början) Tidsåtgången öar lia fort som listans storle öar Dubbel längd=dubbel tidsåtgång Andra metoden (dela på mitten) Tidsåtgången öar endast onstant (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!
Tidsåtgång Andra metoden har Antal steg lägre omplexitet! För 4 miljarder namn (4000000000) Kolla alla: 4 miljarder namn Dela på mitten: 32 namn! (8 miljarder, nästan alla i världen => 33 namn ) Kolla alla Dela i två Antal namn Hur gic det till? Listan var sorterad Annars hade vi inte unnat söa så snabbt Man säger att vi har använt en effetiv representation av datat Ordna (representera) datamängd effetivt Mycet vitigt när man programmerar! om programmen hanterar stora datamängder och man vill ha snabba program (och det vill man J ) Slutsats Tid för linjärsöning Enelt exempel på effetiv algoritm Kallas binärsöning (den sämre allas linjärsöning) Effetiva algoritmer Mycet stora prestandavinster Väldigt många olia problem linande förbättringar...med effetiva algoritmer! Tiden för söning i lista av storle n [i värsta fall] Kalla tiden T(n) Vi ränar antalet jämförelser Vi inser: Vi utveclar: =... = = + T(n-) Vi vet att T(1)=1 (basfall!) När n-=1 <=> =n-1 : = + T(n-) = = 2 + T(n-2 ) = = 1+ T(n-1 ) = 1+ T(n-1 ) = 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
Tid för binärsöning Mergesort John von Neumann (1945) Tiden för söning i lista av storle n [i värsta fall] Kalla tiden T(n) Vi ränar antalet jämförelser Vi inser att 1+ T(n/ 2 ) Vi vet att T(1)=1 (basfall!) = 1+ T(n/ 2 ) = = 2 + T(n/ 4 ) = =... = = + T(n/ 2 ) Vi vill att n/ 2 = 1 n = 2 log n log n = Då får vi = log n +1 Vi gör alltså log n + 1 st jämförelser i en lista av längd n Väldigt mycet färre än n = log ( 2 = +T(n / 2 ) = = log n +T(1) = ) Vi delar listan i två delar...sen sätter vi samman delarna till en lista: 7 3 1 2 9 5 0 4 6 8 7 3 1 2 9 5 0 4 6 8...och sorterar varje del för sig... 1 2 3 7 9 0 4 5 6 8 1 2 3 7 9 0 4 5 6 8 0 1 2 3 4 5 6 7 8 9 Varför är Mergesort bra nu då? Mergesort analys Hur många jämförelser? = 2T(n/ 2 ) + n = = 2( 2T(n/ 4 ) + n / 2 ) + n = = 2 = 2 T(n/ 2 T(n/ 2 ) + n + n +... + n = ) + n o, så vi vet att 2 T(n/ 2 ) + n Basfallet är ju T(1)=1 Vi vill att n/ 2 =1 Känner vi igen! n/ 2 = 1 log n = Vi sätter in detta : = 2 T(n/ 2 = 2 logn T (1) + nlog n = = n + nlog n ) + n = Att sortera n tal tar alltså n + n log n jämförelser med Mergesort
Annan algoritm: ZelectionSort En jämförelse I princip SelectionSort (Ej in-place) Ta hela tiden bort det minsta och sätt sist i resultaten Exempel med spelort Enel analys: Att ta bort minsta ur tal tar -1 jämförelser Tän: Behövs bara 1 jämförelse för att ta det minsta av 2 tal Alltså, med n tal i början behövs (n-1)+(n-2)+...+3+2+1 Mergesort i ena ringhörnan "Söndra och härsa" Komplexitet: n + n log n O(n log n)" ZelectionSort i den andra "Ta upprepade gånger och i tur och ordning ut minsta varvarande." Komplexitet: n(n-1)/2 O(n 2 ) jämförelser, vilet är n (n-1) / 2. En jämförelse Maximum sum subsequence Mergesort i ena ringhörnan "Söndra och härsa" Komplexitet: n + n log n O(n log n)" ZelectionSort i den andra "Ta upprepade gånger och i tur och ordning ut minsta varvarande." Komplexitet: n(n-1)/2 O(n 2 ) Input 3mergeSort zelectionsort L m m/l z z/l z+m z/m l1 1000 0,010 9,54E*06 0,142 0,00014 0,151 14,849 l2 2000 0,018 8,75E*06 0,527 0,00026 0,544 30,101 l4 4000 0,030 7,42E*06 2,068 0,00052 2,098 69,729 l8 8000 0,060 7,51E*06 8,339 0,00104 8,400 138,820 l16 16000 0,115 7,21E*06 33,333 0,00208 33,449 288,964 l32 32000 0,257 8,02E*06 133,899 0,00418 134,156 521,897 l64 64000 0,570 8,91E*06 544,152 0,00850 544,722 954,123 Hitta största sammanhängande delsevens största = högst summa Exempel: -3 3-1 -1 4-2 1 Hur göra? Räna ut summan av alla möjliga delsevenser spara den största Gansa tidsrävande: Med n tal finns n(n-1) / 2 olia delsevenser som alla sa summeras... O(n 2 ) Tar i storlesordningen n 3 jämförelser(!) O(n 3 ) Finns smartare sätt!
Helt ort: Ett svårare problem... Hemuppgift - artiel Hitta de st. segment vars totalsumma är maximal! (vi bestämmer oss för ett visst ) För några år sedan ett öppet forsningsproblem Komplexitet? n [Fredri Bengtsson och Jingsen Chen, 2006] =2: -3 3-1 -1 4-2 1 3-1 3-2 Läs artiel: Communications of the ACM Volume 27 Issue 9, Sept. 1984 Programming pearls: algorithm design techniques Jon Bentley http://dl.acm.org/citation.cfm?id=381162 Länen fungerar (bara) inom LTU Från ett LTU-datornät t ex det trådlösa 5 + 6 = 11 Obs! Ett fel i artieln Läs fram t o m avsnittet Two Quadratic algorithms I det avsnittet besrivs två algoritmer som är snabbare (effetivare) än The cubic algorithm (Algorithm 1, sid. 865) Sriv en rapport med LaTeX på svensa och förlara med dina egna ord hur algoritmerna fungerar Börja med att introducera problemet och The Cubic Algorithm Vitigast: Vad är det för specifia (onreta) insiter som gör algoritmerna snabbare? Jämför med The Cubic Algorithm Förlara så att någon i lassen som inte läst artieln förstår Den 2:a algoritmen använder en "cumulative array", även allad Prefix sum: https://en.wiipedia.org/wii/prefix_sum Rad 5 i Algorithm 2: Sum := Sum + X[I] är fel Det sa stå: Sum := Sum + X[U] Lämna in i Canvas
Nu an ni allt om algoritmer! J Bra citat: Grubbla på detta hemma Till och med vatmästarn an detta J