Algoritms ir pakāpeniska, skaidri definēta procedūra vai recepte problēmas risināšanai vai uzdevuma izpildei. Algoritms apraksta soļu virkni, kas jāveic, lai no dotajiem ievades datiem iegūtu paredzamo izejas rezultātu.
Vienkāršs skaidrojums un piemērs
Recepte ir labs algoritma paraugs — tajā soli pa solim norādīts, kas jādara, kādas sastāvdaļas (ievade) jāizmanto un kāds būs gatavais ēdiens (izeja). Neoficiāli algoritmu bieži dēvē par soļu sarakstu, un to var aprakstīt arī parastā valodā.
Algoritma īpašības
- Determinētība (precizitāte) — katram solim jābūt skaidram un nediskutējamam.
- Beigu esamība (finītums) — algoritmam jābeidzas pēc galīgu soļu skaita (vai jānorāda, ka tas var darboties mūžīgi, ja tas ir paredzēts speciālai sistēmai).
- Ievade — algoritms var pieņemt vienu vai vairākas ievades vērtības.
- Izeja — algoritms rada vienu vai vairākas izejas vērtības, kas ir atrisinājuma vai rezultāta forma.
- Efektivitāte — secina, cik ātri un cik daudz resursu (piem., atmiņa) algoritms patērē.
- Izpildāmība — katrs solis jābūt veicams ar ierobežotu laiku un resursiem (praktiskā izpildāmība).
Kā algoritmus raksta un attēlo
Algoritmus skaitļošanā raksta ar dažādām metodēm: pseidokodā, plūsmas diagrammās vai tieši programmēšanas valodās. Šādi apraksti palīdz pārvērst ideju par kodu, kas darbosies datorā.
Tipiski veidi, kā attēlot algoritmus:
- Pseidokods — cilvēkam saprotams, tuvu programmēšanas valodai.
- Plūsmas diagrammas — vizuāls soļu un lēmumu attēlojums.
- Reāla programma — algoritma kodēta forma, kuru var izpildīt datorā.
Piemēri
Daži pazīstami algoritmu piemēri un kategorijas:
- Šķirošanas algoritmi (Bubble sort, Quick sort, Merge sort).
- Meklēšanas algoritmi (lineāra meklēšana, binary search).
- Grafu algoritmi (Dijkstra, BFS, DFS).
- Optimizācijas metodes (greedy algoritmi, dinamiskā programmēšana).
Vienkāršs pseidokods — binārā meklēšana sakārtotā masīvā:
function binarySearch(A, target): low ← 0 high ← length(A) - 1 while low ≤ high: mid ← (low + high) // 2 if A[mid] = target: return mid else if A[mid] < target: low ← mid + 1 else: high ← mid - 1 return -1 // nav atrasts
Algoritmu sarežģītība un efektivitāte
Algoritma izvērtēšana parasti balstās uz diviem galvenajiem rādītājiem:
- Laika sarežģītība — cik daudz laika (operāciju skaits) nepieciešams izpildei atkarībā no ievades lieluma. Parasti to izsaka kā Big O notāciju (piem., O(n), O(n log n)).
- Telpas (atmiņas) sarežģītība — cik daudz papildu atmiņas algoritms izmanto.
Skaitļošanas pamati un Tjūringa mašīna
Skaitļošanā algoritms tiek definēts kā precīzs darbību saraksts, ko var izpildīt ar Tjūringa mašīnu vai līdzvērtīgu aprēķinu modeli. Tjūringa mašīna ir teorētisks modelis, kas palīdz izprast, kas ir aprēķināms.
Church–Tjūringa teze apgalvo, ka viss, ko cilvēks var aprakstīt kā efektīvu algoritmu, ir aprakstāms ar Tjūringa mašīnu vai modernu programmēšanas valodu — tas ir pamatjēdziens skaitļošanas teorijā.
Līdzīgās un sarežģītākās tēmas
- Aprēķināmība — kuras problēmas ir risināmas ar algoritmiem un kuras nav (piem., nav risināms uzdevums: Paskāla izteiksmes pārbaude nav piemērs — neskaidrs; jāzina, ka dažas problēmas ir šķietami nerisināmas jeb nedecidējamas).
- NP-kompleksitāte — klasifikācija, kas saista problēmu risināšanas sarežģītību (P vs NP jautājums).
Vēsture un etimoloģija
Vārdi "algoritms" un "algorisms" ir atvasināti no persiešu matemātiķa Al-Khwārizmī (persiešu: خوارزمی, aptuveni 780–850). Viņa darbi par aritmētiku un algebrai devuši pamatu mūsdienu algebraiskajai domāšanai un numeriskajām metodēm, kā arī ietekmējuši terminu attīstību.
Kopsavilkums
Algoritms ir vispārīgs instruments problēmu risināšanai — no ikdienas recepšu līdz sarežģītām datorzinātņu metodēm. Saprast algoritmu īpašības (ievade, izeja, finišs, efektivitāte) un to pieraksta formas (pseidokods, plūsmas diagrammas, programmēšanas valodas) ir pamats, lai veidotu pareizu un efektīvu programmatūru vai risinātu matemātiskas problēmas.



