This shows you the differences between two versions of the page.
sda-aa:laboratoare:11 [2021/05/16 21:09] cristian.rusu |
sda-aa:laboratoare:11 [2021/05/23 21:23] (current) cristian.rusu [2.3.4 Problema comisului voiajor (TSP)] |
||
---|---|---|---|
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 99: | Line 99: | ||
Algoritmul general este următorul: | Algoritmul general este următorul: | ||
- | <note important> | ||
* Se alege un punct de start | * Se alege un punct de start | ||
* Cât timp problema nu este rezolvată: | * Cât timp problema nu este rezolvată: | ||
Line 106: | Line 105: | ||
* Daca da, se adaugă la soluția în construcție și se apelează recursiv algoritmul pentru restul problemei | * 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. | * 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).</note> | + | * Daca niciuna din căile disponibile nu este bună, nu există soluție (pentru punctul de start ales). |
- | + | ||
- | === 3.3 Probleme rezolvate prin tehnica backtracking === | + | |
Line 116: | Line 113: | ||
- 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 rest. Presupunem numai valori întregi pentru suma de bani şi următoarele bancnote: {1, 5, 10, 50, 100} (RON). | - 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 rest. Presupunem numai valori întregi pentru suma de bani şi următoarele bancnote: {1, 5, 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ă. | - 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ă. | ||
- | - Găsiţi un exemplu pentru care varianta Greedy (pură) de rezolvare a problemei TSP (comis-voiajor) găseşte o soluţie, dar aceasta nu este 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; | |
- | ==== 7. Probleme opționale, de interviu ==== | + | - 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 ==== | ||