This shows you the differences between two versions of the page.
|
pa:laboratoare:laborator-00 [2026/02/25 18:59] darius.neatu [Exercitii] |
pa:laboratoare:laborator-00 [2026/02/27 18:59] (current) aureliu.antonie [Exercitii] |
||
|---|---|---|---|
| Line 16: | Line 16: | ||
| ==== De ce PA? ==== | ==== 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). | 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). | ||
| Line 36: | Line 30: | ||
| ===== Limbaje de programare ===== | ===== Limbaje de programare ===== | ||
| - | La PA este permisă folosirea limbajelor de programare: **C++** / **Java** / **C** / **Rust** / **Python**. | + | La PA este permisă folosirea următoarelor limbaje de programare: **C++** / **Java** / **Rust** / **Python**. |
| - | <note> | + | Veți discuta cu asistentul în acest laborator și veți primi recomandări, în funcție de experiențele anterioare ale studentului. |
| - | 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. | + | |
| - | </note> | + | |
| - | + | ||
| - | ===== 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? ===== | ===== De ce nu alte limbaje? ===== | ||
| - | 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 teme / teste este asigurată doar pentru cele 4 limbaje menționate. NU este permisă folosirea altor limbaje la testul practic. | + | 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. |
| ===== Coding Style ===== | ===== Coding Style ===== | ||
| Recomandăm următoarele conveții de coding style: | Recomandăm următoarele conveții de coding style: | ||
| - | * [[https://google.github.io/styleguide/cppguide.html | Google C++ Style Guide]] | + | * [[https://google.github.io/styleguide/cppguide.html | Google C++ Style Guide]] |
| - | * [[https://google.github.io/styleguide/javaguide.html | Google Java Style Guide]] | + | * [[https://google.github.io/styleguide/javaguide.html | Google Java Style Guide]] |
| - | * [[TODO | TODO Rust Style Guide]] | + | * [[https://doc.rust-lang.org/style-guide/index.html | The Rust Style Guide]] |
| - | * [[TODO | TODO Python Style Guide]] | + | * [[https://google.github.io/styleguide/pyguide.html | Google Python Style Guide]] |
| Line 68: | Line 54: | ||
| ====== Desfășurare laborator ===== | ====== Desfășurare laborator ===== | ||
| - | În prima săptămână se va clona repo-ul de laborator conform instrucțiunilor de pe pagina [[https://ocw.cs.pub.ro/courses/pa/laboratoare/pa-lab |pa-lab]]. În fiecare săptămână se rulează comanda "git pull" pentru obținerea scheletului actualizat înainte de fiecare laborator. | + | În prima săptămână se va clona repo-ul de laborator conform instrucțiunilor de pe pagina [[https://ocw.cs.pub.ro/courses/pa/laboratoare/pa-lab |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. | ||
| + | |||
| + | * **Algoritmi**: Secțiunea aceasta conține descrierea și implementarea concretă a unor algoritmi standard în limbajele menționate. Reprezintă implementarea suportului teoretic din 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. | + | * **Exerciții**: Secțiunea aceasta conține un set de 3-5 probleme folosite în partea de prezentări a laboratorului. |
| + | * **Probleme diverse**: Secțiunea aceasta conține un set larg probleme din aceeași tematică pe care le recomandăm să le lucrați pentru a vă pregăti și consolida cunoștințele algoritmice. Acestea pot fi utile pentru pregătirea evaluărilor (scrise sau teste practice) de la PA. | ||
| ===== Exercitii ===== | ===== Exercitii ===== | ||
| Line 126: | Line 117: | ||
| </spoiler> | </spoiler> | ||
| - | <spoiler Soluția 1 implementată în Python - TODO > | + | <spoiler Soluția 1 implementată în Python> |
| <code python> | <code python> | ||
| - | TODO | + | class Solution: |
| + | def findKthLargest(self, nums: List[int], k: int) -> int: | ||
| + | return sorted(nums)[-k] | ||
| </code> | </code> | ||
| </spoiler> | </spoiler> | ||
| Line 152: | Line 145: | ||
| <spoiler Soluția 3> | <spoiler Soluția 3> | ||
| - | Hint: Soluția 2 nu este optimă! Se poate și $O(n)$, dar considerăm că este înafara scopului laboratorului 0. | + | Hint: Soluția 2 nu este optimă! Se poate și $O(n)$, dar considerăm că este în afara scopului laboratorului 0. |
| </spoiler> | </spoiler> | ||
| - | * **Task02**: Discutați problema [[https://leetcode.com/problems/sliding-window-maximum/| Sliding Window Maximum]] și problema [[https://leetcode.com/problems/longest-substring-without-repeating-characters| Longest Substring without repeating characters]]. Implementați și testați cel puțin o problemă. | + | * **Task02**: Rezolvați problema [[https://leetcode.com/problems/sliding-window-maximum/| Sliding Window Maximum]] |
| * **Task03**: Rezolvați problema [[https://leetcode.com/problems/min-stack/description/| Min Stack]]. | * **Task03**: Rezolvați problema [[https://leetcode.com/problems/min-stack/description/| Min Stack]]. | ||