Differences

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

Link to this comparison view

sda-aa:laboratoare:11 [2021/05/16 21:03]
cristian.rusu
sda-aa:laboratoare:11 [2021/05/23 21:23] (current)
cristian.rusu [2.3.4 Problema comisului voiajor (TSP)]
Line 6: Line 6:
    * Însușirea abilităților de implementare a algoritmilor bazați pe greedy    * Însușirea abilităților de implementare a algoritmilor bazați pe greedy
    * Înțelegerea implementării algoritmilor greedy privind probleme de optimizare    * Înțelegerea implementării algoritmilor greedy privind probleme de optimizare
- +   * Înțelegerea noțiunii de backtracking 
 +   * Implementarea metodei backtracking în rezolvarea problemelor
  
  
Line 37: Line 37:
 === 2.3 Probleme tip rezolvate cu acest algoritm === === 2.3 Probleme tip rezolvate cu acest algoritm ===
  
-==== 2.3.1 Problema spectacolelor ​====+== 2.3.1 Problema spectacolelor ==
  
 Se dau mai multe spectacole, prin timpii de start și timpii de final. Se dau mai multe spectacole, prin timpii de start și timpii de final.
Line 43: Line 43:
 Rezolvarea constă în sortarea spectacolelor crescător după timpii de final, apoi la fiecare pas se alege primul spectacol care are timpul de start mai mare decât ultimul timp de final. Timpul inițial de final este inițializat la infinit (Spectacolul care se termină cel mai devreme va fi mereu selectat, având timp de start mai mare decât timpul inițial) Rezolvarea constă în sortarea spectacolelor crescător după timpii de final, apoi la fiecare pas se alege primul spectacol care are timpul de start mai mare decât ultimul timp de final. Timpul inițial de final este inițializat la infinit (Spectacolul care se termină cel mai devreme va fi mereu selectat, având timp de start mai mare decât timpul inițial)
  
-==== 2.3.2 Problema cuielor ​====+== 2.3.2 Problema cuielor ==
  
 Găsiți o mulțime de puncte de cardinal minim M astfel încât pentru orice interval [ai, bi] din cele N, să existe un punct x din M care să aparțină intervalului [ai, bi]. Găsiți o mulțime de puncte de cardinal minim M astfel încât pentru orice interval [ai, bi] din cele N, să existe un punct x din M care să aparțină intervalului [ai, bi].
Line 54: Line 54:
     * Soluție: Se observă că dacă x este un punct din M care nu este capăt dreapta al nici unui interval, o translație a lui x la dreapta care îl duce în capătul dreapta cel mai apropiat nu va schimba intervalele care conțin punctul. Prin urmare, există o mulțime (M) de cardinal minim pentru care toate punctele x sunt capete dreapta.     * Soluție: Se observă că dacă x este un punct din M care nu este capăt dreapta al nici unui interval, o translație a lui x la dreapta care îl duce în capătul dreapta cel mai apropiat nu va schimba intervalele care conțin punctul. Prin urmare, există o mulțime (M) de cardinal minim pentru care toate punctele x sunt capete dreapta.
  
-==== 2.3.3 Problema rucsacului ​====+== 2.3.3 Problema rucsacului ==
  
 Un rucsac ca poate transporta o greutate G, trebuie încărcat cu obiecte alese dintre '​n'​ obiecte, fiecare având o anumită greutate (g) și un anumit profit (importanță)(p) sau câștig. Se cere să se determine obiectele ce trebuie încărcate în rucsac astfel încât profitul (caștigul) să fie maxim. Un rucsac ca poate transporta o greutate G, trebuie încărcat cu obiecte alese dintre '​n'​ obiecte, fiecare având o anumită greutate (g) și un anumit profit (importanță)(p) sau câștig. Se cere să se determine obiectele ce trebuie încărcate în rucsac astfel încât profitul (caștigul) să fie maxim.
