Algoritmas – tai žingsnis po žingsnio atliekama loginių ir matematinių problemų sprendimo procedūra. Algoritmas apibrėžia, kokie veiksmai bus vykdomi, kokia yra įvestis, kokia turi būti išvestis ir kokios taisyklės kontroliuoja perėjimą nuo vieno žingsnio prie kito.
Receptas yra paprastas algoritmo pavyzdys: jame žingsnis po žingsnio nurodoma, ką reikia atlikti. Receptas priima įvesties duomenis (ingredientus, įrankius, laiką) ir pateikia išvesties rezultatą (paruoštą patiekalą). Panašiai kompiuteriniai algoritmai priima duomenis, atlieka veiksmų seką ir grąžina rezultatą.
Istorija ir pavadinimo kilmė
Žodžiai „algoritmas“ ir „algorizmas“ kilę iš persų matematiko Al-Khwārizmī (persų k. خوارزمی, apie 780–850 m.) vardo. Jo darbai apie aritmetiką ir skaičiavimo metodus Vakarų mokslui buvo prieinami per lotynų vertimus, todėl jo vardas tapo sinonimu sistemingiems skaičiavimo metodams.
Pagrindinės algoritmo savybės
- Finitumas (aprėžtumas) – algoritmas turi baigtis per galutinį žingsnių skaičių.
- Deterministiškumas (aiškumas) – kiekvienas žingsnis turi būti užrašytas taip aiškiai, kad jį būtų galima vykdyti be papildomų paaiškinimų.
- Įvestis – algoritmas gali priimti nulinę arba daugiau įvesties reikšmių.
- Išvestis – algoritmas turi pagaminti bent vieną rezultatą arba būsenos pasikeitimą.
- Efektyvumas – kiekvienas žingsnis turi būti pakankamai paprastas, kad jį būtų įmanoma atlikti per baigtinį laiką (praktiškai – per priimtiną laiką ir atmintį).
Formalus supratimas kompiuterijoje
Kompiuterijoje algoritmas yra tikslus operacijų, kurias galėtų atlikti Tiuringo mašina, sąrašas. Tai reiškia, kad algoritmas apibrėžiamas taip, jog jį būtų galima įgyvendinti skaičiavimo modeliuose. Skaičiavimo tikslais algoritmai dažnai užrašomi:
- pseudokodu – natūralia kalba panašus, bet formalus žingsnių aprašymas;
- srauto diagramomis – vizualus žingsnių ir sprendimų kelių atvaizdavimas;
- programavimo kalbomis – kad algoritmas būtų įvykdytas kompiuteriu.
Algoritmų analizė ir sudėtingumas
Analizė apima laiko ir atminties sąnaudų vertinimą. Dažniausiai vartojamas asimptotinis įvertinimas – Big O (O(n), O(log n) ir kt.), kuris parodo, kaip sąnaudos auga priklausomai nuo įvesties dydžio. Vertinant algoritmą svarbu atskirti:
- Laiko sudėtingumas – kiek operacijų reikia;
- Atminties (erdvės) sudėtingumas – kiek papildomos atminties reikalaujama.
Dizaino metodai
Algoritmų kūrime naudojami bendri metodai:
- Dalijimasis ir valdyba (divide and conquer) – užduotis skaidoma į mažesnes, jas sprendžiant sprendimai sujungiami;
- Dinaminis programavimas – sprendžiamos užduotys, saugant tarpinius rezultatus (memoizacija);
- Godus (greedy) – priimami vietiniai optimalūs sprendimai vildamiesi gauti globalų optimalumą;
- Atgalinis ieškojimas (backtracking) ir svyruojantis paieškos – išsamiai tikrinamos galimos kombinacijos;
- Susitraukimas (pruning) – nereikalingų variantų atmetimas paieškos metu.
Panaudojimas kompiuterinėje informatikoje
Algoritmai yra visur: nuo paprastų funkcijų iki sudėtingų sistemų. Keletas svarbių sričių:
- Rūšiavimas ir paieška – pvz., QuickSort, MergeSort, Binary Search;
- Grafų algoritmai – Dijkstra, Bellman–Ford, BFS, DFS, MST (Kruskal, Prim);
- Kriptografija – RSA, elipsinių kreivių algoritmai, kuriems reikalingi saugūs matematiniai algoritmai;
- Mašininis mokymasis – optimizacijos, gradientų skaičiavimai, modelių apmokymas;
- Duomenų bazių indeksavimas ir užklausų vykdymas – B-medžiai, hashuotos struktūros;
- Vaizdo apdorojimas ir kompiuterinė vizija – filtrai, transformacijos, segmentavimas.
Kasdieniai pavyzdžiai
Be receptų, algoritmai slypi maršruto planavime (navigacijos programėlės), paieškos sistemose, automatinėje bankininkystėje, užsakymų maršrutizavime logistikoje, rekomendacijų sistemose ir kt.
Sąsaja su skaičiavimo teorija
Tyrimai apie algoritmus glaudžiai susiję su skaičiavimo (computability) ir sudėtingumo (complexity) teorijomis — sprendžiami klausimai, kokias problemas galima išspręsti algoritmiškai ir kiek efektyviai. Pavyzdžiui, klausimai apie P vs NP klasės skirtumus lieka esminiai teorinėje informatikos dalyje.
Apibendrinant: algoritmas yra praktinis ir teorinis instrumentas, leidžiantis sistemingai spręsti užduotis tiek kasdieniame gyvenime, tiek aukšto lygio kompiuterių programuose. Supratimas apie algoritmo savybes, reprezentacijas ir analizę leidžia kurti greitesnes, taupesnes ir patikimesnes sistemas.



