Extras din curs
Backtracking
generare permutări, generare aranjamente, generare combinări, colorare hartă cu n ţări folosind cel mult 4 culori (ţările vecine sunt colorate diferit), problema comis-voiajorului (vizitarea unică a oraşelor) (Traveling Salesman Problem), plata unei sume dintr-o colecţie de monede, DINAR + MARCA + FRAC = MONEDE, problema labirintului (m linii, n coloane), colorarea unei suprafeţe închise, drapele tricolore cu 6 culori, etc.
interativ
recursiv
Plasarea a N regine pe o tablă de dimensiune NxN
Pt anumite probleme, când nu avem alte metode la dispoziţie
Verifică toate posibilităţile din spaţiul soluţiilor
Ipoteze
Soluţia problemei se scrie sub forma unui vector,
Elementele vectorului aparţin unor mulţimi finite, între ele existând o relaţie de ordine
Construim o soluţie parţială, . Extindem această soluţie şi o testăm.
Dacă soluţia parţială este validă,
continuăm.
altfel
încercăm altă valoare pt x(k).
Dc am testat toate valorile posibile pt x(k), fără succes, ne întoarcem pe poziţia k-1, încercând valorile care au mai rămas pt x(k-1).
Implementare iterativă
void backtrackingIterativ(n)
k = 1//adaugam primul element in vectorul solutiilor
initializareSolutie(k)
while(k>0)
if(potCompletaSolutie(k))//am gasit o solutie valida pt k
if(solutieFinala)//am atins dimensiunea vectorului
tiparesteSolutia;
numaraSolutia;
else
k++;
initializareSolutie(k+1)
else k--
Implementare recursivă
void backtrackingRecursiv(k, n)
if(k = n+1)//solutie finala
tiparesteSolutia;
else
for(toate valorile posibile pt x(k))
if(x(k) este valida) //am gasit o solutie valida pt k
backtrackingRecursiv(k+1, n)
//apelam functia pt pozitia k+1 din vectorul solutie
x(k) = 0;
Conținut arhivă zip
- backtracking.cpp
- Curs6_backtracking.pdf
- Curs6_Backtracking.ppt
- Curs6_DivideEtImpera.ppt
- Curs6_greedy.pdf
- Curs6_Greedy.ppt
- Curs6_ProgramareDinamica.ppt
- Curs7_Sortare.ppt
- DivideEtImpera.pdf
- divideImpera.cpp
- greedy.cpp
- programareDinamica.cpp
- programareDinamica.pdf
- sortare.cpp