Metoda Backtracking Metoda Implementarea

Slides:



Advertisements
Similar presentations
Crearea unei prezentari PowerPoint
Advertisements

 Chapter 7 introduces the stack data type.  Several example applications of stacks are given in that chapter.  This presentation shows another use called.
P Chapter 6 introduces the stack data type. p Several example applications of stacks are given in that chapter. p This presentation shows another use called.
The N-Queens Problem lab01.
Z IDURILE SECOLULUI XX Ziduri politice Bariere comerciale Ziduri in domeniul transporturilor Ziduri in zona comunicarii si comunicatiilor.
Politici publice Definirea problemelor Curs 3. Perceperea problemelor de politic ă public ă Problemele = nevoi umane care necesit ă rezolvare Problemele.
PROGRAMUL CADRU 7 Cum să folosim facilitatea CORDIS: “Search for partners”
Batalia sexelor O lume dominata de barbati vs o lume dominata de femei.
CSC212 Data Structure - Section FG Lecture 12 Stacks and Queues Instructor: Zhigang Zhu Department of Computer Science City College of New York.
Present Perfect Simple prezentare. Schema de formare: Afirmativ: S + have/has + V(III)/ V(-ed)… Negativ: S + have/has + not + V(III)/ V(-ed)… Interogativ:
(passive voice) -prezentare -
Mic îndreptar pentru formulari cotidiene în birou.
 Chapter 7 introduces the stack data type.  Several example applications of stacks are given in that chapter.  This presentation shows another use called.
ADT Stack What Is a Stack? Standard Template Library Stack Class
CSC212 Data Structure - Section AB
Using a Stack Chapter 6 introduces the stack data type.
ACTIVITATEA 1 -,, PROFESOR IT LA PAPI’’
Subinterogări multiple
Oracle Academy Lead Adjunct
Căutarea şi regăsirea informaţiei.
PASII INSTALARII SISTEMULUI DE OPERARE
Using a Stack Chapter 6 introduces the stack data type.
Windows Movie Maker.
IF Clause prezentare.
CREATE, DROP,ALTER INSERT, UPDATE, DELETE
Căutarea şi regăsirea informaţiei.
Şomerul…..
Stiva este acea formă de organizare a datelor (structură de date) cu proprietatea că operaţiile de introducere şi scoatere a datelor se fac în vârful ei.
Paxos Made Simple Autor: Puşcaş Radu George
Recursion Copyright (c) Pearson All rights reserved.
METODA BACKTRACKING Examenul de bacalaureat 2012
Cursul 3 Cautare peste siruri problema cautarea naiva
CONVERSII INTRE SISTEME DE NUMERATIE
Macromedia Flash 8 Ciobanu Razvan | Cls a IX-a A
WebSite Social Tema 2 WebSite Social.
MICROSOFT EXCEL.
Problema rucsacului lacom
Tipuri structurate Tipul tablou
SUBNETAREA.
Grasu leonard ionut Trifu gabriel
Web Form BuilDer Coffee Cup.
Modificarea structurii unei tabele
original creator unknown
Present Simple prezentare.
MICROSOFT EXCEL Notiuni introductive
Formatarea paragrafului
Funcții C/C++ continuare
prof. mrd. Negrilescu Nicolae Colegiul National Vlaicu Voda
Past Perfect Simple prezentare.
ADULTUL DE MIJLOC (continuare).
original creator: unknown
Mic ghid pentru crearea unei prezentari PowerPoint
Eclipsele de soare si de luna
Past Perfect Continuous
Forms (Formulare).
Using a Stack Chapter 6 introduces the stack data type.
original creator unknown
A great way to create a channel of communication
Îmbinare corespondenţă
Programarea in limbajul Java 2004 Lecturer: Gavrila Cristian
PARE IMPOSIBIL! GENERALUL DWIGHT D. EISENHOWER A AVUT
Crearea unei aplicatii Windows Forms simple
Refracţia luminii.
Implementarea listelor simplu inlantuite
Harti de imagini, Cadre, Stiluri
Despre lamaie.net De ce sunt lamaile acre? Realizatori: Cristina Cazan
Tabele WEB.
Stacks.
Using a Stack Chapter 6 introduces the stack data type.
Using a Stack Chapter 6 introduces the stack data type.
Presentation transcript:

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

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

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”

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

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

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

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.

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.

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.

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...

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...

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.

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

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.

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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-1 // 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>0 // 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]+1 // 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+1 // 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

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.

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 . . .