|
Backtracking-ul este un algoritm care ajută la rezolvarea problemelor unde trebuie aflate toate soluțiile sale. Este un algoritm lent și poate de aceea nu întotdeauna adoptat. Uneori e suficient să se afle câteva soluții sau e nevoie să se afle cea mai bună soluție și pentru aceasta nu întotdeauna e nevoie de toate soluțiile. Acesta este un algoritm. Este o idee. Chiar dacă pașii sunt identici, fiecare trebuie ajustat pentru problema cerută. Este o metodă, nu un program pe calculator pe care îl scrii o dată și merge pentru orice problemă de acest tip. Descriere Backtracking-ul construiește, bazându-se pe o stivă, soluția gradual. Se adaugă câte o "informație" până la un anumit nivel, când se verifică dacă soluția e bună. De exemplu permutarea elementelor {1, 2, 3}. Regula numărul 1 este că nu poți avea același element de mai multe ori, iar mărimea soluției trebuie să fie de 3 elemente. Și elementele trebuie să fie numere de la 1 la 3 inclusiv. Nu 4. Categoric nu 5. Așadar {1, 2} nu are 3 elemente, {1, 1, 2} poate avea 3 elemente, dar 1 apare de două ori, iar {1, 2, 4} are elemente invalide. În funcție de situație trebuie luată o decizie. {1, 1, 2} nu este bună, dar avem deja 3 nivele. Ce putem face? Trecem următoarea valoare pentru nivelul curent al stivei (adică acolo unde e cifra 2). O să obținem {1, 1, 3}. Dar iar nu e bine. Și nu mai avem o valoare succesivă celei de pe ultimului nivel. Așadar presupunerea că primele două nivele sunt corecte e falsă și atunci coborâm în stivă cu un nivel: {1, 1} și încercăm următoarea valoare: {1, 2}. Soluțiile generate de un algoritm backtracking pentru permutarea elementelor de la 1 la 3 ar fi:
Abia în pasul 9 avem o soluție, de aceea algoritmul este definit ca lent. În alte cuvinte backtracking-ul e un bun locțiitor pentru toate mesajele de încurajare care tot apar pe diferite site-uri. El ne zice: încearcă mereu altceva până când merge. Nu renunța niciodată, nu te aștepta la același rezultat făcând lucrurile la fel, încearcă ceva nou. Nu merge? Revino la pasul anterior și vezi cum îl poți continua în alt fel. Algoritm
Descriere Algoritmul are mai mult sens dacă explicăm fiecare componentă a sa:
Algoritmul de backtracking (cel scris mai sus) rămâne același indiferent de situație. Ce se schimbă este conținutul acestor 5 subprograme. Fiecare problemă de backtracking are o altă inițializare, o altă funcție pentru succesor, valid și soluție și o altă tipărire. Pentru a vedea o implementare a acestui algoritm, în Pascal, dați un ochi aici. |
> C a p i t o l u l u r m ă t o r > |
|
Ți-a fost de ajutor ce am scris aici?
Motivul:
Hei, mersi de răspuns.
|