PA = Proiectarea Algoritmilor
“Before there were computers, there were algorithms. But now that there are computers, there are even more algorithms, and algorithms lie at the heart of computing.” (Introduction to Algorithms, 3rd edition, Thomas H. Cormen et al).
O succesiune determinată de pași care prelucrează datele de intrare pentru a obține datele de ieșire dorite.
Pentru unele aplicații, eficiența poate face diferența între un rezultat util și unul fără semnificație (ex. corect vs incorect), între un rezultat la timp și unul întârziat (ex. prelucarea real-time a datelor pe un computer de bord al unui avion) etc. Performanța algoritmilor din punct de vedere spațial, poate determina utilizarea lor în anumite tipuri de sistem (ex. sistemele embedded, din cauza spațiului de memorie redus, pot împiedica implementarea unui algoritm complex bazat pe mult caching).
La PA se studiază principalele categorii de algoritmi, care reprezintă baza de gândire pentru un inginer în proiectarea și dezvoltarea viitoarelor sisteme, pornind de la probleme abstracte (ex. o problemă de tip parcurgere pe un graf neorientat se poate mapa pe găsirea unor sugestii de prietenie în rețele sociale precum Facebook).
Pe termen scurt, PA vă poate ajuta să vă pregătiți și pentru problemele de tip interviu (mai multe informații pe pagina ACS Prezentare internshipuri).
Vom aprofunda elementele fundamentale necesare rezolvării fiecărei clase de probleme analizate, prezentând mai mulți algoritmi pentru fiecare problemă studiată și evidențiind pe cei optimi (eficienți).
Pornind de la aceste elemente, vom accentua punctele de interes identificate, descoperind șabloane de rezolvare și modalități de construire a soluțiilor pentru o problemă.
La PA este permisă folosirea următoarelor limbaje de programare: C++ / Java / Rust / Python.
Veți discuta cu asistentul în acest laborator și veți primi recomandări, în funcție de experiențele anterioare ale studentului.
Considerăm că acestea sunt 4 limbaje foarte folosite și că, prin funcționalitățile oferite, studentul se poate concentra efectiv pe implementarea algoritmilor și nu pe alte aspecte legate de limbaj. De asemenea, infrastructura necesară la testele practice este asigurată doar pentru cele 4 limbaje menționate. Așadar, NU este permisă folosirea altor limbaje la testul practic.
Recomandăm următoarele conveții de coding style:
Pe parcursul semestrului, vă poate fi util să știți cum se folosește un debugger pentru a găsi probleme într-un mod rapid. Vă recomandăm articolul PC@Debugging pentru a vă reaminti de cum folosim GDB atât din CLI cât și prin intermediul unui IDE.
În prima săptămână se va clona repo-ul de laborator conform instrucțiunilor de pe pagina pa-lab. În fiecare săptămână se rulează comanda “git pull” pentru obținerea conținutului actualizat înainte de fiecare laborator.
Secțiunile de Algoritmi / Exerciții / Diverse reprezintă seturi de probleme grupate pe nivele de dificultate (de la ușor la greu). Recomandăm rezolvarea tuturor problemelor propuse, în ordinea propusă, pentru înțelegerea algoritmilor studiați.
Task-uri: