Algoritmi on yksityiskohtainen toimintaohje.
Luonnollinen kieli on usein epämääräistä. Algoritmi on kuvattava jollakin formaalilla kielellä, jonka rakenteilla on yksityiskohtainen tulkinta. Ohjelmointikielet ovat tällaisia.
Tehtävän ratkaisu esitetään aluksi mahdollisimman täsmällisenä algoritmina, joka sitten kirjoitetaan ohjelmointikielellä.
Tietokoneella oleva kääntäjä (sekin on ohjelma) muuttaa ohjelman koneen ymmärtämälle konekielelle.
Konekielinen ohjelma voidaan suorittaa.
Esimerkki 1: Etsitään lukujoukon suurin luku.
Riittävä ohje ihmiselle, mutta ei kerro lainkaan, miten tehtävä suoritetaan:
Matemaattinen esitys:
x = max { a1, a2, ... , an }
Tämäkään ei kerro, miten suurin luku etsitään.
Algoritminen esitys:
x = a1, jos a2 > x, x = a2, jos a3 > x, x = a3, ... jos an > x, x = an.
Tämän voisi jo ohjelmoida tietokoneelle, jos n tunnetaan.
Entäpä jos n voi eri suorituskerroilla saada eri arvoja?
Parempi algoritmi:
n = 100 x = a1 i = 2, 3, ... n: jos ai > x, x = ai
Esimerkissä esiintyy kolme algoritmien perusrakennetta:
1 Peräkkäisyys:
Ensin asetetaan alkioiden lukumääräksi 100,
sitten muuttujan $x$ arvoksi lukujoukon ensimmäinen alkio
ja lopuksi suoritetaan varsinainen suurimman alkion etsintä.
2 Valinta:
Jos lukujoukon alkio on suurempi kuin
tähän mennessä löydetty suurin luku, suurimman arvoksi
vaihdetaan uusi luku.
3 Toisto:
Suoritetaan sama vertailu lukujoukon kaikille alkioille.
Tämä voitaisiin kirjoittaa suoraan C-kieliseksi ohjelmaksi:
n = 100 ; x = a[1] ; for (i=2; i <= n, i++) if (a[i] > x) x = a[i] ;
Tämä ei ole vielä täydellinen ohjelma (luvut ai eli ohjelmassa taulukon a alkiot on saatava jostakin ja lopputulos tulostettava tai sitä on käytettävä jotenkin muuten). Se sisältää kuitenkin algoritmin vastineen toteutettuna ohjelmointikielellä.
Esimerkki 2: Eratostheneen seula
Tämä on hyvin yksinkertainen antiikin aikainen menetelmä alkulukujen etsimiseksi.
Ohje on jo hyvin täsmällinen, mutta esimerkiksi askel 2 sisältää toiston, joten algoritmi vaatii vielä pientä tarkennusta ennen lopullista ohjelmointia.