Algoritm on loogiliste ja matemaatiliste probleemide lahendamise samm-sammuline protseduur — täpne ja lõplik juhend, mis kirjeldab, milliseid samme tuleb sooritada, millises järjekorras ning millised on võimaliku sisendi ja oodatava väljundi tingimused.

Retsept on hea näide algoritmist, sest selles on samm-sammult kirjas, mida tuleb teha. See võtab sisendid (koostisosad) ja annab tulemuse (valmis roog). Samuti on argielust lihtsate algoritmide näideteks suuna leidmine kaardil, sõnumi saatmine või hommikuse rutiini sammud.

Sõnad "algoritm" ja "algorism" pärinevad pärsia matemaatiku Al-Khwārizmī (pärsia keeles خوارزمی, umbes 780–850) nimest. Tema töödest ja meetoditest sai alguse terminoloogia, mis hiljem laienes automatiseeritud arvutusmeetodite kirjeldamiseks.

Peamised omadused

  • Lõplikkus — algoritm peab lõpule jõudma pärast lõpliku arvu samme.
  • Määratletud sammud — iga samm peab olema täpselt ja ambiguatsioonivabalt kirjeldatud.
  • Sisend — algoritm võib võtta 0 või mitu sisendit.
  • Väljund — algoritm toodab vähemalt ühe väljundi, mis on probleemi lahendus või ettevõtete seis.
  • Tõhusus (efektiivsus) — sammud peavad olema teostatavad piiratud ajal ja ressursiga; sageli hinnatakse ajaliselt ja mäluline keerukus.
  • Determinism vs nondeterminism — enamiku algoritmide puhul annab kindel sisend alati kindla väljundi (deterministlik); mõnel juhul kasutatakse nõrgalt määratletud või juhuslikke samme (mitte-det.).

Kuidas algoritme kirjeldatakse

Algoritme saab kirjutada tavakeeles, aga ka formaalsemates vormides, mis sobivad arvutamiseks ja analüüsiks. Levinumad viisid on:

  • pseudokoodis — inimloetav mälu- ja kontrollistruktuuride kirjeldus, mis ei järgi konkreetset programmeerimiskeelt;
  • vooskeemides — graafiline esitus, mis näitab sammude ja otsuste voogu;
  • programmeerimiskeeltes — täpne, masinloetav implementatsioon;
  • teoreetiliselt — kui loeme, milliseid operatsioone Turingi masin võiks teha, saame abstraktse mudeli algoritmi võimekuse hindamiseks.

Näited

  • Retsept — juba mainitud lihtne sammude loend.
  • Otsing — näiteks lineaarne või binaarotsing andmehulgas.
  • Sorteerimine — näiteks kuumaõhu sort, kiire sort (Quicksort) või sisestussort (Insertion sort).
  • Euclidi algoritm — suurima ühisteguri leidmiseks (näide matemaatikast).
  • Tööstus- ja igapäevased protseduurid — tootmisliini käsud, marsruutide planeerimine, finantstehingute valideerimine jmt.

Rakendused

Algoritmid on arvutiteaduse ja tehnoloogia alustalad, kuid neid kasutatakse laialdaselt ka väljaspool programmeerimist:

  • Andmetöötlus ja otsing — veebilehitsejad, otsingumootorid, andmebaasid;
  • Kõrgtasemeline tarkvara ja süsteemid — andmeanalüüs, masinõpe, neurivõrgud;
  • Krüptograafia — turvalised algoritmid andmete krüpteerimiseks ja allkirjastamiseks;
  • Robotite juhtimine ja tööstusautomaatika — liikumise planeerimine, andurikombinatsioonid;
  • Igapäevaotsused — lihtsad juhised ja protseduurid kodus, töökorralduses või meditsiinis (näiteks raviprotokollid).

Õigsus ja keerukus

Iga algoritmi puhul on kaks olulist küsimust:

  • Õigsus — kas algoritm annab iga lubatud sisendi puhul õige väljundi? Õigsust tõestatakse formaalselt või empiriliselt testides.
  • Keerukus — kui palju aega ja mälu algoritm nõuab sisendi suuruse kasvades? Selle hindamiseks kasutatakse asümptootilist notatsiooni (nt O(n), O(n log n)).

Parandus-, iteratiivsed ja rekursiivsed algoritmid

Algoritmid võivad olla kirjutatud iteratiivselt (tsüklid) või rekursiivselt (funktsioon kutsub iseennast). Valik sõltub probleemi loogikast, efektiivsusnõuetest ja lihtsusest. Mõnikord saab ühe ülesande lahendada mitmel viisil, millest igaühel on omad plussid ja miinused (lugemismugavus, mälu kasutus, kiirus).

Kokkuvõte

Algoritm on selge, lõplik ja järjepidev tegevuste jada, mis muudab sisendi väljundiks. Algoritmide mõistmine ja analüüs on oluline nii teoreetilises arvutiteaduses kui ka praktilistes rakendustes igapäevaelus, tööstuses ja teaduses. Õige kirjelduse, tõestuse ja keerukuse hindamise abil saab valida tõhusaid ja usaldusväärseid lahendusi erinevatele probleemidele.