3.2 Kompleksisuus Vain pieni osa kaikista tehtävistä on laskettavissa tai edes osittainkaan laskettavissa. Laskettavien osalta saattaa olla tarpeellista.

Slides:



Advertisements
Samankaltaiset esitykset
Osaamisen ja sivistyksen parhaaksi Tilatiedot ja niiden muutokset
Advertisements

Ohjelman perusrakenteet
Tietorakenteet ja algoritmit
Yhteystila-algoritmi
Siniaaltotuotanto Tomas Södergård Vaasan Yliopisto.
Derivaatta MA 07 Derivaatta tarkoittaa geometrisesti käyrälle piirretyn tangentin kulmakerrointa.
Sovellusohjelman suunnittelu & toteutus
AS Automaation signaalinkäsittelymenetelmät
Valitse seuraaviin vaihtoehtotehtäviin oikea vastaus…
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
Taylor polynomi usean muuttujan funktiolle
KERTAUSTA PERUSASTEEN MATEMATIIKASTA Piia junes
Prosenttilaskua, tiivistelmä
TMA.003 / L3 ( )1 3. Funktioista 3.1. Kuvaus ja funktio Olkoon A ja B ei-tyhjiä joukkoja. Tulojoukon A  B = {(x,y) | x  A, y  B} osajoukko on.
5.3.3 Koodin generointi Koodin generointi tarkoittaa objektikoodin eli konekielisen ohjelman tuottamista. Generointi jakautuu kolmeen osatehtävään: 1.Muistin.
© Lammi-Niskala-Kossarev1 Algoritmiteoriaa Toiset tehtävät (ja sen ratkaisut) vaikeampia kuin toiset Toiset tehtävät (ja sen ratkaisut) vaikeampia kuin.
Kompleksisuuden kertaluokat
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
Ohjelman perusrakenteet
2. Vuokaaviot.
Aritmeettinen jono jono, jossa seuraava termi saadaan edellisestä lisäämällä sama luku a, a + d, a+2d, a +3d,… Aritmeettisessa jonossa kahden peräkkäisen.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Aritmeettinen jono jono, jossa seuraava termi saadaan edellisestä lisäämällä sama luku a, a + d, a+2d, a +3d,… Aritmeettisessa jonossa kahden peräkkäisen.
String-vertailusta ja Scannerin käytöstä (1/2)
Funktion ääriarvokohdat ja ääriarvot
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op ALU.
2.7 Rekursio ja iteraatio Algoritminen ongelmanratkaisu ei ole
3.2. Ensimmäisen asteen polynomifunktio
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
Miksi tämä on vaikeaa? Ilman minkäänlaisia rajoitteita ongelmat ei ole vaikeita ratkaista. Siihen löytyy jopa valmis ”kaava”. Valitettavasti jokaisessa.
2.8 TIETO- JA TALLETUSRAKENTEET
Algoritmi-harjoituksia…
UMF I Luento 7. Viime kerralta Lue II.5 ja II.6. Lause II.5.1 tapauksessa f(x,y) = (x, sin(y)) ja g(x, y) = (cos(x), y). Voit lähettää epäselvistä kohdista.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
PARAABELI (2. ASTEEN FUNKTION KUVAAJIA)
@ Leena Lahtinen Toistorakenne Ohjelmassa toistetaan tiettyjä toimenpiteitä monta kertaa peräkkäin Toisto noudattaa sille kuuluvia tarkkoja standardoituja.
Annuiteetti- eli tasaerälaina
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Visual Basic -ohjelmointi
2.1.2 Tason vektori koordinaatistossa
7. Määritä sellaisen ympyräsektorin keskuskulma, jonka pinta-ala on 1 ja piiri mahdollisimman lyhyt. Anna tulos 0,1 asteen tarkkuudella. Keskuskulma =
Kontrollirakenteet laajemmin
S ysteemianalyysin Laboratorio Teknillinen korkeakoulu Esitelmä 2 - Jirka Poropudas Optimointiopin seminaari - Kevät 2005 / 1 Bayes-verkoista s
Visual Basic -ohjelmointi
Samankantaisten potenssien kerto- ja jakolasku
Funktio.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Neperin luku e ja funktio y = ex
1 Sensor Tasking and Control Jari Hassinen Riikka Asikainen
Valintarakenne valintarakenne alkaa aina kysymyksellä eli ehdolla ehto tarkoittaa, että muuttujan sisältöä verrataan toisen muuttujan sisältöön tai vakioon.
21. Rekursio.
FOR i := 0...N-1 DO summa := summa + A[i] tulo := tulo * A[i] ENDFOR.
MAB3 prosenttilasku.
Prioriteettijonot ja kekolajittelu (heapsort)
Kuplalajittelu (bubble sort)
Ohjelma Mikro-ohjelmointi Symbolinen konekieli Osoitustavat.
Kompleksisuus. Algoritmien analyysissä tutkitaan algoritmien käyttämän (tietokone)ajoajan ja muistin määrän riippuvuutta syöttöaineiston koosta (N). Syöttöaineisto.
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Kompleksisuus Yleistä.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
8. Rekursio.
Kuutio 8 4. Potenssi ja polynomi
Murtoluku Murtoluku on jakolasku, jota ei ole laskettu loppuun asti.
9. Aritmeettiset operaatiot
8. Rekursio.
Kontrollirakenteet laajemmin
Iitin yläaste Matematiikka 7. luokka
Ohjelman perusrakenteet
Esityksen transkriptio:

