Tehnicile de optimizare sunt strategii fundamentale în programare care ajută la obținerea unor soluții eficiente din punct de vedere al timpului de execuție și al utilizării memoriei. Cele trei tehnici principale studiate la nivel liceal sunt: interschimbarea (metoda schimbului), metoda greedy (lacomă) și divide et impera (divide și stăpânește). Înțelegerea acestor tehnici este esențială pentru rezolvarea eficientă a problemelor de concurs și a celor din viața reală.
Aceasta este o tehnică simplă, dar puternică, care constă în schimbarea valorilor a două variabile fără a utiliza o variabilă auxiliară (de exemplu, prin însumare sau prin XOR). Deși pare banală, interschimbarea este baza multor algoritmi de sortare (bubble sort, selection sort) și de permutare. În probleme de optimizare, interschimbarea poate fi folosită pentru a reordona elemente astfel încât să se minimizeze o anumită funcție cost (de exemplu, ordonarea după un criteriu de eficiență).
- Pasul 1: găsește minimul 1, îl schimbă cu 5 → [1, 3, 8, 5]
- Pasul 2: minimul din [3,8,5] este 3, rămâne pe loc
- Pasul 3: minimul din [8,5] este 5, schimbă cu 8 → [1,3,5,8]
- Se observă cum interschimbarea este operația centrală.
Această metodă presupune construirea unei soluții pas cu pas, alegând la fiecare pas cea mai avantajoasă opțiune locală, în speranța că aceasta va conduce la o soluție globală optimă. Exemple clasice sunt:
Greedy nu funcționează întotdeauna (de exemplu, problema rucsacului 0/1 nu poate fi rezolvată greedy), dar atunci când funcționează, este extrem de eficientă (complexitate O(n log n) de obicei).
- Raporturi: 6, 5, 4
- Luăm integral primul (10,60), apoi al doilea (20,100), apoi din al treilea 20 unități (80) → total 240
- Acesta este optim global, iar algoritmul este O(n log n).
Această tehnică divide problema în subprobleme mai mici, independente, de același tip, le rezolvă recursiv și apoi combină rezultatele pentru a obține soluția problemei inițiale. Exemple reprezentative sunt:
Complexitatea tipică este O(n log n) sau O(n² log n), iar aplicarea corectă necesită identificarea punctului de divizare, a modului de combinare și a cazurilor de bază.
- Se împarte în [38,27,43,3] și [9,82,10]
- Se sortează fiecare
- La final interclasarea produce [3,9,10,27,38,43,82]
- Complexitate O(n log n).
Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.