Presentation is loading. Please wait.

Presentation is loading. Please wait.

Metoda Backtracking Metoda Implementarea

Similar presentations


Presentation on theme: "Metoda Backtracking Metoda Implementarea"— Presentation transcript:

1 Metoda Backtracking Metoda Implementarea
Clasificarea metodelor de programare Definiţie Exemple de probleme Problema celor N dame Metoda Implementarea

2 Clasificarea metodelor de programare
Algoritmi recursivi simpli Algoritmi Backtracking Algoritmi Divide et Impera Algoritmi de programare dinamică Algoritmi Greedy Algoritmi Branch and bound

3

4 Backtracking - definiţie
Să presupunem că trebuie să luaţi o serie de decizii, având mai multe variante de ales, unde Nu aveţi destule informaţii pentru a şti ce alegeţi Fiecare decizie ne conduce la un nou set de variante posibile Unele succesiuni de variante (posibil mai multe decât una) poate fi soluţia problemei tale Backtracking este o metodă ce încearcă diferite succesiuni de decizii, înainte de a găsi una care “merge”

5 Rezolvarea unui labirint
Într-un labirint de dimensiune m*n, gasiţi o cale de a – l parcurge de la început la sfârşit La fiecare intersecţie trebuie să decideţi între 3 sau mai multe variante: Să mergeţi înainte Să mergeţi la stânga Să mergeţi la dreapta Nu aveţi destule informaţii pentru a alege corect Fiecare alegere duce la un nou set de alegeri Una sau mai multe secvenţe de variante poate (sau nu) să conducă la o soluţie Multe tipuri de labirinturi se pot rezolva cu backtracking

6 Colorarea hărţii Doriţi să coloraţi o hartă în 4 culori:
Roşu, galben, albastru şi verde Oricare 2 ţări vecine trebuie să fie colorate în culori diferite Nu aveţi destule informaţii pentru a şti ce culori alegeţi Fiecare decizie ne conduce la un nou set de variante posibile Una sau mai multe secvenţe de variante poate (sau nu) să conducă la o soluţie Multe tipuri de colorări de hărţi se pot rezolva cu backtracking

7 Rezolvarea unui puzzle
În acest puzzle toate găurile înafară de una sunt colorate cu aceaşi culoare Poţi sări doar de pe o gaură pe alta Găurile pe care sari se elimină Obiectul este de a elimina toate găurile inafară de una Nu aveţi destule informaţii pentru a sări corect Fiecare decizie ne conduce la un nou set de variante posibile Una sau mai multe secvenţe de variante poate (sau nu) să conducă la o soluţie Multe tipuri de puzzle-uri se pot rezolva cu backtracking

8 Utilizarea stivei Acest capitol introduce tipul de dată stivă.
Multe exemple de lucru cu stiva sunt prezentate în acest capitol. Această prezentare arată utilizarea stivei în algoritmul backtracking de rezolvare a problemei celor N-Dame. This lecture demonstrates an application of stacks: implementing backtracking to solve the N-Queens problem. The presentation includes a demonstration program which you can run at a couple points during the presentation. The demonstation requires EGA or VGA graphics on a PC. The best time for this lecture is after the students have read Chapter 7 on stacks. If the students want additional information about the N- queens problem, you can direct them to Programming Project 9 in Chapter 7.

9

10 Problema celor N-Dame Presupune că ai 8 dame... ...şi o tablă de şah
We'll start with a description of a problem which involves a bunch of queens from a chess game, and a chess board.

11 Problema celor N-Dame Se pot amplasa cele 8 dame pe tabla de şah astfel încât oricare 2 dame să nu se atace ? Some of you may have seen this problem before. The goal is to place all the queens on the board so that none of the queens are attacking each other.

12 Problema celor N-Dame Două dame să nu fie amplasate pe acelaşi rând...
If you play chess, then you know that this forbids two queens from being in the same row...

13 Problema celor N-Dame Două dame să nu fie amplasate pe acelaşi rând sau pe aceiaşi coloană... ...or in the same column...

14 Problema celor N-Dame Două dame să nu fie amplasate pe acelaşi rând sau pe aceiaşi coloană sau pe aceiaşi diagonală. ...or along the same diagonal. As a quick survey, how many of you think that a solution will be possible? In any case, we shall find out, because we will write a program to try to find a solution. As an aside, if the program does discover a solution, we can easily check that the solution is correct. But suppose the program tells us that there is no solution. In that case, there are actually two possibilies to keep in mind: 1. Maybe the problem has no solution. 2. Maybe the problem does have a solution, and the program has a bug! Moral of the story: Always create an independent test to increase the confidence in the correctness of your programs.

