Analiza complexității temporale și spațiale este un domeniu fundamental al informaticii, care ne permite să evaluăm eficiența unui algoritm în funcție de resursele consumate: timp (numărul de operații elementare) și memorie (spațiul de stocare). Pentru Bacalaureat, este esențial să înțelegem notația asimptotică Big O, care descrie comportamentul unui algoritm atunci când dimensiunea datelor de intrare (n) tinde la infinit. Cele mai comune complexități sunt: O(1) – constantă, O(log n) – logaritmică, O(n) – liniară, O(n log n) – cvasi-liniară, O(n²) – pătratică, O(2ⁿ) – exponențială.
Complexitatea spațială se referă la memoria suplimentară folosită de algoritm (excluzând memoria pentru datele de intrare). De exemplu, un algoritm de sortare prin selecție are complexitate temporală O(n²) și spațială O(1) (nu folosește vectori auxiliari), în timp ce Merge Sort are O(n log n) temporal și O(n) spațial (necesită un vector temporar). În analiză, se iau în considerare cele mai defavorabile cazuri (worst-case), dar și cazul mediu.
Pentru exercițiile de Bac, se cere identificarea complexității unor secvențe de cod, adesea bucle imbricate sau recursivitate. Regula generală: pentru o buclă care se execută de n ori, complexitatea este O(n); pentru două bucle imbricate independente, O(n²); pentru o buclă care se reduce la jumătate la fiecare pas (divide et impera), O(log n). De asemenea, apelurile recursive simple, fără combinare, pot genera complexități exponențiale dacă numărul de apeluri crește rapid (ex: Fibonacci naiv O(2ⁿ)).
Înțelegerea acestor concepte ajută la alegerea celui mai potrivit algoritm pentru o problemă dată și la optimizarea codului.
Concepte cheie: Notația Big O, Analiza buclelor imbricate, Complexitatea spațială suplimentară
Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.