150 likes | 295 Views
Keerukus uurimisvaldkonnana. Vaadatakse eraldi: Algoritmide keerukust (nii aja kui ruumi mõttes) Ülesannete lahendamise keerukust: kas mingi probleemide ehk ülesannete klassi jaoks on olemas algoritmi keerukusega vähem kui mingi f?
E N D
Keerukus uurimisvaldkonnana • Vaadatakse eraldi: • Algoritmide keerukust (nii aja kui ruumi mõttes) • Ülesannete lahendamise keerukust: • kas mingi probleemide ehk ülesannete klassi jaoks on olemas algoritmi keerukusega vähem kui mingi f? • Raske juhus: kuidas näida, et mingi probleemide klassi K jaoks ei ole kiiremat algoritmi, kui kiirusega mingi F? • Algoritme on lõpmatult palju, neid ei saa kõiki läbi proovida • Järelikult tuleb kavalalt tõestada, et kiiremat algoritmi kui kiirusega F ei saa antud probleemi jaoks olla. • Hulgaliselt suuri, olulisi, lihtsalt formuleeritavaid probleeme on senini lahendamata (näiteks P=NP?) Tanel Tammet
An example of the sort of basic question we study in this class is, how much time would this algorithm take? • How should we measure time? • The natural measure would be in seconds, but it would be nice to have an answer that didn't change every time Intel came out with a faster processor. We can measure time in terms of machine instructions; then dividing by a machine's speed (in instructions/second) would give the actual time we want. • However, it is hard to guess from a piece of pseudo-code the exact number of instructions that a particular compiler would generate. To get a rough approximation of this, we try measuring in terms of lines of code.
Running Times (why people worry about algorithm complexity) n = 10 100 1,000 10,000 100,000 1,000,000 O l og n 3 . 3219 6 . 6438 9 . 9658 13 . 287 16 . 609 19 . 931 2 l og n 10 . 361 44 . 14 0 99 . 317 176 . 54 275 . 85 397 . 24 3 . 162 10 31 . 622 100 316 . 22 1000 s q r t n 10 100 1000 10000 100000 1000000 n 6 7 33 . 219 664 . 38 9965 . 8 132877 1 . 66*10 1 . 99*10 n l og n 3 4 6 7 9 31 . 6 10 31 . 6*10 10 31 . 6*10 10 1 .5 n 4 6 8 1 0 1 2 100 10 10 10 10 10 2 n 6 9 1 2 1 5 1 8 3 1000 10 10 10 10 10 n 3 0 3 0 1 3 0 1 0 3 0 1 0 3 3 0 1 0 3 0 n 1024 10 10 10 10 10 2 35659 456573 5565710 1 5 7 2 5 6 7 n ! 3 628 800 9 . 3*10 10 10 10 10 Running times vs. problem size
Umbkaudsed astronoomilised piirid • Minimaalsed suurused: • Elektroni raadius ca 2.82 x 10-15 m • Minimaalsed ajad: • Aeg, mis võtab valgusel elektroni raadiuse läbimine: • Valguse kiirus: 300.000.000 m/s = 3*108 m / s • Elektroni raadiuse läbimise aeg • (2.82 x 10-15) / (3*108) = ca = 10-15 / 108 = ca = 10-23 sekundit • Maksimaalsed mahud: • Elektronide ja prootonite koguarv universumis ca 1080 • Maksimaalsed ajad: • Universumi vanus ca 1010 aastat = ca = 1016 sekundit • Universum kui hiidarvuti: • universumi eluea jooksul suudaks valgus läbida ühe elektroni raadiust kokku ca 1016 / 10-23 = ca = 1039 korda • universumi eluea jooksul suudaks valgus läbida kõigi elektronide raadiusi kokku ca (1016 *1080 ) / 10-23 = ca = 10119 korda
Veel kiiremini kasvavad funktsioonid • Supereksponentsiaalsed funktsioonid (mitmekordne eksponent) N N N Näiteks: exp3(1) = 1, exp3(2) = 16, exp3(3) = 7*1012 • Mittearitmeetilised funktsioonid (eksponentide kasvav torn): N ... N N Näiteks: expn(1) = 1, expn(2) = 16, expn(3) = 3 astmel 7*1012 Kombinatoorne plahvatus!!! N tk
Hirmsad keerukusfunktsioonid praktikas • Eksponentsiaalse keerukusega ülesanded on praktikas väga levinud • Supereksponentsiaalse ja mittearitmeetilise keerukusega ülesanded tulevad samuti ette • Paljusid selliseid ülesandeid saab kavalate algoritmidega praktikas päris hästi lahendada ka üpris suure ülesannete (suure N) jaoks: • lihtsalt sellised algoritmid ei tööta alati efektiivselt, vaid vahete-vahel. • ka sellest on palju kasu, kui neid ülesandeid vahete-vahel õnnestub mõistliku ajaga lahendada • Vahete-vahel kiirelt lahenduvate juhtude protsent võib praktikas osutuda üpris kõrgeks
Lahenduvus • Teame, et iga probleemi jaoks ei leidu kiiret algoritmi. • Kas aga iga probleemi jaoks on üldse olemas algoritmi, mis seda lahendab? • Eeldame, et vaatame ainult probleeme, mis on täpselt ja üheselt kirjeldatud ja kus on lahendamiseks olemas piisavalt infot (a la travelling salesman, malemäng jne) • Selgub, et iga täpselt formuleeritud probleemi jaoks ei leidugi lahendavat algoritmi! • Vähe sellest: kui võtta “juhuslik” probleem, siis tõenäosus, et lahendav algoritm leidub, on lõpmatult väike!
How to compute McCabe's Cyclomatic Complexity in Java methods McCabe proposed a way to measuring flow complexity of a method which basically counts one for each place where the flow changes from a linear flow. His algorithm, translated, at least approximately, into Java terms is as follows. His measurement was designed before exceptions and threads were used in programming languages, so what I've added I believe reflects some of the original intent. Start with a count of one for the method. Add one for each of the following flow-related elements that are found in the method.
Cobertura http://cobertura.sourceforge.net/download.html
Testwell CMT++/CMTJava • CMT++ and CMTJava analyses your applications for the following metrics : • Lines-of-code (LOC) metrics • Halstead's metrics • McCabe cyclomatic number v(G) • Maintainability Index http://www.verifysoft.net/en_evals.html
Rekursiooniteooria = arvutatavuse teooria Arvutus: algoritm SISEND VÄLJUND • Funktsioon on arvutatav, kui leidub algoritm, mis seda arvutab. REKURSIOONI- JA KEERUKUSTEOORIA Tiina Zingel
1.Funktsioonid ja relatsioonid. • Naturaalarvude hulk: N = {0, 1, 2, …}. • Sagedasti on tegemist algoritmidega, kus tulemuseks on “jah” või “ei”. Et tahame saada arvulist väljundit, siis samastame “jah” = 1 ja “ei” = 0. • Algoritmid – funktsioonid naturaalarvude hulgal
Osaline funktsioon: AB on funktsioon, mille määramispiirkonnaks (domain()) on hulga A mingi alamhulk ja muutumispiirkonnaks (range()) hulk B. • Rekursiivsed funktsioonid Algfunktsioonid: • Naturaalarvud 0, 1, 2, … (0-muutuja funktsioonid) • Nullfunktsioon 0: NN, 0(n) = 0 • Suksessorfunktsioon sc: NN, sc(n) = n+1 • cn(x1, … xn)=c, kus c=0,1,2…n=0,1,2… kus c=0,1,2…i=0,1,2… Rekursiivsete funktsioonide hulk P üle N: P sisaldab kõiki algfunktsioone, Kui g: NmN ja hk: NnN (k = 1, …, m) kuuluvad hulka P, siis kompositsioon g◦(h1, …, hm): NnN kuulub hulka P. Kui funktsioonid g: Nn-1N ja h: Nn+1N kuuluvad hulka P, siis kuulub hulka P ka funktsioon f: NnN, mis saadakse funktsioonidest g ja h rekursiooni teel. Rekursiivne funktsioon on selline funktsioon, mis kutsub iseennast välja