Metoda backtracking

Proiect
8/10 (2 voturi)
Conține 1 fișier: doc
Pagini : 35 în total
Cuvinte : 3569
Mărime: 36.54KB (arhivat)
Publicat de: Gina Sandor
Puncte necesare: 7
Profesor îndrumător / Prezentat Profesorului: Stanciu Gherghina

Cuprins

  1. Capitolul 1: Aspecte teoretice.3
  2. Capitolul 2: Probleme de combinatorică.7
  3. 2.1. Generarea permutărilor.7
  4. 2.2. Generarea aranjamentelor.9
  5. 2.3. Generarea combinărilor.11
  6. 2.4. Generarea produsului cartezian.13
  7. 2.5. Generarea submulţimilor.15
  8. Capitolul 3: Tabla de şah.16
  9. 3.1. Problema damelor.16
  10. 3.2. Problema turelor.21
  11. 3.3. Problema nebunilor.23
  12. 3.4. Problema cailor.25
  13. 3.5. Problema regilor.27
  14. Capitolul 4: Alte probleme.29
  15. 4.1. Problema colorării hărţilor.29
  16. 4.2. Problema comisului voiajor.32

Extras din proiect

CAPITOLUL 1:

ASPECTE TEORETICE

Această tehnică se foloseşte în rezolvarea problemelor care îndeplinesc simultan următoarele condiţii:

• soluţia lor poate fi pusă sub forma unui vector S=x1,x2,….xn, cu x1 A1,….,An;

• mulţimile A1,A2,….,An sunt mulţimi finite, iar elementele lor se consideră că se află într-o relaţie că se află într-o relaţie de ordine bine stabilită ;

• nu se dispune de o altă metodă mai rapidă ;

Observaţii :

• nu pentru toate problemele n este cunoscut de la început ;

• x1,x2,….,xn pot fi la rândul lor vectori ;

• în multe probleme mulţimile A1,A2,….,An coincid.

La întâlnirea unei astfel de probleme, dacă nu cunoaştem această tehnică, suntem tentaţi să generăm toate elementele produsului cartezian A1XA2X….XAn şi fiecare element să fie testat dacă este soluţie. Rezolvând problema în acest mod, timpul de execuţie este atât de mare,încât poate fi considerat infinit, algoritmul neavând nicio valoare practică.

De exemplu, dacă dorim să generam toate permutările unei mulţimi finite A, nu are rost să generăm produsul cartezian AXAX....XA, pentru ca, apoi, să testăm, pentru fiecare element al acestuia, dacă este sau nu permutare (nu are rost să generăm 1,1,...,1. pentru ca să constatăm că nu am obţinut o permutare, când de la a doua cifra 1 ne puteam da seama că cifrele nu sunt distincte).

Observaţie : tehnica Backtracking are ca rezultat obţinerea tuturor soluţiilor problemei. În cazul în care se cere o singura soluţie, se poate forţa oprirea, atunci când a fost gasită.

• Pentru uşurarea înţelegerii metodei, vom prezenta o rutina unică (aplicabilă oricărei probleme), rutina care este elaborate folosind structura de stivă. Rutina va apela funcţii care au întotdeauna acelaşi nume şi care, din punct de vedere al metodei, realizează acelaşi lucru. Sarcina rezolvitorlui este să scrie explicit, pentru fiecare problema în parte funcţiile apelate de metoda backtracking.

• Evident, o astfel de abordare conduce la programe lungi. Nimeni nu ne opreşte ca, după înţelegerea metodei, să scriem programe scurte, specifice fiecărei probleme în parte (de exemplu, scurtăm substanţial textul doar dacă renunţăm utilizarea unor funcţii, scriind instrucţiunile lor chiar în corpul rutinei).

• Am arătat că orice soluţie se generează sub forma de vector. Vom considera că generarea soluţiilor se face într-o stivă. Astfel x1 A1 se va găsi pe nivelul k al stivei , x2 A2 se va găsi pe nivelul 2 al stivei ,.. xk Ak se va găsi pe nivelul k. În acest fel , stiva (notat st) va arăta ca mai jos :

Xk

...

...

...

x2

x1

Nivelul k+1 al stivei trebuie iniţializat (pentru a alege, în ordine, elementele mulţimii k+1). Iniţializarea trebuia facută cu o valoare aflată (în relaţia de ordine considerate pentru mulţimea Ak+1) înaintea tuturor valorilor posibile din mulţime.

De exemplu, pentru generarea permutărilor mulţimii {1,2,.....,n} , orice nivel al stivei va lua valori de la 1 la n. Iniţializarea unui nivel (oarecare) se face de obicei cu valoarea 0.

