Professional Documents
Culture Documents
Laajuus 4 op
Luentoajankohtina opetusta voi seurata myös osoitteessa
https://jyufi.zoom.us/j/62483623748?pwd=akxqT3NoZEw2QzFsbmNyaGJKVVZlUT09.
• Algoritmeista
• Algoritmin analysointi
• Perustietorakenteista
• Järjestämisen perusteita
Ohjelmointikielet
• Ohjelmointikielellä ei ole tällä kurssilla kovin suurta merkitystä; tärkeintä on että osaa valitulla
kielellä ilmaista rakenteen selvästi ja ymmärrettävästi.
Pseudokoodi
• Tärkeintä on rakenne
Ongelma
Algoritmi
• ruokaohjeet
• käyttöohjeet
• tomintaohjeet
Algoritmien tietokonetoteutus
Esimerkkejä:
Algoritmi
Algoritmi
• laitteistosta
• ohjelmointiympäristöstä
• ohjelmoijasta . . .
Suoritusaikojen vertailu
• A on p × q-matriisi.
• B on q × r-matriisi.
• Huom! Matriisien kertolasku on liitännäinen, mutta ei vaihdannainen. Toisin sanoen pätee A(BC) = (AB)C,
mutta yleensä AB ̸= BA.
• Pienet syöttötiedot.
• Muistitilan tarve.
• Numeerinen tarkkuus.
Esimerkki: Algoritmin suoritusaika T (n)
Eräs ongelma, jonka syötteen koko on n, voidaan ratkaista algoritmeilla A, B, C ja D, joiden suoritusaikavaativuudet
(aikakompleksisuudet) alkeisoperaatioiden (primitiivioperaatioiden) määränä ilmoitettuna ovat syötteen koon suhteen
seuraavat:
1: s=0;
2: for(i=0;i<3*n;i++)
3: s=s+1
Average running time of LU matrix decomposition without pivoting, for different number of parallel
fragment processors disabled in a NVidia 6800 Ultra GPU, in function of matrix size. The number of
fragment processors associated with each data curve is shown on the right. The data shows almost
linear improvement in the performance of our algorithms as the number of fragment processors is
increased. (http://gamma.cs.unc.edu/LU-GPU/)
Esimerkki
Järjestämistehtävä: väliinsijoitusmenetelmä eli lisäyslajittelu (engl. insertion sort)
• Ks. https://visualgo.net/en/sorting.
Syöte: 83, 25, 79, 60, 12, 40
83 25 79 60 12 40
25 83 79 60 12 40
25 79 83 60 12 40
25 60 79 83 12 40
12 25 60 79 83 40
12 25 40 60 79 83
// Väliinsijoitusmenetelmä
1 for (j = 1; j < n; j++) {
2 key = a[j];
3 // Lisätään a[j] järjestettyyn alkuosaan a[0..j-
1]
4 i = j-1;
5 while (i >= 0 and a[i] > key) {
6 a[i+1] = a[i];
7 i = i-1;
8 }
9 a[i+1] = key;
10 }
• Rivin 1 for-silmukka suoritetaan kaikilla j:n arvoilla eli yhteensä n kertaa.
• Rivi 2 suoritetaan n − 1 kertaa (j = 1, . . . , n − 1).
• Rivi 4 samoin n − 1 kertaa (i = 0, . . . , n − 2).
• Rivin 5 while-lause suoritetaan, kun j = 1, . . . , n − 1. Olkoon cj se määrä kertoja, joka tätä
Pn−1
while-lausetta suoritetaan tietyllä j:n arvolla. Silloin while-lause suoritetaan yhteensä j=1 cj
kertaa.
• Rivi 6 suoritetaan vastaavasti n−1
P
Pn−1 j=1 (cj − 1) kertaa.
• Rivi 7 samoin j=1 (cj − 1) kertaa.
• Rivi 9 suoritetaan n − 1 kertaa.
Rivin i suoritusaika on rivin suorituskertojen lukumäärä kertaa yhden suorituskerran suoritusaika ti .
Algoritmin suoritusaika on rivien suoritusaikojen summa.
T (n) = t1 n + t2 (n − 1) + t4 (n − 1) + t5 n−1
P Pn−1 Pn−1
c
j=1 j + t 6 (c
j=1 j − 1) + t 7 j=1 (cj − 1) + t9 (n − 1)
Väliinsijoitusalg:n suoritusaika T (n) = t1 n+(t2 +t4 +t9 )(n−1)+t5 n−1
P Pn−1
j=1 cj +(t 6 +t 7 ) j=1 (cj −1)
riippuu järjestettävien alkioiden lukumäärästä n ja syöttötiedon järjestyksestä cj
• Tulostetaan suoritusajat.
• Tällä opintojaksolla esimerkit ovat testaamisen ja vertailun harjoittelemista varten (eivät es-
imerkkejä parhaista algoritmeista tiettyä käyttötarkoistusta varten).