Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:6 [2023/11/17 03:39]
vlad.juja
aa:lab:6 [2024/11/28 18:12] (current)
lfa
Line 13: Line 13:
 Înainte de a trece la examinarea unor probleme pe grafuri, este util să recapitulăm ce sunt grafurile. \\ Înainte de a trece la examinarea unor probleme pe grafuri, este util să recapitulăm ce sunt grafurile. \\
  
-Grafurile sunt considerate a fi perechi G = (V, E), unde V reprezintă un set de noduri, iar E un set de muchii. Fiecare nod este identificat printr-un număr de la 1 la |V|. O muchie este o pereche de noduri. De obicei, ne referim la grafurile neorientate,​ unde o muchie este o pereche neordonată. \\+Grafurile sunt considerate a fi perechi ​G = (V, E)$, unde Vreprezintă un set de noduri, iar E un set de muchii. Fiecare nod este identificat printr-un număr de la 1 la |V|$. O muchie este o pereche de noduri. De obicei, ne referim la grafurile neorientate,​ unde o muchie este o pereche neordonată. \\
  
-Vom utiliza matricele de adiacență pentru a reprezenta grafurile. O matrice de adiacență este o tabelă de dimensiune |V| pe |V|, unde nodurile indexează atât liniile, cât și coloanele; intrarea i, j a matricei este o valoare booleană care arată dacă (i, j) ∈ E. Pentru grafurile neorientate,​ matricea este simetrică în raport cu diagonala principală. \\+Vom utiliza matricele de adiacență pentru a reprezenta grafurile. O matrice de adiacență este o tabelă de dimensiune ​|V|pe |V|$, unde nodurile indexează atât liniile, cât și coloanele; intrarea ​ija matricei este o valoare booleană care arată dacă (i, j) ∈ E$. Pentru grafurile neorientate,​ matricea este simetrică în raport cu diagonala principală. \\
  
 Matricea de adiacență în sine conține toate informațiile necesare pentru a descrie graful, astfel încât poate servi ca intrare pentru algoritmii noștri.\\ Matricea de adiacență în sine conține toate informațiile necesare pentru a descrie graful, astfel încât poate servi ca intrare pentru algoritmii noștri.\\
Line 23: Line 23:
 === 1. K Vertex Cover === === 1. K Vertex Cover ===
  
-Dându-se un graf neorientat G = (V, E) și un număr întreg pozitiv K, se cere găsirea unui subset V' ⊆ V, cu |V'| = K, astfel încât fiecare muchie din E să aibă cel puțin unul dintre capete în V'. \\+Dându-se un graf neorientat ​G = (V, E)și un număr întreg pozitiv ​K$, se cere găsirea unui subset ​V' ⊆ V$, cu |V'| = K$, astfel încât fiecare muchie din Esă aibă cel puțin unul dintre capete în V'$. \\
  
-În termeni simpli, problema K Vertex Cover implică găsirea unui subset de K noduri astfel încât fiecare muchie a grafului să aibă cel puțin unul dintre capete în acel set. +În termeni simpli, problema K Vertex Cover implică găsirea unui subset de Knoduri astfel încât fiecare muchie a grafului să aibă cel puțin unul dintre capete în acel set. 
    * Propuneți o soluție greedy pentru această problemă.    * Propuneți o soluție greedy pentru această problemă.
    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.
Line 33: Line 33:
 === 2. K Clique === === 2. K Clique ===
  
-Dându-se un graf neorientat G = (V, E) și un număr întreg pozitiv K, se cere găsirea unui set V' ⊆ V, cu |V'| = K, astfel încât toate nodurile din V' sunt conectate între ele prin muchii din E. În termeni simpli, problema K Clique implică găsirea unui set de K noduri astfel încât oricare două noduri din acest set sunt conectate printr-o muchie (orice nod e conectat cu orice nod). +Dându-se un graf neorientat ​G = (V, E)și un număr întreg pozitiv ​K$, se cere găsirea unui set V' ⊆ V$, cu |V'| = K$, astfel încât toate nodurile din V'sunt conectate între ele prin muchii din E$. În termeni simpli, problema K Clique implică găsirea unui set de Knoduri astfel încât oricare două noduri din acest set sunt conectate printr-o muchie (orice nod e conectat cu orice nod). 
    * Propuneți o soluție greedy pentru această problemă.    * Propuneți o soluție greedy pentru această problemă.
    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.
Line 41: Line 41:
 === 3. K Coloring ===  === 3. K Coloring === 
  
-Dându-se un graf neorientat G = (V, E) și un număr întreg pozitiv K, se cere să se determine dacă este posibil să se atribuie culori nodurilor astfel încât nicio pereche de două noduri adiacente să nu aibă aceeași culoare, iar numărul total de culori utilizate să fie cel mult K.+Dându-se un graf neorientat ​G = (V, E)și un număr întreg pozitiv ​K$, se cere să se determine dacă este posibil să se atribuie culori nodurilor astfel încât nicio pereche de două noduri adiacente să nu aibă aceeași culoare, iar numărul total de culori utilizate să fie cel mult K$.
    * Propuneți o soluție greedy pentru această problemă.    * Propuneți o soluție greedy pentru această problemă.
    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.
Line 48: Line 48:
  
 === 4. Hamilton Path === === 4. Hamilton Path ===
-Dându-se un graf orientat G = (V, E), se cere să se determine dacă există un drum Hamiltonian în graful respectiv. Un drum Hamiltonian este un drum care vizitează fiecare nod exact o dată.+Dându-se un graf orientat ​G = (V, E)$, se cere să se determine dacă există un drum Hamiltonian în graful respectiv. Un drum Hamiltonian este un drum care vizitează fiecare nod exact o dată.
    * Propuneți o soluție greedy pentru această problemă.    * Propuneți o soluție greedy pentru această problemă.
    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.
