Iehåll Föreläsig 6 Asymtotisk aalys usammafattig experimetell aalys uasymtotisk aalys Lite matte Aalysera pseudokode O-otatio ostrikt o Okulärbesiktig 2 Mäta tidsåtgåge uhur ska vi mäta tidsåtgåge? Experimetell aalys o Implemetera algoritme o Kör programmet med varierade datamägd Storlek Sammasättig o Aväd metoder för tidtagig så som System.curretTimeMillis() o Plotta uppmätt data Icke haterbara - superpolyom Haterbara - polyom Beräkigsbar/haterbar Beräkigsbara (!,, ) 1+ 2 +3* Alla (mattematiska)problem Ej beräkigsbara 3 4 Exekverigstider - e dator med 1 MIPS, 1*10 6 op/sek Experimetell aalys N 2 N 5 2 N N N 10 1/10000 1/10 1/1000 2.8 tim. 20 1/2500 3.2 sek. 1 s 3.3 billioer år 50 1/400 5.2 mi. 35.7 år Drygt 10 miljarder ms på e dag 1*10 24 ms seda Big Bag 7000 100 1/100 2.8 tim. 40000 billioer år 18500 300 9/100 28.1 dag. 7500 76800 ubegräsigar med metode Måste implemetera och testa algoritme Svårt att veta om programmet har staat eller fast i beräkigara. T ex. 2; =100 => 40000 billioer år Experimete ka edast utföras på e begräsad mägd av data, ma ka missa viktiga testdata Hårdvara och mjukvara måste vara de samma för alla implemetatioer 5 6
Geerellare metod behövs Asymtotisk aalys usom aväder e högivåbeskrivig av algoritmera istället för e implemetatio av de utar häsy till alla möjliga idata uaalys oberoede av hårdvara och mjukvara uutgår frå pseudokode uräka operatioer Ställ upp ett uttryck för atalet operatioer beroede av problemstorleke uförekla tidsuttrycket uta fram e fuktio som begräsar tidsuttrycket ovaifrå 7 8 Lite matematik behövs Kaske lite mer ulogaritmer log b (xy) = log b (x) + log b (y) log b (x/y) = log b (x) - log b (y) log b (xa) = a log b (x) log b (a) =log a (x)/log a (b) uexpoeter a (b +c ) = a b a c a bc = (a b ) c a b /a c = a (b-c ) b = a log a (b ) b c = a c*log a (b ) 9 10 Och äu mer matte Sista matte för dea gåg usummor är bra att kua Geerell defiitio t i= s f (i) = f (s) + f (s +1) + f (s + 2) +...f (t) Geometrisk utvecklig ( 0 och 0<a 1) i= 0 +1 1- a i =1+ a + a 2 + a 3 +...+ a a = 1- a oväxer expoetiellt uaritmetisk tillväxt, summera alla tal frå 1 t o m 100 i=1 i =1+ 2 + 3+...+ = 2 + 2 +1 1 0 1 2/2 3 11 12
Aalys av algoritmer Mer aalys av algoritmer uprimitiva operatioer Lågivå beräkigar som är i stort sett oberoede av programspråk och ka defiieras i termer av pseudokod: o Aropa e metod/fuktio o Returera frå e metod/fuktio o Utföra e aritmetisk operatio (+, -, ) o Jämföra två tal, etc. o Referera till e/ett variabel/objekt o Idexera i e array uispektera pseudokode och räka atalet primitiva operatioer. uväldig abstraktio, vi bortser frå hårdvara, och att olika operatioer tar olika låg tid, ualterativet är att titta på de verkliga tidera för de olika operatioera Ger e maskiberoede aalys 13 14 Exempel Jämföra T() -ege OH-bild Algorithm arraymax(a,) iput: A array A storig itegers output: The maximum elemet i A curretmax A[0] //1+1 for i 1 to -1 do //1+(1+1)+(-1)*([]+1) if curretmax < A[i] the //1+1+1+1 curretmax A[i] //1+1+1 retur curretmax //1 urita kurvor för T() och jämför svårt ualterativet är asymtotisk otatio/aalys Förekla jämförelse geom att avruda T() 1.000001 1 3 2 2 T max ()= 3+2+(-1)*8 +1 = 10-4 T mi ()= 3+2+(-1)*5 +1 = 7-1 15 16 Stora Ordo O(defiitio) f() c*g() => f() är av O(g()) cg() f() Defiitio: Givet fuktioera f() och g() säger vi att f() är O(g()) omm f() c*g() för 0 och c >0 och 0 1 0 Storlek på idata 17 18
f() är O(g()) Mer ordo uvarför ite f() O(g()) eller f() O(g()) uborde vara f() tillhör O(g()) ty O(g()) är e mägd fuktioer, ose bilde. Me vi skriver f() är O(g()) uf() = 7-3 hitta e fuktio som begräsar f()? Oädligt måga, hitta de mista Droppa allt utom de ledade terme dvs. lägre ordiges termer och kostater o 7-3 är O() o 8 2 log() + 5 2 + är O( 2 log()) ukostatera c och 0? Vi återkommer 19 20 Specialla klasser av algoritmer ulogaritmiska O(log()) ulijära O() ukvadradiska O( 2 ) upolyoma O( k ); k 1 uexpoetiella O(a ); 1 ulog() <<<< 2 << 3 <<2 uf() = 7-3 är O() Hitta c Exempel f () lim Æ g() +1 Ê 7-3ˆ Ê limá +1= lim Æ Ë 7-3 ˆ Á Æ Ë +1fi c = 8 u 0? 7-3 8; 0 =1? Ok! Alterativ Addera de positiva termera 21 22 O(sammafattig) O(varig) uo() aväds för att utrycka atalet primitiva operatioer som utförs som e fuktio av storleke på idata ue övre gräs för tillväxt uarraymax är e lijär algoritm dvs O() ue algoritm som körs på O() är bättre ä e O( 2 ), me O(log()) är bättre ä O() log() <<<< 2 << 3 <<2 uvar aktsam, stora kostater ställer till det T()=1000000 är e lijär algoritm O(), me i måga fall mycket midre effektiv på data mägder ä e algoritm med T() = 2 2 som är O( 2 ) O-otatioe är e stor föreklig, dvs e övre gräs, det fis släktigar som begräsar edåt Samt tagit bort kopplige till hårdvara. 23 24
O(geväg) O(exempel 1) uma ka måga gåger skippa väge över T() Väldigt grov uppskattig av tillväxte Ma gör e okulärbesiktig av algoritme o Iitiera e array är O() o Nästlade loopar är O()*O()* *O() O( k ) Algorithm prefixav1(x); Iput: A -elemet Array of umbers Output: A -elemet Array of umbers such that A[i] is the average of X[0],,X[i]. Let A be a array of umbers for i 0 to -1 do a 0 for j 0 to i do a a+x[j] A[i] a/(i+1) retur A Aalys: T b () =? T w () =? Me algoritme är av O( 2 ) 25 26 O(exempel 2) Algorithm prefixav1(x); Iput: A -elemet Array of umbers Output: A -elemet Array of umbers such that A[i] is the average of X[0],,X[i]. Let A be a array of umbers s 0 for i 0 to -1 do s s+x[i] A[i] s/(i+1) retur A Aalys: T() =? Me algoritme är av O() 27