Programare Competitivă

Ce este un algoritm?


Un început simplu

Imaginează-ți că cineva îți spune:

„Rezolvă problema asta.”

Fără alte explicații.
De unde începi? Ce faci mai întâi? Ce urmează după?

De fapt, exact asta facem de fiecare dată când încercăm să rezolvăm ceva: ne gândim la pași.


Cum „gândește” calculatorul

Calculatorul funcționează la fel, doar că mult mai strict.

  • nu ghicește ce ai vrut să spui;
  • nu completează singur;
  • nu improvizează.

Face doar ceea ce îi spui, exact în ordinea în care îi spui.

De aceea, înainte de orice program, apare o întrebare importantă:

Care sunt pașii corecți?


Definiția

Atunci când avem o problemă de rezolvat, primul lucru pe care îl facem este să ne gândim ce trebuie făcut și în ce ordine. Nu sărim direct la rezultat, ci stabilim pașii care ne duc acolo.

Acești pași, scriși clar și așezați într-o ordine logică, formează un algoritm.

Algoritm = un plan format din pași clari, finiți, urmați într-o ordine precisă.

Poate părea un cuvânt complicat, dar ideea din spatele lui este foarte simplă. Un algoritm spune, de fapt: „Mai întâi fac asta, apoi asta, iar la final obțin rezultatul dorit.”

Important este că pașii unui algoritm:

  • sunt clari (fiecare pas trebuie să fie ușor de înțeles);
  • sunt ordonați (ordinea lor contează);
  • sunt finiți (trebuie sa aibă un final);
  • duc spre un scop bine definit.

Dacă un pas lipsește sau este pus în altă ordine, algoritmul nu va mai funcționa corect. Calculatorul nu își dă seama ce ai vrut să spui și nu poate „repara” greșelile. El urmează planul exact așa cum a fost gândit.

De aceea, înainte de a scrie cod, este mult mai important să avem un algoritm bun decât să știm multe comenzi. Un algoritm clar face programarea mai ușoară, mai logică și mai sigură.


Algoritmi în viața reală

De fapt, folosești algoritmi în fiecare zi, chiar dacă nu le spui așa.
Ori de câte ori faci mai multe lucruri într-o anumită ordine pentru a ajunge la un rezultat, urmezi un algoritm.


Dimineața înainte de școală

Dimineața, lucrurile nu se întâmplă la întâmplare. Există o ordine firească pe care o respecți, chiar fără să te gândești la ea.

De exemplu:

  • nu pleci de acasă înainte să te îmbraci;
  • nu îți pui ghiozdanul în spate înainte să fie pregătit;
  • nu îți iei adio de la ai tăi înainte să fii gata.

Fiecare pas are un rost. Dacă ai schimba ordinea lor sau ai sări peste unul, rezultatul nu ar mai fi cel dorit: ai uita lucruri importante sau nu ai fi pregătit la timp.

Exact acest lucru îl face și un algoritm: stabilește ce trebuie făcut, în ce ordine și când se termină.


Rețeta

Un alt exemplu foarte clar este o rețetă de gătit.

Când urmezi o rețetă:

  • adaugi ingredientele în ordinea corectă;
  • respecți pașii;
  • aștepți timpul necesar pentru fiecare etapă.

Dacă sari peste un pas sau îl faci prea devreme, rezultatul nu va fi cel așteptat.
La fel se întâmplă și în programare: calculatorul nu știe să „repare” pașii greșiți. El execută exact instrucțiunile primite.

De aceea, atât într-o rețetă, cât și într-un program, ordinea pașilor este esențială.


Algoritm vs. cod

Aici intervine, de fapt, rolul algoritmicii. Nu ca să ne învețe să scriem cod de la început, ci ca să ne învețe să gândim clar înainte de a scrie ceva.

De multe ori, atunci când un program nu funcționează, problema nu este limbajul de programare, ci faptul că pașii nu au fost gândiți corect. Calculatorul face exact ce i se spune, chiar și atunci când pașii sunt greșiți sau incompleți.

De aceea este important să facem diferența dintre algoritm și cod.

  • Algoritmul este ideea din spatele rezolvării: pașii, ordinea lor și logica dintre ei.
  • Codul este modul în care scriem acești pași într-un limbaj pe care calculatorul îl înțelege, cum este C++.

Putem spune că algoritmul este planul, iar codul este traducerea acestui plan pentru calculator.

Întâi gândim pașii. Apoi scriem codul.

Dacă planul este clar, codul devine mult mai ușor de scris.
Dacă planul este confuz, nici cel mai bun cod nu va salva problema.

Scopul algoritmilor nu este să înveți comenzi pe de rost, ci să înveți cum să abordezi o problemă și să o rezolvi pas cu pas, într-un mod logic.


Ce să reții

  • Un algoritm este un plan format din pași clari, finiți, așezați într-o ordine corectă.
  • Calculatorul urmează pașii exact, fără să improvizeze.
  • Algoritmul este ideea; codul este modul în care o scriem în C++.
  • Un algoritm bun face programarea mai ușoară.

Aplicație

Imaginează-ți că trebuie să îți faci curat în cameră.

  • Scrie pașii pe care îi urmezi, în ordinea corectă.
  • Apoi gândește-te: ce s-ar întâmpla dacă ai schimba ordinea pașilor?
  • Ai reuși să termini la fel de repede și de bine?