Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pa:laboratoare:laborator-09 [2025/04/27 19:08]
darius.neatu [Task-2: Johnson]
pa:laboratoare:laborator-09 [2026/05/11 02:05] (current)
radu.nichita [Exerciții]
Line 1: Line 1:
 ====== Laborator 09: Drumuri minime în grafuri: surse / destinații multiple. (2/2) ====== ====== Laborator 09: Drumuri minime în grafuri: surse / destinații multiple. (2/2) ======
  
 +{{:​pa:​new_pa:​partners:​adobe-logo.png?​250 |}}
 +Adobe is a global technology leader with a mission to **change the world through personalized digital experiences**. For over four decades, Adobe has transformed how individuals,​ teams, businesses, and enterprises create, manage, and deliver content across every surface and channel.
  
-{{:​pa:​new_pa:​partners:​adobe-logo.png?​155 |}} +With **AI at the core**, tools like **Adobe Firefly** and AI-powered assistants make creativity faster, smarter, and more personalized—while keeping it safe and responsibleIn **Adobe Experience Cloud**, AI powers real-time personalization,​ predictive insights, ​and automated customer journeys, helping brands ​deliver exceptional experiences ​at scale. At Adobe**creativity meets productivity**, and AI is the catalyst for transformation.
-\\ \\ \\ Changing ​the world through digital experiences is what Adobe’s all aboutWe give everyone ​from emerging artists to global brands - everything they need to design ​and deliver exceptional ​digital ​experiences! We’re passionate about empowering people to create beautiful and powerful imagesvideos, and apps, and transform how companies interact with customers across every screen.+
  
 ===== Obiective laborator ===== ===== Obiective laborator =====