15 Problema celor N-Dame N dame N coloane N rânduri
Numărul damelor şi dimensiunea tablei de şah poate varia. N dame N coloane The program that we write will actually permit a varying number of queens. The number of queens must always equal the size of the chess board. For example, if I have six queens, then the board will be a six by six chess board. N rânduri

16 Problema celor N-Dame Vom scrie un program care va încerca să găsească soluţia de a plasa N regine pe N*N tablă de şah Dacă puteţi rularun ega or vga graphics, executaţi dublu click pe icoană At this point, I can give you a demonstration of the program at work. The demonstration uses graphics to display the progress of the program as it searches for a solution. During the demonstration, a student can provide the value of N. With N less than 4, the program is rather boring. But N=4 provides some interest. N=10 takes a few minutes, but it is interesting to watch and the students can try to figure out the algorithm used by the program.

17 Cum lucrează programul
Programul utilizează o stivă pentru a reţine poziţia fiecărei regine. I want to show you the algorithm that the program uses. The technique is called backtracking. The key feature is that a stack is used to keep track of each placement of a queen.

18 Cum lucrează programul
De fiecare dată programul alege să aşeze o regină pe tablă, iar poziţia nouă este memorată într-o înregistrare care este aşezată în stivă For example, when we place the first queen in the first column of the first row, we record this placement by pushing a record onto the stack. This record contains both the row and column number of the newly-placed queen. RÂND 1, COL 1

19 Cum lucrează programul
Deasemenea vom avea şi o variabilă care săreţină câte rânduri au fost utilizate In addition to the stack, we also keep track of one other item: an integer which tells us how many rows currently have a queen placed. RÂND 1, COL 1 1 OCUPATE

20 Cum lucrează programul
De fiecare dată când vom încerca să aşezăm o nouă regină în rândul următor, vom începe prin a amplasa regina în prima coloană.... RÂND 2, COL 1 When we successfully place a queen in one row, we move to the next row. We always start by trying to place the queen in the first column of the new row. RÂND 1, COL 1 1 OCUPATE

21 Cum lucrează programul
...dacă este un conflict cu o altă regină atunci aşezăm noua regină pe coloana următoare RÂND 2, COL 2 But each new placement must be checked for potential conflicts with the previous queen. If there is a conflict, then the newly-placed queen is shifted rightward. RÂND 1, COL 1 1 OCUPATE

22 Cum lucrează programul
Dacă apare un nou conflict atunci regina va fi mutată pe următoarea poziţie la dreapta RÂND 2, COL 3 Sometimes another conflict will occur, and the newly-placed queen must continue shifting rightward. RÂND 1, COL 1 1 OCUPATE

23 Cum lucrează programul
Atunci când nu mai există conflicte programul se opreşte şi adăugăm o valoare la variabila care reţine nr. rândurilor RÂND 2, COL 3 When the new queen reaches a spot with no conflicts, then the algorithm can move on. In order to move on, we add one to the value of filled... RÂND 1, COL 1 2 OCUPATE

24 Cum lucrează programul
Să privim rândul nr. 3. Pe prima poziţie pe care o încercăm este conflict..... RÂND 3, COL 1 R ÂND 2, COL 3 ...and place a new queen in the first column of the next row. R ÂND 1, COL 1 2 OCUPATE

25 Cum lucrează programul
... Atunci trecem pe coloana 2, dar şi aici este un conflict...... RÂND 3, COL 2 R ÂND 2, COL 3 In this example, there is a conflict with the placement of the new queen, so we move her rightward to the second column. RÂND 1, COL 1 2 OCUPATE

26 Cum lucrează programul
...şi vom trece pe pe a treia coloană unde este un nou conflict... RÂND 3, COL 3 RÂND 2, COL 3 Another conflict arises, so we move rightward to the third column. RÂND 1, COL 1 2 OCUPATE

27 Cum lucrează programul
...se trece atunci în coloana 4, unde din cauza unui nou conflict, vom încerca să trecem într-o coloană la stânga... RÂND 3, COL 4 RÂND 2, COL 3 Yet another conflict arises, so we move to the fourth column. The key idea is that each time we try a particular location for the new queen, we need to check whether the new location causes conflicts with our previous queens. If so, then we move the new queen to the next possible location. RÂND 1, COL 1 2 OCUPATE

28 Cum lucrează programul
...dar aici nu avem cum să ne ducem. RÂND 3, COL 4 RÂND 2, COL 3 Sometimes we run out of possible locations for the new queens. This is where backtracking comes into play. RÂND 1, COL 1 2 OCUPATE

