Didaxis
lecție · Informatică

Complexitatea algoritmilor

Timp, memorie și comparații între rezolvări; notația O numai unde programa o cere.

Se face în:
Clasa a IX-a
Clasa a X-a
Clasa a XI-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 3 · rezumatul lecției

Pe scurt

Două metode pot da același răspuns și totuși să folosească resurse diferite. Timpul unui algoritm poate fi estimat prin numărul de operații importante în funcție de mărimea intrării ; memoria prin spațiul suplimentar cerut. Dacă parcurgi un vector cu elemente o singură dată, numărul de verificări crește aproximativ odată cu . Dacă pentru fiecare element îl compari cu toate celelalte, numărul poate crește aproximativ ca .

Pentru 5 elemente, o parcurgere face 5 verificări; două bucle complete imbricate fac comparații. Pentru 10 elemente, cifrele devin 10 și 100. Compararea are sens doar după ce ambele metode sunt corecte și rezolvă aceeași problemă.

În Python, parcurgerea listei [4,7,2] verifică trei elemente; dacă lista are de două ori mai multe valori, aceeași buclă face de două ori mai multe verificări.

Desen la lecția „Complexitatea algoritmilor”
2în detaliustratul 2 din 3 · pentru clasă și Bacalaureat

În detaliu

Complexitatea unui algoritm măsoară resursele folosite în funcție de mărimea a intrării. Timpul se estimează prin numărul de operații elementare (comparații, adunări, atribuiri) efectuate în cel mai defavorabil caz, iar memoria prin spațiul suplimentar cerut, în afara celui ocupat de date. Notația exprimă un ordin de creștere: înseamnă că numărul de operații crește proporțional cu , că se înmulțește cu 4 când se dublează, că crește cu o unitate când se dublează. Notația ignoră constantele și termenii mai mici: este , iar este . Ea nu dă durata în secunde, ci compară algoritmi care rezolvă aceeași problemă.

Exemplul 1 — căutarea secvențială. Se caută o valoare într-un vector cu elemente, parcurgând de la început. În cazul cel mai defavorabil, valoarea este pe ultima poziție sau lipsește, deci se fac comparații. Pentru sunt cel mult 8 comparații, iar dacă se dublează la 16, numărul lor se dublează: complexitatea de timp este , iar memoria suplimentară este constantă, .

Exemplul 2 — perechile de elemente. Pentru a compara fiecare element cu toate cele de după el se folosesc două cicluri imbricate:

#include <iostream>
using namespace std;
int main() {
    int n = 100, c = 0;
    for (int i = 0; i < n; ++i)
        for (int j = i + 1; j < n; ++j)
            ++c;
    cout << c;
    return 0;
}

Programul afișează 4950, adică . Numărul perechilor este aproximativ , deci complexitatea este . Dacă crește de 10 ori, la 1000, numărul perechilor este 499 500, adică de aproximativ 100 de ori mai mare.

Exemplul 3 — înjumătățirea. Un ciclu care înjumătățește la fiecare pas valoarea lui până ajunge la 1 face aproximativ pași.

int n = 1000, pasi = 0;
while (n > 1) {
    n /= 2;
    ++pasi;
}
cout << pasi;

Valorile lui sunt 500, 250, 125, 62, 31, 15, 7, 3, 1, deci secvența afișează 9. Pentru , adică peste un milion, ar fi 20 de pași. De aceea căutarea binară într-un vector ordonat, care înjumătățește intervalul, are complexitatea .

Pentru a vedea diferența dintre ordine, compară numărul de operații pentru trei mărimi ale intrării. La un algoritm face aproximativ 10 operații, unul aproximativ 100, iar unul aproximativ 3 sau 4. La cifrele devin aproximativ 1000, un milion și 10. La algoritmul pătratic ajunge la o mie de miliarde de operații, pe când cel logaritmic face doar aproximativ 20.

Comparația dintre metode are sens numai dacă ambele sunt corecte. Un algoritm mai lent poate fi preferabil când intrările sunt mici sau când este mai simplu și mai sigur; criteriul se alege după limitele din enunț.

Cel mai bun caz și cel mai defavorabil caz pot diferi: la căutarea secvențială, o valoare aflată pe prima poziție se găsește după o singură comparație, dar descrie cazul defavorabil. De aceea o problemă trebuie să precizeze la ce caz se referă complexitatea cerută.

3pentru admiterestratul 3 din 3 · pentru examene

Pentru admitere

Numără pașii efectivi, nu deduce complexitatea numai din numărul de instrucțiuni scrise. O buclă de la 1 la cu o operație în interior este liniară. Două bucle imbricate cu limite dau ordin pătratic; două bucle consecutive de câte pași rămân liniare. Pentru , două parcurgeri separate înseamnă aproximativ 200 de pași, iar imbricarea completă aproximativ 10 000. Când limita ciclului interior depinde de cel exterior, numărul execuțiilor este o sumă: . Un ciclu în care variabila se dublează la fiecare pas (i *= 2) sau se înjumătățește (n /= 2) face aproximativ pași, nu . Dacă instrucțiunile din interiorul ciclurilor sunt simple și nu apar apeluri de funcții, numărul de operații se obține înmulțind numerele de execuții ale ciclurilor imbricate.

Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?

int c = 0;
for (int i = 1; i <= 5; i++)
    for (int j = i; j <= 5; j++)
        c++;
cout << c;
  • a) 10
  • b) 15
  • c) 20
  • d) 25

Răspunsul corect este b). Pentru ciclul interior se execută pentru , adică de 5 ori; pentru de 4 ori; apoi de 3, 2 și 1 ori. Suma este . Varianta d) ar rezulta dacă ciclul interior ar începe mereu de la 1, iar varianta a) numără numai perechile cu .

Verifică estimarea pe o valoare mică: la for (i = 1; i <= n; i *= 2) cu , variabila ia valorile 1, 2, 4, 8, 16, deci ciclul face 5 pași, adică , nu 16.

Greșeli frecvente

  • Greșit: spune timpul exact în secunde.
    Corect: exprimă cum crește numărul de operații când intrarea crește.
  • Greșit: două bucle scrise una după alta dau automat .
    Corect: costurile lor se adună și rămân dacă fiecare este liniară.
  • Greșit: memoria ocupată de intrare și memoria auxiliară sunt mereu aceeași măsură.
    Corect: precizează convenția folosită când compari spațiul algoritmilor.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
  • OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
  • OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
  • OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X intensiv; rocnee.eu
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI intensiv; rocnee.eu
  • UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro

Documente consultate

  • OMEC 4370/2026, anexa 8, p. 155–156; OMECI 5099/2009, anexa 5, Informatică X, p. 4–5; UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
  • Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
  • Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1632–1633; rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3 și 6; edu.ro
  • Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro

Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.