Line 199: Line 200:
 Johnson(G=(nodes,​ adj)) { Johnson(G=(nodes,​ adj)) {
   // STEP 1: Compute adjustment distances h (using Bellmand-Ford).   // STEP 1: Compute adjustment distances h (using Bellmand-Ford).
-  has_cycle, h = ComputerH(G);+  has_cycle, h = ComputeH(G);
   if (has_cycle) {   if (has_cycle) {
     return true, null, null;     return true, null, null;
Line 416: Line 417:
     * **graf rar**: aplicăm Johnson și obținem $O(n * m * log (n))$.     * **graf rar**: aplicăm Johnson și obținem $O(n * m * log (n))$.
  
-===== Exerciții ​===== +===== Implementarea algoritmilor standard ​=====
  
 <​note>​ <​note>​
 +[[https://​github.com/​acs-pa/​pa-lab/​tree/​main/​algorithms/​lab09|pa-lab/​algorithms/​lab09]] conține implementarea algoritmilor standard / tehnicilor / tiparelor de algoritmi pentru acest laborator.
 +</​note>​
  
-Scheletul de laborator se găsește pe pagina [[https://​github.com/​acs-pa/​pa-lab/​tree/​main/​skel/​lab10|pa-lab::​skel/​lab10]]. 
  
-</​note>​ 
 <note warning> <note warning>
  
Line 437: Line 437:
 </​note>​ </​note>​
  
-==== Task-1: Roy-Floyd ​====+====== Pool probleme (pentru prezentări) ======
  
-Se dă un graf **orientat** cu **n** noduri. Graful are **costuri strict pozitive**.+======= 1) Number of Possible Sets of Closing Branches =======
  
-Se dă matricea ponderilor - **w**, se cere matricea drumurilor minime - **d**, aplicând algoritmul **Roy-Floyd**.+Enunț: O companie are ''​N''​ sucursale și mai multe drumuri bidirecționalefiecare având o anumită distanță. O configurație a sucursalelor care rămân deschise este considerată validă dacă distanța minimă dintre oricare două sucursale deschise nu depășește o limită dată. Sarcina este să găsești numărul total de configurații valide (inclusiv configurația în care toate sucursalele sunt închise).
  
 +Date de intrare: Un număr întreg ''​N''​ reprezentând numărul de sucursale, un număr întreg ''​maxDistance''​ reprezentând distanța maximă permisă și o matrice ''​roads'',​ unde fiecare element este un triplet ''​[u,​ v, weight]''​ ce reprezintă un drum bidirecțional și lungimea acestuia.
  
-<note warning>+Date de ieșire: Un singur număr întreg reprezentând numărul total de configurații valide de sucursale.
  
-Restricții și precizări:+Problema se poate testa la: 
 +[[https://​leetcode.com/​problems/​number-of-possible-sets-of-closing-branches/​description/​|LeetCode - Number of Possible Sets of Closing Branches]]
  
-  * $ n <100 $ +======= 2Minimum Cost to Convert String I =======
-  * $ 0 <c <1.000$, unde c este costul unui arc. +
-    * Dacă **nu există arc** între o pereche de noduri x și y, distanța de la nodul x la nodul y din **matricea ponderilor** va fi 0. +
-    * Dacă după aplicarea algoritmului **nu se găsește drum** pentru o pereche de noduri x și y, se va considera **distanța** dintre ele egală cu 0 (se stochează în **matricea distantelor** valoarea 0)+
-    * Drumul de la nodul i la nodul i are lungime 0 (prin convenție). +
-  * timp de execuție +
-    * C++: 1s +
-    * Java: 8s+
  
 +Enunț: Se dau două șiruri de caractere, ''​source''​ și ''​target'',​ de aceeași lungime, formate exclusiv din litere mici ale alfabetului englez, și trei vectori: ''​original'',​ ''​changed''​ și ''​cost''​. O literă din ''​original''​ se poate transforma în litera corespunzătoare din ''​changed''​ plătind costul asociat din ''​cost''​. Se cere găsirea costului minim total pentru a transforma șirul ''​source''​ în șirul ''​target'',​ știind că operațiile de transformare pot fi aplicate în lanț de oricâte ori.
  
-</​note>​+Date de intrare: Șirurile de caractere ''​source''​ și ''​target'',​ împreună cu vectorii de transformare ''​original'',​ ''​changed''​ și ''​cost''​.
  
-==== Task-2Johnson ====+Date de ieșireUn singur număr întreg reprezentând costul minim pentru transformarea întregului șir, sau -1 dacă transformarea este imposibilă.
  
-Se dă un graf **orientat** cu **n** noduriGraful are **costuri oarecare** (pot fi șnegative).+Problema se poate testa la: 
 +[[https://​leetcode.com/​problems/​minimum-cost-to-convert-string-i/|LeetCode - Minimum Cost to Convert String I]]
  
-Se dă lista de adiacență cu costurile aferente, se cere matricea drumurilor minime - **d**, aplicând algoritmul **Johnson**. +======= 3Roy-Floyd Invers ​(rfinv=======
- +
- +
-<note warning>​ +
- +
-Restricții și precizări:​ +
- +
-  * $ n <1000 $ +
-  * $ m <25000 $ +
-  * $ -1000 <c <1.000$, unde c este costul unui arc. +
-    * Dacă **nu există arc** între o pereche de noduri x și y, distanța de la nodul x la nodul y din **matricea ponderilor** va fi 0. +
-    * Dacă după aplicarea algoritmului **nu se găsește drum** pentru o pereche de noduri x și y, se va considera **distanța** dintre ele egală cu 0 (se stochează în **matricea distantelor** valoarea 0)+
-    * Drumul de la nodul i la nodul i are lungime 0 (prin convenție)+
-    * Dacă graful conține un ciclu de cost negativ, se va afișa mesajul: Ciclu negativ! +
-  * timp de execuție +
-    * C++: 1s +
-    * Java: 8s +
- +
- +
-</​note>​+
  
-=== Task-3Orașul ​care poate accesa cele mai puține noduri (dându-se o distanță limită) === +EnunțSe dă o matrice de dimensiune ''​N × N'' ​care reprezintă potențialele distanțe minime dintre oricare două noduri ​dintr-un graf orientat ​(adică rezultatul aplicării algoritmului Roy-Floyd). Se cere să se verifice dacă această matrice este validă și, în caz afirmativ, să se determine numărul minim de muchii ​pe care ar trebui să le aibă graful inițial pentru a genera exact aceste distanțe.
-Rezolvațproblema [[ https://​leetcode.com/​problems/​find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance/​description/​ | Find the City With the Smallest Number of Neighbors at a Threshold Distance ]] pe LeetCode.+
  
-=== Task-4TODO === +Date de intrareNumărul de teste ''​T''​. Pentru fiecare test, se dă numărul de noduri ''​N'',​ urmat de o matrice de dimensiune ''​N × N''​ ce reprezintă distanțele.
-Rezolvați problema [[ TODO link | TODO ]] pe TODO.+
  
-=== Task-5TODO === +Date de ieșirePentru fiecare test, se va afișa pe o linie separată "​NU"​ dacă nu se poate construi un astfel de graf. Dacă este posibil, se va afișa "​DA",​ urmat de un spațiu șde numărul minim de muchii ale grafului inițial.
-Rezolvați problema [[ TODO link | TODO ]] pe TODO.+
  
-==== BONUS ====+Problema se poate testa la: 
 +[[https://​infoarena.ro/​problema/​rfinv|Infoarena - rfinv]]
  
-La acest laborator, asistentul va alege 1-2 probleme din secțiunea extra. 
  
 ==== Extra ==== ==== Extra ====
pa/laboratoare/laborator-09.1745770094.txt.gz · Last modified: 2025/04/27 19:08 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