-   * O variantă ușor modificată a acestui algoritm este TSP (The Travelling Salesman Problem): Dându-se un graf ponderat G = (V, E) și un buget B, există un drum Hamiltonian cu cost total mai mic decât B? Ce trebuie modificat în soluția anterioară pentru a obține soluția pentru TSP?+   * O variantă ușor modificată a acestui algoritm este TSP (The Travelling Salesman Problem): Dându-se un graf ponderat ​G = (V, E)și un buget B$, există un drum Hamiltonian cu cost total mai mic decât ​B$? Ce trebuie modificat în soluția anterioară pentru a obține soluția pentru TSP?
 \\ \\
  
  
 === 5. K Cut === === 5. K Cut ===
-Dându-se un graf G = (V, E) și un număr K, există o împărțire a nodurilor în două mulțimi astfel încât să existe ​muchii cu câte un capăt în fiecare mulțime?+Dându-se un graf G = (V, E)și un număr ​K$, există o împărțire a nodurilor în două mulțimi astfel încât să existe ​$ K$ muchii cu câte un capăt în fiecare mulțime?
    * Propuneți o soluție greedy pentru această problemă.    * Propuneți o soluție greedy pentru această problemă.
    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.    * Dați exemplu de o situație în care soluția greedy nu generează răspunsul corect.
Line 91: Line 91:
 =====  Probleme NPC cu mulțimi de numere ===== =====  Probleme NPC cu mulțimi de numere =====
  
-Pentru urmatoarele probleme, ​implemntați în scheletul ​de cod algoritmul ​ce verifică validitatea unui candidat ​și verificați-vă soluția. \\+Pentru urmatoarele probleme, ​propuneți o variantă ​de pseudocod ​ce verifică validitatea unui candidat. \\
 \\ \\
  
 === 9. Subset Sum === === 9. Subset Sum ===
  
-Dându-se un set de numere întregi S  și un număr întreg K , problema Subset Sum solicită determinarea dacă există un subșir A al lui S astfel încât suma elementelor din A să fie egală cu K . Cu alte cuvinte, este posibil să se găsească o submulțime a numerelor din S astfel încât suma acestora să fie exact K ?\\+Dându-se un set de numere întregi ​Sși un număr întreg ​K$, problema Subset Sum solicită determinarea dacă există un subșir ​Aal lui Sastfel încât suma elementelor din Asă fie egală cu K$. Cu alte cuvinte, este posibil să se găsească o submulțime a numerelor din Sastfel încât suma acestora să fie exact K$?\\
 \\ \\
  
Line 102: Line 102:
 === 10. Partitioning === === 10. Partitioning ===
  
-Dându-se un set S de numere întregi, se cere determinarea dacă setul poate fi împărțit în două submulțimi ​S1 și S2 astfel încât suma elementelor din S1 să fie egală cu suma elementelor din S2. Cu alte cuvinte, se caută o împărțire a setului în două submulțimi cu sume egale.\\+Dându-se un set Sde numere întregi, se cere determinarea dacă setul poate fi împărțit în două submulțimi ​$ S_1$ și $ S_2$ astfel încât suma elementelor din $ S_1$ să fie egală cu suma elementelor din $ S_2$. Cu alte cuvinte, se caută o împărțire a setului în două submulțimi cu sume egale.\\
 \\ \\
  
Line 108: Line 108:
 === 11. Set Cover === === 11. Set Cover ===
  
-Date de intrare: Un univers U și o colecție S de submulțimi ale lui U. \\ +Date de intrare: Un univers ​Uși o colecție ​Sde submulțimi ale lui U$. \\ 
-Problemă: Există o subcolecție S' a lui S astfel încât fiecare element din U este acoperit de cel puțin un subset din S'? \\ +Problemă: Există o subcolecție ​S'a lui Sastfel încât fiecare element din Ueste acoperit de cel puțin un subset din S'$? \\ 
-Verificare: Verificarea constă în a asigura că fiecare element din U este acoperit de cel puțin un subset din S'. \\+Verificare: Verificarea constă în a asigura că fiecare element din Ueste acoperit de cel puțin un subset din S'$. \\
 \\ \\
  
Line 139: Line 139:
  
 unde $ x_i$ este o variabilă binară ce indică dacă obiectul $ i$ este sau nu inclus în rucsac. Adică, $ x_i = 1$ dacă obiectul i este inclus și $ x_i = 0$ în caz contrar. unde $ x_i$ este o variabilă binară ce indică dacă obiectul $ i$ este sau nu inclus în rucsac. Adică, $ x_i = 1$ dacă obiectul i este inclus și $ x_i = 0$ în caz contrar.
-   * Implementați algoritmul în scheletul de cod oferit și verificați-vă soluția 
  
-<​note>​ 
-Pentru exercițiile 9,10 și 11 veți folosi scheletul de laborator pus la dispoziție. În directorul fiecărui exercițiu există un director cu fișiere de test și încă două fișiere: Checker.Java și <​NumeEx>​.Java. Implementarea o veți face în <​NumeEx>​.Java,​ iar pentru a rula testele trebuie să rulați metoda main din clasa Checker. Pentru a funcționa, trebuie să deschideți directorul fiecărui exercițiu în InteliJ și să setați SDK-ul. \\ 
  
-Scheletul îl siți aici: https://github.com/VladJ05/Analiza-Algoritmilor.git+<​note>​ 
 +Soluțiile acestui laborator se sesc [[https://ocw.cs.pub.ro/ppcarte/doku.php?​id=aa:​lab:​sol:​6|aici]]
 </​note>​ </​note>​