Algoritmi on vaiheittainen menettely loogisten ja matemaattisten ongelmien ratkaisemiseksi. Algoritmi kertoo yksityiskohtaisesti, mitä operaatioita ja missä järjestyksessä pitää suorittaa, jotta tietty tehtävä tulee tehdyksi.

Resepti on hyvä esimerkki algoritmista, koska siinä kerrotaan vaihe vaiheelta, mitä on tehtävä. Se ottaa syötteet (ainesosat) ja tuottaa tuloksen (valmiin ruoan). Samalla reseptit havainnollistavat, että algoritmien kuvaustapa voi olla hyvin arkinen ja helposti ymmärrettävä.

Sanat "algoritmi" ja "algorismi" ovat peräisin persialaisen matemaatikon nimestä Al-Khwārizmī (persia: خوارزمی, noin 780–850). Nimi on siirtynyt eurooppalaisiin kieliin muodossa, joka muistuttaa nykyistä termiä.

Epävirallisesti algoritmia voidaan kutsua "vaiheiden luetteloksi". Algoritmit voidaan kirjoittaa tavallisella kielellä, ja se voi olla kaikki, mitä ihminen tarvitsee. Tarkempaan analyysiin ja automaattiseen suorittamiseen algoritmit esitetään kuitenkin muodollisemmissa muodoissa.

Tietojenkäsittelyssä algoritmi on tarkka luettelo operaatioista, jotka Turingin kone voisi suorittaa. Laskentaa varten algoritmit kirjoitetaan pseudokoodiksi, vuokaavioiksi tai ohjelmointikieliksi.

Algoritmin tärkeimmät ominaisuudet

  • Selkeys (definiteness) — jokaisen vaiheen on oltava yksiselitteinen ja toteutettavissa.
  • Lopullisuus (finiteness) — algoritmin pitää päättyä lopulta; se ei voi jatkua äärettömästi, ellei tarkoituksena ole jatkuvan prosessin määrittely.
  • Syöte ja tuloste — algoritmi voi ottaa yhden tai useampia syötteitä ja sen tulee tuottaa yhden tai useamman tuloksen.
  • Tehokkuus — arvioidaan usein ajallisena (suoritusajan kasvu syötteen koon funktiona) ja tilavaatimuksina. Tehokkuutta kuvataan käyttäen esimerkiksi Big O -analyysiä.
  • Tehokkuus ja toteutettavuus (effectiveness) — jokainen vaihe on sellainen, että se voidaan suorittaa laskennallisesti tai mekaanisesti.

Esimerkkejä ja tyypillisiä tehtäviä

Algoritmeja löytyy monista arjen ja tietojenkäsittelyn tehtävistä:

  • Järjestäminen (esim. lajittelualgoritmit kuten kuplalajittelu, merge sort, quicksort).
  • Haku (esim. binäärihaku suurista järjestetyistä listoista).
  • Matemaattiset algoritmit (esim. Eukleideen algoritmi suurimman yhteisen tekijän löytämiseksi).
  • Verkko- ja polunetsintäalgoritmit (esim. Dijkstra, A*).
  • Kryptografiaan liittyvät algoritmit (avainten generointi, salaus, purku).

Toteutus, esitystavat ja analyysi

Algoritmin kuvaamiseen ja toteutukseen käytetään erilaisia tapoja riippuen tarkoituksesta:

  • Pseudokoodi — ihmisen luettava tapa kuvata algoritmin logiikkaa ilman kielen syntaksin yksityiskohtia; auttaa suunnittelussa ja analyysissä. pseudokoodiksi
  • Vuokaaviot — visuaalinen esitys, joka korostaa päätöspisteitä ja prosessivaiheita. vuokaavioiksi
  • Ohjelmointikielet — algoritmit toteutetaan lopulta ohjelmakoodina koneen tai käyttöjärjestelmän ajettavaksi. ohjelmointikieliksi
  • Matemaattinen analyysi — algoritmin oikeellisuuden (correctness) ja suorituksen päättymisen (termination) todentaminen sekä monimutkaisuuden arviointi.

Oikeellisuus ja monimutkaisuus

Kun algoritmi on suunniteltu, tulee varmistaa että se tekee juuri sen, mitä sen pitää (oikeellisuus) ja että se päättyy kaikissa hyväksytyissä syötetapauksissa (päättyvyys). Lisäksi arvioidaan:

  • Aikavaativuus — kuinka monta perusoperaatiota algoritmi tarvitsee syötteen koolla n (esim. O(n), O(n log n), O(n^2)).
  • Tilavaativuus — kuinka paljon muistia algoritmi tarvitsee.

Käytännön vinkkejä algoritmin suunnitteluun

  • Kirjoita ensin selkeä kuvaus tehtävästä ja vaatimuksista.
  • Hahmottele ratkaisu korkealla tasolla (esim. vuokaaviona tai pseudokoodina).
  • Tarkista oikeellisuus lyhyillä esimerkeillä ja reunatapauksilla.
  • Optimoi vasta kun toimiva ja oikea perusratkaisu on varmistettu.

Sovellukset

Algoritmeja käytetään lähes kaikilla tietojenkäsittelyn alueilla ja muissa teknisissä sovelluksissa: tietokantasovelluksissa, hakukoneissa, reitityksessä, koneoppimisessa, tietoturvassa, grafiikassa ja monissa muissa tehtävissä. Hyvin suunnitellut algoritmit parantavat suorituskykyä, pienentävät resurssien kulutusta ja mahdollistavat skaalautuvuuden suurissa järjestelmissä.

Yhteenvetona: algoritmi on yksityiskohtainen, toteutettavissa oleva ja analysoitavissa oleva vaiheiden sarja, jonka avulla ongelma ratkaistaan järjestelmällisesti. Arkiesimerkit kuten Resepti auttavat ymmärtämään käsitteen käytännössä, mutta tietojenkäsittelyssä hyödyllisyys ja vaatimukset edellyttävät usein muodollisempia esitystapoja kuten pseudokoodiksi, vuokaavioiksi tai ohjelmointikieliksi kirjoittamista sekä analysointia Turingin koneen kaltaisella laskentamallilla (Turingin kone).