1 / 15

Keerukus uurimisvaldkonnana

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?

sibyl
Download Presentation

Keerukus uurimisvaldkonnana

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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.

  3. 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

  4. 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

  5. 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

  6. 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

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

  8. 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.

  9. Cobertura http://cobertura.sourceforge.net/download.html

  10. 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

  11. Rekursiooniteooria = arvutatavuse teooria Arvutus: algoritm SISEND   VÄLJUND • Funktsioon on arvutatav, kui leidub algoritm, mis seda arvutab. REKURSIOONI- JA KEERUKUSTEOORIA Tiina Zingel

  12. 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

  13. Osaline funktsioon: AB 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: NN, 0(n) = 0 • Suksessorfunktsioon sc: NN, 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: NmN ja hk: NnN (k = 1, …, m) kuuluvad hulka P, siis kompositsioon g◦(h1, …, hm): NnN kuulub hulka P. Kui funktsioonid g: Nn-1N ja h: Nn+1N kuuluvad hulka P, siis kuulub hulka P ka funktsioon f: NnN, mis saadakse funktsioonidest g ja h rekursiooni teel. Rekursiivne funktsioon on selline funktsioon, mis kutsub iseennast välja

More Related