Laborator 00: Intro to PA

PA = Proiectarea Algoritmilor

De ce PA?

“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).

Ce este un algoritm?

O succesiune determinată de pași care prelucrează datele de intrare pentru a obține datele de ieșire dorite.

De ce avem nevoie de algoritmi eficienți?

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).

De ce PA?

“Pentru că scrie în orar.” (Radu Nichita, 2021)
“Pentru că m-a pus mama să termin ACS.” (Cristian Olaru, 2021)
“Pentru că nu există seriale pe Netflix mai lungi decât laburile lui Darius.” (Miruna Banu, 2021)
“Gigel be with you!” (Darius-Florentin Neațu, 2017)

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).

Ce vom face?

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ă.

Limbaje de programare

La PA este permisă folosirea limbajelor de programare: C++ / Java / C. Din cauză că aproape orice algoritm studiat se bazează pe folosirea unor structuri de date implementate deja, NU recomandăm folosirea limbajului C, întrucât bibliotecile standard nu le conțin.

De ce C++?

STL (Standard Template Library) din C++ reprezintă o bibliotecă generică de structuri de date și algoritmi, care facilitează implementarea rapidă și eficientă a algoritmilor studiați.

De ce Java?

Asemănător C++, Java Collections oferă implementarea tuturor structurilor și algoritmilor necesari la PA. De asemenea, a fost un limbaj deja studiat la POO.

De ce nu alte limbaje?

Considerăm că acestea sunt 2 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.

Coding Style

Recomandăm următoarele conveții de coding style:

Google C++ Style Guide

Google Java Style Guide

Debugging

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.

Desfășurare laborator

Î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 scheletului actualizat înainte de fiecare laborator.

Secțiunile de Exerciții / Bonus / Extra reprezintă seturi de probleme grupate pe nivele de dificultate (de la ușor la greu). Recomandăm rezolvarea tuturor exercițiilor propuse, pentru înțelegerea algoritmilor studiați.

Exercitii

În lab00 nu există exerciții propriu-zise.

Task-uri:

  • Citiți README de pe pagina principala pa-lab.
  • Fiecare trebuie să își aleagă un limbaj de programare și să facă tutorialul aferent din pa-lab::skel/lab00.
pa/laboratoare/laborator-00.txt · Last modified: 2022/03/07 16:13 by darius.neatu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0