Sunteți pe pagina 1din 4

Exemple de probleme rezolvate prin algoritmi de tip Greedy:

1. Determinarea arborelui parțial de cost minim (soluția este întotdeauna optimă)


a. Algoritmul lui Kruskal
b. Algoritmul lui Prim
2. Problema rucsacului
a. întreagă (nu a fost găsit nici un algoritm rapid care să ofere soluția optimă, se crede
că nu există un astfel de algoritm)
b. continuă
3. Interclasarea optimă a n vectori
4. Suma maximă dintr-o mulțime de numere
5. Plata unei sume (cu bancnotă unitate)
6. Problema paznicului
7. Determinarea unui produs de transpoziții
8. Algoritmul Dijkstra

Exemplele de mai sus sînt probleme tipice, enunțurile lor pot fi întîlnite ca atare sau cu
diverse variațiuni.

1. Arborele parțial de cost minim (maxim).

Ambii algoritmi au fost studiați anterior, în cadrul discuției despre grafuri de tip arbore.

2. Problema rucsacului.

Se consideră un mijloc de transport cu o capacitate dată ( C ). Cu acesta trebuie transportate


obiecte dintr-o mulțime X ={ x i , i=1 , n }. Fiecare obiect ocupă o capacitate specifică c i și aduce un
cîștig specific vi . Se cere să se determine o modalitate de încărcare care să maximizeze cîștigul
obținut.

Dacă obiectele transportate pot fi fracționate, problema este numită continuă. În acest caz se
va utiliza întotdeauna întreaga capacitate de transport.

Dacă obiectele nu pot fi fracționate, problema este numită întreagă. În acest caz e posibil ca
soluția obținută să nu utilizeze întreaga capacitate de transport. De asemenea, soluția obținută poate să
nu fie optimă. În plus, e posibil să existe o soluție de utilizare a întregii capacități de transport, dar
aceasta să nu fie găsită prin algoritm de tip greedy.

3. Interclasarea optimă a vectorilor.

Se dă un număr de vectori, fiecare fiind sortat crescător. Vectorii trebuie interclasați astfel
încît să se efectueze cît mai puține mișcări de elemente.

4. Suma maximă.
Se dă o mulțime de elemente reale A={ a1 , a2 , … , an , }. Se cere să se determine o submulțime
S ⊆ A astfel încît suma elementelor submulțimii S să fie cea mai mare posibilă.

5. Plata unei sume (cu bancnotă unitate).

Se cere să se plătească o sumă S ∈ N folosind cît mai puține bancnote din tipurile (valorile)
b i , i=1 , n, știind că printre acestea se află și bancnota cu valoare unitate. Sînt disponibile cantități
nelimitate din fiecare tip de bancnotă.

Dacă bancnota cu valoare unitate nu ar fi disponibilă, nu e sigură obținerea unei soluții prin
utilizarea metodei optimului local. Alt algoritm poate conduce la o soluție.

6. Problema paznicului.

Se dă o livadă în care pomii sînt plasați pe m linii, cîten pe fiecare linie. Distanțele între pomii
adiacenți sînt egale atît pe linie cît și între linii. În una din cele m× n poziții se află un paznic, care
poate vedea pomii pe orice direcție, dar dacă mai mulți pomi se află pe exact aceeași direcție îl vede
doar pe cel mai apropiat. Se cere să se determine

a) numărul de pomi pe care poate să îi vadă paznicul din poziția ( x , y ) ;


b) care este poziția din care paznicul poate să vadă cel mai mare număr de pomi.

7. Produs de transpoziții.

Se dă o permutare P=( p 1 , p2 ,… , pn ). Se cere să se descompună această permutare într-un


produs de transpoziții:

a) oarecare;
b) de forma ( 1 ,i ) .

8. Algoritmul Dijkstra.

Algoritmul Dijkstra pentru găsirea celor mai scurte drumuri într-un graf, pornind de la un vîrf
dat a fost studiat în cadrul discuției despre grafuri.
Exemple de problem care se rezolvă prin metoda backtracking:

1. Problema celor 8 (n) dame.


2. Problema cavalerilor mesei rotunde.
3. Plata unei sume (cu/fără bancnotă unitate).
4. Generarea tuturor permutărilor.
5. Generarea tuturor aranjamentelor.
6. Generarea tuturor combinărilor.
7. Problema colorării hărților.

1. Problema celor 8 (n) dame.

Se cere să se așeze 8 regine pe o tablă de șah astfel încît să nu existe regine care se atacă. Să
se găsească toate posibilitățile de așezare a damelor. Problema se poate extinde la n regine, pe o tablă
de dimensiuni n × n.

2. Problema cavalerilor mesei rotunde.

În jurul unei mese rotunde sînt așezați n cavaleri. La un moment dat izbucnesc conflicte între
vecini. Se cere să se așeze cavalerii la masă astfel încît între oricare doi vecini din așezarea inițială să
existe 1 sau două alte persoane.

3. Plata unei sume (cu/fără bancnotă unitate)

Fie n tipuri de bancnote, cu valorile nominale t i , i=1 , n. Din fiecare tip este disponibilă
cantitatea nr i , i=1 ,n . Să se determine toate modalitățile în care se poate plăti o sumă S folosind
aceste bancnote.

4. Generarea permutărilor

Să se genereze toate permutările posibile cu n elemente.

5. Generarea aranjamentelor

Să se genereze toate aranjamentele dintr-o mulțime cu n elemente, luate cîte k .

Aplicație: să se genereze toate posibilitățile de creare a unui drapel cu 3 culori (așezate


vertical, de la lance), avînd la dispoziție n culori. Condiție suplimentară: în mijloc trebuie să se afle o
anumită culoare.

6. Generarea combinărilor
Să se genereze toate combinările dintr-o mulțime cu n elemente, luate cîte k .

7. Problema colorării hărților

Se dă o hartă cu n țări. Relațiile de vecinătate sînt reprezentate într-o matrice de adiacență. Să


se genereze toate posibilitățile de colorare hărții cu ajutorul a c culori, ținînd cont că două țări vecine
nu pot avea aceeași culoare. Care este numărul minim de culori care pot fi folosite?

S-ar putea să vă placă și