Line 66: Line 66:
        * Nu intră în totalitate în rucsac și atunci se determină ce procent din obiectul respectiv va intra în rucsac; în acest caz se va cumula la câștigul total procentul de profit asociat părții din obiectul încărcat în rucsac, iar greutatea rămasă va fi zero.        * Nu intră în totalitate în rucsac și atunci se determină ce procent din obiectul respectiv va intra în rucsac; în acest caz se va cumula la câștigul total procentul de profit asociat părții din obiectul încărcat în rucsac, iar greutatea rămasă va fi zero.
  
-==== 2.3.4 Problema comisului voiajor (TSP) ====+== 2.3.4 Problema comisului voiajor (TSP) ==
  
 Un comis-voiajor stă într-un oraş (X1) şi vrea să viziteze toate cele N oraşe dintr-o regiune (X1, X2, …, XN), plecând dimineaţa de acasă (X1) şi întorcandu-se (tot în X1) la finalul zilei. Un comis-voiajor stă într-un oraş (X1) şi vrea să viziteze toate cele N oraşe dintr-o regiune (X1, X2, …, XN), plecând dimineaţa de acasă (X1) şi întorcandu-se (tot în X1) la finalul zilei.
Line 87: Line 87:
  
  
-==== 2Considerente teoretice ​====+==== 3Backtracking ​==== 
 + 
 +=== 3.1 Definiție === 
 + 
 +Noțiunea de backtracking se referă la utilizarea unui algoritm recursiv pentru soluționarea unei probleme ce admite soluții parțiale. Se începe cu una din bucățile de soluție disponibile și se avansează până la construirea soluției complete. Dacă una din rutele de construcție disponibile nu duce nicăieri, se merge înapoi (backtrack) și se încearcă altă cale. Dacă niciuna din rute nu dă o soluție, atunci problema nu este rezolvabilă. 
 + 
 +{{:​sda-ab:​laboratoare:​backtracking.png?​300|}} 
 + 
 +=== 3.2 Algoritm === 
 + 
 +Algoritmul general este următorul:
  
-=== 2.1 Costul unei muchii ===+    * Se alege un punct de start 
 +    * Cât timp problema nu este rezolvată:​ 
 +       * Pentru fiecare cale(parte din soluție disponibilă) de la punctul de start: 
 +       * Se verifică dacă ruta aleasă este bună (nu invalidează condiția de rezolvare) 
 +       * Daca da, se adaugă la soluția în construcție și se apelează recursiv algoritmul pentru restul problemei 
 +       * Dacă apelul recursiv reușește să găsească o soluție completă,​algoritmul se încheie. Dacă nu, ruta aleasă se elimină din soluție și se alege alta. 
 +    * Daca niciuna din căile disponibile nu este bună, nu există soluție (pentru punctul de start ales).
  
-=== 2.2 Costul unui drum; drumul de cost minim === 
  
-==== 6. Exerciții laborator ==== 
  
 +==== 4. Exerciții laborator ====
  
-==== 7Probleme opționale, de interviu ====+     - Folosiţi un algoritm de tip Greedy pentru a găsi numărul minim de bancnote necesare pentru a da o anumită sumă de bani ca restPresupunem numai valori întregi pentru suma de bani şi următoarele bancnote: {15, 10, 50, 100} (RON). 
 +     - Găsiţi un exemplu pentru care un algoritm ​de tip Greedy nu ar funcţiona pentru o problemă similară, dar care foloseşte următoarele bancnote: {1, 3, 5, 15, 30, 50, 150}. Încercaţi să explicaţi de ce, în acest caz, tehnica Greedy nu mai e optimă. 
 +     - Generarea produsului cartezian AN (interpretare:​ toate numerele de N cifre, dar cu cifrele alese numai din mulțimea A). Exemplu: A {1,2,3}, N 6; 
 +     - Generarea tuturor permutărilor de N; 
 +     - Generarea tuturor combinărilor/​aranjamentelor de N luate câte k; 
 +     - Se dă puzzle-ul Sudoku de mai jos, scrieți un program care sa îl rezolve.
  
 +{{:​sda-aa:​laboratoare:​1920px-sudoku_puzzle_by_l2g-20050714_standardized_layout.svg.png?​300|}}
  
-==== 8. Referințe ==== 
  
sda-aa/laboratoare/11.1621188215.txt.gz · Last modified: 2021/05/16 21:03 by cristian.rusu
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