3.2 Kompleksisuus Vain pieni osa kaikista tehtävistä on laskettavissa tai edes osittainkaan laskettavissa. Laskettavien osalta saattaa olla tarpeellista etukäteen tietää, minkä verran ne kuluttavat tietokoneen resursseja. Kompleksisuusteoria = tietojenkäsittelytieteen haara, joka tutkii kuinka paljon algoritmien suorittamisessa tarvitaan resursseja. Kompleksisuuden avulla voidaan vertailla eri algoritmien tehokkuutta saman tehtävän suorittamisessa.

Esimerkiksi syt-moduuli (s.48): MODULE syt (x, y) RETURNS x:n ja y:n suurin y. t. IF (x = y) THEN RETURN x ENDIF IF (x > y) THEN RETURN syt(x-y,y) ENDIF IF (x < y) THEN RETURN syt(x, y-x) ENDIF ENDMODULE Esim. syt(24,15) = syt(9, 15) = syt(9, 6) = syt(3, 6) = syt(3,3) = 3 Vastaava iteraatioon perustuva moduuli on sivulla 32.

Esimerkiksi syt-moduuli (s.48): Voidaan osoittaa, että syt(x, y) = syt(y, x MOD y) missä x MOD y tarkoittaa osamäärän x/y jakojäännöstä. Siten esimerkiksi syt(75,6) = syt (6,3)= syt (3, 0) = 3 (kun lisäksi määritellään, että syt(x,0) = x. Peräkkäiset vähennyslaskut on korvattu yhdellä jakolaskulla.

Nopeampi syt-moduuli : MODULE syt (x, y) RETURNS x:n ja y:n suurin y. t. IF (y = 0) THEN RETURN x ENDIF ELSE RETURN syt(y, x MOD y) ENDIF ENDMODULE Tämä algoritmi on sitä nopeampi mitä suurempi on lukujen x ja y erotus. Vrt. syt(24,15) =syt(15,9)=syt(9, 6)=syt(6,3)=syt(3,0)=3 ja toisaalta syt(240,15)= syt(15, 0)=15.

kompleksisuus... Vaikka tehtävä olisi laskettavissa, niin tehtävään laaditun algoritmin suorittaminen voi viedä liikaa resursseja. Tehtävä on kelvollinen (feasible), jos sen ratkaisemiseen on löydettävissä käyttökelpoinen algoritmi ja jos resurssitarve on kohtuullinen.

kompleksisuus...

kompleksisuus... Tärkeimmät tietokoneresurssit aika muisti (tila) laitteisto

kompleksisuus... tehtävän vaikeus kasvaa syötteen koon kasvaessa. Algoritmit käsittelevät syötettä, jonka koko (määrä) vaikuttaa algoritmin resurssi- tarpeeseen, yleensä niin, että tehtävän vaikeus kasvaa syötteen koon kasvaessa.

kompleksisuus... Algoritmin kompleksisuudella tarkoitetaan suoritukseen vaadittavien resurssien määrän riippuvuutta tehtävän koosta huonoimmassa tapauksessa. Tehtävän kompleksisuudella tarkoitetaan parhaan algoritmin (joka ratkaisee tehtävän) kompleksisuutta.

kompleksisuus... On pyrittävä löytämään kulloiseenkin tilanteeseen sopiva tasapaino eri resurssien välillä. Kriittiseksi muodostuva resurssi riippuu sovelluksesta: esim. tietokantajärjestelmissä se on tila, ohjausjärjestelmissä (lentokone, juna, auto, risteilyohjus) aika.

kompleksisuus... Seuraavaksi tarkastellaan aikaa. Algoritmin aikakompleksisuus eli aikavaativuus ilmoitetaan syötteen koon (n) funktiona T(n). Ajan yksikkönä ei käytetä todellista aikaa, vaan laitteistosta riippumatonta keskeistä alkeisoperaatioiden (esim. laskutoimitus) lukumäärää (kutsutaan niitä askeleiksi). yhteen- ja vähennyslasku kerto- ja jakolasku vertailut rekursiokutsut (ei huomioida luentomonisteessa)

MODULE VektorinSumma(v,n) RETURNS v:n alkioiden summa FOR i:=1..n DO summa:=summa + v[i] ENDFOR RETURN summa ENDMODULE Mikä on tämän moduulin aikavaativuus? silmukkalaskurin päivitystä ei yleensä oteta huomioon, koska se on erittäin vähän aikaa vievä operaatio samoin asetuslause kahden muuttujan yhteenlasku on sen sijaan hitaampi operaatio ja siksi on tarkastelun kohteena yhteenlaskuja tehdään 1 per kierros on kaiken kaikkiaan n kierrosta eli n yhteenlaskua (askelta) vastaus: moduulin VektorinSumma(v,n) aikavaativuus on T(n)=n Jos vektorin koko on 7, tehdään 7 askelta. Jos koko on 14, tehdään 14 askelta. Riippuvuus tehtävän koon ja suoritukseen kuluvan ajan välillä on lineraarinen, ja on T(n) = n

Polynomin arvo pisteessä x (s. 83) esim P(x) = 2x3 -4x2 +5x + 3 x annettu, halutaan tietää P(x) arvo P(x) yleisessä muodossa on P(x) =anxn+an-1xn-1+...+a1x1 + a0x0 = anxn+an-1xn-1+...+a1x + a0 polynomin erottavat sisaruksistaan omat kertoimet, esim. sivun ylälaidan polynomissa 2, 4, 5, 3, niitä on yleensä n+1 kpl, kun polynomin potenssi (korkein eksponentti) on n laaditaan moduuli, jossa aixi termien yheenlaskua i käy läpi arvot 1..n ensin lasketaan x potenssiin i, sitten termi aixi tervi aixi lisätään summa-muuttujaan

MODULE P(a0,..., an, x) RETURNS Pn(x) summa := a0 (* summan alustus *) FOR i:=1,...,n DO (* lasketaan x:n i.s potenssi: *) xpot:= 1 REPEAT i TIMES xpot := xpot * x ENDREPEAT (* termin arvo summataan summaan *) summa := summa + ai * xpot ENDFOR RETURN summa ENDMODULE

Aikavaativuusanalyysiä.. mitä enemmän termejä polynomissa (mitä suurempi on n), sitä enemmän toistoja tehdään jokaisella kieroksella i+1 kertolaskua ja yksi yhteenlasku kertolaskuja yhteensä T1(n)=2+3+…+(n+1) = = 1+2+..n – 1 + (n+1) =n(n+1)/2 – 1 + n + 1 = = n(n+1)/2 + n = (n(n+1)+2n)/2 = n(n+3)/2 yhteenlaskuja yhteensä T2(n)=n tehoton algoritmi => jos termejä on n, pitää tehdä neliöllisesti kertolaskuja! tehostetaan potenssilaskua hieman

potenssia ei ole tarpeen laskea joka kierroksella alusta asti MODULE P(a0,..., an, x) RETURNS Pn(x) summa := a0 xpot := 1 FORi:=1,...,n DO xpot := xpot *x summa := summa + ai * xpot ENDFOR RETURN summa ENDMODULE potenssia ei ole tarpeen laskea joka kierroksella alusta asti se saadaan laskettua kertomalla edellisen kierroksen potenssi x:llä kertolaskuja T1(n)=2n, yhteenlaskuja T2(n)=n jo parempi tehokkuus, muttei täydellinen tehostetaan hieman lisää

P3(x) = 2x3 -4x2 +5x + 3 voidaan kirjoittaa muodossa P3(x) = ((2x - 4)x + 5)x + 3 eli yleistäen Pn(x) = (((anx + an-1)x + an-2)x +...+a1)x + a0 Määritellään tämän uuden muodon termit Vi:llä sisimmistä lähtien ulompaanpäin: Vn = an Vk = x*Vk+1 + ak, kun k = n-1,n-2,…0 nyt Pn(x) = V0 (kaikkein uloin termi) huom. rekursio etenee 0:sta n:ään, eikä n:stä nollaan, niin kuin ollaan totuttu rekursion kanta löytyy Vn:stä

Pn(x) = V0 (kaikkein uloin termi): MODULE V(k,a0,...,an,x) RETURNS Vk(x) IF k=n THEN (* rekursion kanta *) RETURN an ELSE (* rekursion askel *) RETURN x*V(k+1,a0,...,an,x)+ak ENDIF ENDMODULE Pn(x) = V0 (kaikkein uloin termi): MODULE P(a0,...,an,x) RETURNS Pk(x) RETURN V(0,a0,...,an,x)

Aikavaativuusanalyysiä 2.. mikä on viimeksi laaditun moduulin P aikavaativuus? = moduulin V aikavaativuus siinä on 1 kertolasku ja 1 yhteenlasku k+1 ei huomioida, vastaa silmukalaskurin kasvattamista rekursiota ei luentomonisteessa huomioida, vaikka pitäisi rekursiotasoja on 0..n=n+1, mutta n:llä tasolla ei tehdä mitään, niin T1(n) = n ja T2(n) = n ekan algoritmin T1(n) oli n(n+3)/2 parannusta (n+3)/2 verran!!! koska yhteenlaskut ovat kertolaskuja paljon nopeampia suorittaa, niitä ei huomoida, eli T2:t jätetään pois tarkastelusta nyt askeleiden määrä kasvaa samassa määrin kuin tehtävän koko, riippuvuus on lineraarinen, T(n) = n katso myös iteratiivinen toteutus kotona