• Dacă mai există elemente netestate în mulţimea Ak se testează, dacă adăugate la soluţia parţială pot conduce la o soluţie validă, în funcţie de condiţiile interne ale problemei. În caz afirmativ valoarea returnată de funcţia valid () este 1, altfel funcţia returnează 0.

• Testăm dacă s-a ajuns sau nu la soluţia finală urmărind condiţiile impuse de problemă

• Soluţia se tipăreşte cu ajutorul funcţiei Soluţie().

Preview document

Metoda backtracking - Pagina 1
Metoda backtracking - Pagina 2
Metoda backtracking - Pagina 3
Metoda backtracking - Pagina 4
Metoda backtracking - Pagina 5
Metoda backtracking - Pagina 6
Metoda backtracking - Pagina 7
Metoda backtracking - Pagina 8
Metoda backtracking - Pagina 9
Metoda backtracking - Pagina 10
Metoda backtracking - Pagina 11
Metoda backtracking - Pagina 12
Metoda backtracking - Pagina 13
Metoda backtracking - Pagina 14
Metoda backtracking - Pagina 15
Metoda backtracking - Pagina 16
Metoda backtracking - Pagina 17
Metoda backtracking - Pagina 18
Metoda backtracking - Pagina 19
Metoda backtracking - Pagina 20
Metoda backtracking - Pagina 21
Metoda backtracking - Pagina 22
Metoda backtracking - Pagina 23
Metoda backtracking - Pagina 24
Metoda backtracking - Pagina 25
Metoda backtracking - Pagina 26
Metoda backtracking - Pagina 27
Metoda backtracking - Pagina 28
Metoda backtracking - Pagina 29
Metoda backtracking - Pagina 30
Metoda backtracking - Pagina 31
Metoda backtracking - Pagina 32
Metoda backtracking - Pagina 33
Metoda backtracking - Pagina 34
Metoda backtracking - Pagina 35

Conținut arhivă zip

  • Metoda Backtracking.doc

Alții au mai descărcat și

Limbaje de Programare

Cap.I ARGUMENT Lucrarea de fata “Limbaje de programare” isi propune sa pregateasca cititorul in scopul insusirii si utilizarii unui limbaj de...

Proiect Algoritmi și Structuri de Date

<<INTRODUCERE>> Procesele desfăşurate într-o activitate organizată nu au loc la întam-plare, ci sunt declanşate de anumite informaţii care...

Algoritmi Simpli Algoritmi de Sortare

Notiunea de algoritm este o notiune de baza pentru programarea calculatoarelor, astfel ca trebuie sa începem cu un studiu atent al acestui concept....

Hackeri

Hackerii sunt pasionati ai informaticii, care, de obicei au ca scop „spargerea” anumitor coduri, baze de date, pagini web etc. Ei sunt considerati...

Baze de Date

CAPITOLUL I INTRODUCERE IN BAZE DE DATE CURSUL 1 1. Ce este o baza de date? La inceput calculatoarele au fost utilizate numai pentru calcule...

Algoritmică și programare

1. Descrierea algoritmilor, limbajul Pseudocod. 1.1. Descrierea algoritmilor. Prin algoritm putem în•elege o succesiune finit• de opera•ii....

Te-ar putea interesa și

Backtracking Recursiv

1. METODA BACKTRACKING 1. 1. Stiva Stiva este acea formã de organizare a datelor ( structurã de date ) cu proprietatea cã operatiile de...

Turbo Pascal - metoda backtracking - tehnica Greedy

Aparitia limbajului Pascal este un raspuns la criza care a aparut in domeniul programarii calculatoarelor , la sfarsitul anilor ’60 . Limitarile...

Metoda backtracking

Metoda backtracking se utilizeaza pentru rezolvarea unor probleme in care: - se obtin mai multe solutii; -solutia este formata din unul sau mai...

Problema celor 8 regine

1. Sarcina lucrării Să se scrie un program ce rezolvă următoarea problema: Problema celor 8 dame:Se cere să se găseasca toate soluţiile de...

Metoda backtracking - plată unei sume de bani

I.1.Notiuni introductive Limbajul Turbo Pascal a aparut la inceputul anilor ’70 si a fost elaborat de matematicianul N. Wirth. Initial limbajul a...

Metoda backtracking

METODA BACKTRACKING Tehnica folosita:Metoda Backtracking Aceasta tehnica se foloseste in rezolvarea problemelor care indeplinesc simulltan...

Problemă labirint - Turbo Pascal

1 Metoda backtracking Stiva este acea forma de organizare a datelor (structura de date ) cu proprietatea ca operatiile de introducere si scoatere...

Metoda backtracking

Metoda Backtracking - metoda „revenirii”, definită şi elaborată de AI (Artificial Intelligence); este o metodă folosită în cazul problemelor în...

Ai nevoie de altceva?