29 Cum lucrează programul
Când ieşim de pe tablă pe rândul respectiv: Coborâm în stivă, Reducem rândul cu 1 Şi continuăm să lucrăm în acest rând RÂND 2, COL 3 To backtrack, we throw out the new queen altogether, popping the stack, reducing filled by 1, and returning to the previous row. At the previous row, we continue shifting the queen rightward. RÂND 1, COL 1 1 OCUPATE

30 Cum lucrează programul
Acum continuăm să lucrăm pe rândul 2 deplasând regina la dreapta. RÂND 2, COL 4 Notice that we continue the previous row from the spot where we left off. The queen shifts from column 3 to column 4. We don't return her back to column 1. It is the use of the stack that lets us easily continue where we left off. The position of this previous queen is recorded in the stack, so we can just move the queen rightward one more position. RÂND 1, COL 1 1 OCUPATE

31 Cum lucrează programul
Aici nu avem conflicte şi atunci incrementăm variabila cu 1 şi trecem la rândul 3. RÂND 2, COL 4 The new position for row 2 has no conflicts, so we can increase filled by 1, and move again to row 3. RÂND 1, COL 1 2 OCUPATE

32 Cum lucrează programul
În acest rând începem cu prima coloană. RÂND 3, COL 1 RÂND 2, COL 4 At the new row, we again start at the first column. So the general rules are: When the algorithm moves forward, it always starts with the first column. But when the algorithm backtracks, it continues whereever it left off. RÂND 1, COL 1 2 OCUPATE

33

34 Descrierea metodei Transformările care pot fi aplicate unei configuraţii sunt: Atribuie şi avansează mai există valori neconsumate, valoarea aleasă respectă condiţiile de continuitate valoarea se atribuie vectorului soluţie se avansează la următoarea componenta xk+1 Încercare eşuată mai există valori neconsumate valoarea aleasă nu respectă condiţiile de continuitate valoarea se consumă nu se avansează la următoarea componenta Revenire toate valorile au fost consumate se revine la componenta anterioară xk-1 se încearcă atribuirea unei noi valori acestei componente pentru componenta xk se încearcă din nou toate valorile posibile Revenire după construirea unei soluţii toate componentele vectorului au primit valori care satisfac condiţille interne (s-a găsit o soluţie) se revine la ultima componentă xn se atribuie acesteia o nouă valoare caz particular al revenirii Terminarea algoritmului are loc atunci când: toate valorile pentru prima componentă s-au consumat se încearcă o revenire, lucru care este imposibil (k=0) nici una din cele 4 transformări nu mai poate fi apicată încercarea de trecere pe poziţia (k=0) este utilizată ca şi condiţie de terminare a algoritmului

35 procedure Retsol; // listează soluţia determinată
pentru i=1, n scrie x[i] function Cont(k): boolean; //verifică dacă s-au determinat toate elementele din mulţime ce constituie vectorul soluţie Cont←True // iniţializare optimistă pentru i=1, k // se alege k-1 pentru a evita situaţia de a ajunge la n+1 daca x[i]=x[k] sau abs(k-i)=abs(x[k]-x[i]) atunci // condiţiile interne (de continuitate) Cont←False procedure back; k←1 pentru i=1, n // se construieşte configuraţia iniţială x[i] ← 0 cât timp k> // k=0 înseamnă terminarea căutării dacă k=n+1 atunci // configuraţia este de tip soluţie Retsol; // reţine soluţia k←k-1; // revenire după soluţie (T4) alltfel dacă x[k]<n atunci // mai există valori neconsumate x[k] ←x[k] // se alege o nouă valoare din mulţime, valoarea fiind considerată astfel consumată dacă Cont(k) atunci // se verifică condiţiile de continuitate k←k // atribuie şi avansează (T1) altfel// nu face nimic // încercare eşuată (T2) altfel // revenire (T3) x[k] ←0; k←k-1; Programul principal: start citeşte n //citeşte nr. de elemente al mulţimii A pentru i=1, n //citeşte elementele mulţimii A citeşte a[i] back; stop

36

37 Watching the program work
Puteţi da dublu clik pe icoana de mai jos pentru a vedea din nou programul cum funcţionează: Just for fun, we can run the demonstration program again now. See if you can follow the backtracking in action.

38 Recapitulare Aplicaţia pe care am văzut-o este backtracking.
Cheia după care funcţionează backtracking –ul este: fiecare posibilitate se memorează pe stivă Când s-au consumat toate posibilităţile pentru soluţia respectivă, se coboară în stivă şi se aleg alte posibilităţi pentru acestă soluţie. A quick summary . . .


Download ppt "Metoda Backtracking Metoda Implementarea"

Similar presentations


Ads by Google