De ce contează?
Imaginează-ți că explici unui robot cum să facă un sandviș. Robotul face EXACT ce-i spui — nimic mai mult. Dacă spui „pune untul” fără să spui „deschide borcanul mai întâi”, robotul apasă untul peste capac. Un algoritm este chiar asta: o listă de pași atât de clari încât chiar și o mașină fără pic de intuiție îi poate urma corect.
Definiție
Un algoritm este o secvență finită de pași bine definiți care rezolvă o problemă sau realizează o sarcină.
De ce ne trebuie? Pentru că un calculator nu „înțelege” problema ta — el doar execută, orbește și extrem de rapid, pașii pe care i-i dai. Dacă pașii sunt clari și corecți, calculatorul rezolvă în milisecunde ceva ce ție ți-ar lua ore. Dacă pașii sunt vagi, calculatorul greșește la fel de repede. Algoritmul este puntea dintre „ce vrei” și „ce poate face mașina”.
Trei proprietăți obligatorii:
- Finit — se termină după un număr limitat de pași
- Precis — fiecare pas e clar, fără ambiguitate
- Corect — produce rezultatul așteptat pentru orice date de intrare valide
„Adaugă puțină sare” NU este un pas algoritmic — „puțin” e ambiguu, fiecare ar înțelege altceva. „Adaugă 3 grame de sare” este precis: oricine îl execută obține exact același rezultat. Asta este diferența dintre o sugestie și un algoritm.
Primul tău algoritm: găsește maximul
Problemă: Ai trei numere. Găsește-l pe cel mai mare.
Algoritm în cuvinte:
- Citește numerele
a,b,c - Presupune că maximul este
a - Dacă
b > maxim, atunci maximul devineb - Dacă
c > maxim, atunci maximul devinec - Afișează maximul
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int maxim = a;
if (b > maxim) maxim = b;
if (c > maxim) maxim = c;
cout << maxim << endl;
return 0;
}Algoritmul „în mișcare”
Hai să-l urmărim pe valorile a=4, b=9, c=7. Cele trei numere stau unul lângă altul; săgeata maxim arată mereu spre cel mai mare găsit până acum.
4 | 9 | 7 |
a | b | c |
maxim=4 |
4 | 9 | 7 |
a | b | c |
maxim=9 |
4 | 9 | 7 |
a | b | c |
maxim=9 |
Observă cum săgeata se mută doar când găsește ceva mai mare — la pasul 4 nu se mișcă, pentru că 7 < 9.
Testează cu a=5, b=5, c=5. Algoritmul returnează 5 — corect. Testează și cu numere negative: a=-3, b=-1, c=-7 → returnează -1. Un algoritm bun funcționează pentru toate cazurile valide, nu doar pentru cele ușoare.
De ce contează ordinea pașilor?
Dacă ai scrie:
int maxim = a;
if (c > maxim) maxim = c; // am schimbat ordinea
if (b > maxim) maxim = b;Rezultatul este același — aici ordinea celor două comparații nu contează, pentru că fiecare verifică un număr diferit față de același maxim. Dar nu te obișnui cu ideea că ordinea e mereu liberă: la majoritatea algoritmilor ea este critică. Amintește-ți robotul cu sandvișul — dacă pui untul înainte să deschizi borcanul, totul se strică. La fel, dacă inversezi pasul 2 (maxim = a) cu pasul 3, ai compara cu un maxim care încă nu există.
Greșeala clasică: inițializezi maximul cu 0 în loc de a. Pare inofensiv și trece toate testele cu numere pozitive — apoi pică testul ascuns cu numere negative. Pentru a=-5, b=-3, c=-8 codul răspunde 0, deși 0 nici măcar nu se află printre numerele tale. Regula de aur: pornește maximul de la un element REAL din date (primul), nu de la o valoare inventată.
Algoritmi în viața de zi cu zi
| Situație | Algoritm |
|---|---|
| Rețetă de prăjitură | Pași în ordine, ingrediente precise |
| GPS — ruta cea mai scurtă | Algoritm Dijkstra |
| Căutare pe Google | Algoritmi de indexare + ranking |
| Recunoaștere față (Face ID) | Algoritmi de machine learning |
Toți pornesc de la același principiu: pași precisi, în ordine, care transformă o intrare într-o ieșire corectă.