Metoda BACKTRACKING. prof. Jiduc Gabriel

Similar documents
Metoda de programare BACKTRACKING

Metrici LPR interfatare cu Barix Barionet 50 -

Subiecte Clasa a VI-a

Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

Procesarea Imaginilor

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

Olimpiad«Estonia, 2003

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

ISBN-13:

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

În continuare vom prezenta unele dintre problemele de calcul ale numerelor Fibonacci.

Versionare - GIT ALIN ZAMFIROIU

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

Mecanismul de decontare a cererilor de plata

Metoda Backtracking. Metoda backtracking se aplică algoritmilor pentru rezolvarea următoarelor tipuri de

Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

Modalitǎţi de clasificare a datelor cantitative

Auditul financiar la IMM-uri: de la limitare la oportunitate

GHID DE TERMENI MEDIA

The First TST for the JBMO Satu Mare, April 6, 2018

Grafuri bipartite. Lecție de probă, informatică clasa a XI-a. Mihai Bărbulescu Facultatea de Automatică și Calculatoare, UPB

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

MODELUL UNUI COMUTATOR STATIC DE SURSE DE ENERGIE ELECTRICĂ FĂRĂ ÎNTRERUPEREA ALIMENTĂRII SARCINII

The driving force for your business.

9. Memoria. Procesorul are o memorie cu o arhitectură pe două niveluri pentru memoria de program și de date.

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

INSTRUMENTE DE MARKETING ÎN PRACTICĂ:

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

EN teava vopsita cu capete canelate tip VICTAULIC

INTEROGĂRI ÎN SQL SERVER

CERERI SELECT PE MAI MULTE TABELE

Reţele Neuronale Artificiale în MATLAB

Baze de date distribuite și mobile

Lucrarea de laborator nr. 4

REZOLVAREA NUMERICĂ A ECUAŢIILOR CU DERIVATE PARŢIALE FOLOSIND METODA LINIILOR

Excel Advanced. Curriculum. Școala Informală de IT. Educație Informală S.A.

Updating the Nomographical Diagrams for Dimensioning the Concrete Slabs

CERERI SELECT PE O TABELA

HEAPSORT I. CONSIDERAŢII TEORETICE

Managementul referinţelor cu

Evoluția pieței de capital din România. 09 iunie 2018

Documentaţie Tehnică

Mods euro truck simulator 2 harta romaniei by elyxir. Mods euro truck simulator 2 harta romaniei by elyxir.zip

Laborator 2. Definirea tablourilor şi a funcţiilor (în linia de comandă) în Matlab 7.0

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

Dispozitive Electronice şi Electronică Analogică Suport curs 02 Metode de analiză a circuitelor electrice. Divizoare rezistive.

Vizualizarea documentelor xml

Proiect cofinanțat din Fondul Social European prin Programul Operaţional Sectorial pentru Dezvoltarea Resurselor Umane

Managementul Proiectelor Software Metode de dezvoltare

Proiectarea Sistemelor Software Complexe

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

earning every day-ahead your trust stepping forward to the future opcom operatorul pie?ei de energie electricã și de gaze naturale din România Opcom

X-Fit S Manual de utilizare

USING SERIAL INDUSTRIAL ROBOTS IN CNC MILLING PROCESESS

PACHETE DE PROMOVARE

Printesa fluture. Мобильный портал WAP версия: wap.altmaster.ru

F. Radulescu. Curs: Utilizarea bazelor de date, anul IV C5.

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

Prima. Evadare. Ac9vity Report. The biggest MTB marathon from Eastern Europe. 7th edi9on

SAG MITTIGATION TECHNICS USING DSTATCOMS

ANTICOLLISION ALGORITHM FOR V2V AUTONOMUOS AGRICULTURAL MACHINES ALGORITM ANTICOLIZIUNE PENTRU MASINI AGRICOLE AUTONOME TIP V2V (VEHICLE-TO-VEHICLE)

10. Modelarea şi eliminarea zgomotelor din imaginile digitale

Funcţii grup şi clauzele GROUP BY, HAVING. Operatorii ROLLUP şi CUBE.

3. Metoda Back Tracking 4. Metoda Programării Dinamice 5. Metoda Branch and Bound 6. Metode. Euristice 7. Algoritmi Genetici

O abordare Data Mining pentru detectarea accesului neautorizat la baza de date.

Generarea şi validarea numerelor prime mari

Vol.I ALGORITMI GENETICI LUȚĂ COSTINA CLAUDIA ALGORITMI GENETICI VOL.I ISBN

ADMITERE 2015 SUBIECTELE PROBELOR ŞI BAREMELE DE CORECTARE ŞI NOTARE PROFILUL MAIŞTRI MILITARI PROBA NR.1 TEST GRILĂ LA LIMBA ENGLEZĂ VARIANTA 2

LIDER ÎN AMBALAJE EXPERT ÎN SISTEMUL BRAILLE

Propuneri pentru teme de licență

A NOVEL ACTIVE INDUCTOR WITH VOLTAGE CONTROLLED QUALITY FACTOR AND SELF-RESONANT FREQUENCY

A Die-Linked Sequence of Dacian Denarii

Proiectarea bazelor de date. PL/SQL Înregistrări și Colecții # 13. Adrian Runceanu

CHAMPIONS LEAGUE 2017 SPONSOR:

STARS! Students acting to reduce speed Final report

Structuri de date: ARBORI

METODE NOI ÎN PROIECTARE

Class D Power Amplifiers

Candlesticks. 14 Martie Lector : Alexandru Preda, CFTe

I. STRATEGII ÎN REZOLVAREA PROBLEMELOR

CAIETUL DE SARCINI Organizare evenimente. VS/2014/0442 Euro network supporting innovation for green jobs GREENET

Preţul mediu de închidere a pieţei [RON/MWh] Cota pieţei [%]

UTILIZAREA CECULUI CA INSTRUMENT DE PLATA. Ela Breazu Corporate Transaction Banking

Restaurarea frontierelor unei imagini: abordare genetica

manivelă blocare a oglinzii ajustare înclinare

APLICAŢII ELEMENTARE CU ARBORI

INTELIGENŢĂ ARTIFICIALĂ

Capitolul 4 SUBCERERI. F. Radulescu. Curs: Baze de date - Limbajul SQL

ACTA TECHNICA NAPOCENSIS

M C I O H L BAZE DE CUNOŞTINŢE A H E O L N S I S T E M E D E R E P R E Z E N A R E Ş I P R O C E S A R E A A C U N O Ş T I N Ţ E L O R

Capitolul 7. Data mining. F. Radulescu. Curs: Utilizarea bazelor de date, anul IV C5.

DE CE SĂ DEPOZITAŢI LA NOI?

Update firmware aparat foto

Kurt Gödel Argumentul ontologic

1. Creaţi un nou proiect de tip Windows Forms Application, cu numele MdiExample.

Transcription:

Metoda BACKTRACKING prof. Jiduc Gabriel

Un algoritm backtracking este un algoritm de căutare sistematică și exhausivă a tuturor soluțiilor posibile, dintre care se poate alege apoi soluția optimă. Problemele rezolvabile prin metoda backtracking sunt probleme ale căror soluții pot fi exprimate prin vectori de întregi și pot fi enunțate ca probleme: de decizie de enumerare a tuturor soluțiilor de optimizare Totuși, din cauza complexității foarte mari a algoritmului (consum mare de resurse ale calculatorului și timp mare), metoda se recomandă problemelor pentru care nu se cunoaște un algoritm mai eficient sau problemelor de dimensiuni relativ mici (sub 30-50 valori rulate)

Ex: problema are ca date o mulțime de numere naturale M și o valoare naturală val, enunțuri posibile sunt: Să se decidă dacă există o submulțime M a lui M astfel încât suma elementelor ei să fie egală cu val (problemă de decizie) Să se determine toate submulțimile M ale lui M care îndeplinesc condiția ca suma elementelor lor să fie egală cu val (problemă de enumerare) Să se determine o submulțime M a lui M astfel ca suma elementelor din M să aibă valoarea cea mai apropiată de val (dar nu mai mare ca val) (problemă de optimizare)

Căutarea exhausivă a vectorilor soluție este un proces de căutare cu revenire. Acest proces seamănă cu căutarea unui drum către o anumită țintă pe o rețea de drumuri cu ramificații (fără indicatoare) pentru cineva care nu cunoaște zona și traseul. La fiecare ramificație de drumuri persoana alege un drum la întâmplare, dar dacă ulterior acest drum se dovedește greșit, atunci ea revine la ultima bifurcație și încearcă alt traseu Soluțiile acestor probleme au forma unor vectori V ale căror componente satisfac anumite condiții specifice problemei (în general elementele soluției sunt numere naturale dintr-o mulțime finită) Metoda backtracking construiește progresiv un vector soluție, începând cu V[1] și continuând cu V[2], V[3],..,V[n]. Pentru fiecare componentă a vectorului soluție V se încearcă toate variantele posibile 1, 2, 3,..., m.

Ex: determinarea permutărilor de n obiecte (pt n=3, valorile disponibile sunt 1, 2, 3 și nu trebuie să se repete) X[1] X[2] X[3] Observații 1 1 1 nu convine 1 2 1 2 1 nu convine 1 2 2 nu convine 1 2 3 soluție (se reține) 1 2? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 1 3 1 3 1 nu convine 1 3 2 soluție (se reține ) 1 3 3 nu convine 1 3? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 1? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 2 2 1 2 1 1 nu convine 2 1 2 nu convine 2 1 3 soluție (se reține și se revine la pasul anterior) 2 1? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 2 2 nu convine 2 3 2 3 1 soluție (se reține) 2 3 2 nu convine 2 3 3 nu convine 2 3? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 2? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 3 3 1 3 1 1 nu convine 3 1 2 soluție (se reține) 3 1 3 nu convine 3 1? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 3 2 3 2 1 soluție (se reține) 3 2 2 nu convine 3 2 3 nu convine 3 2? Nu mai sunt valori disponibile (se întoarce la pasul anterior) 3 3 nu convine 3? Nu mai sunt valori disponibile (se întoarce la pasul anterior)? Nu mai sunt valori disponibile (se întoarce la pasul anterior) =problema se încheie

Potrivit metodei în pasul k al determinării soluției se încearcă pentru v[k] pe rând toate valorile posibile 1, 2,...m și pentru fiecare se verifică respectarea condițiilor impuse. Pot apărea două situații: Există o valoare pentru vk], care împreună cu valorile anterioare ale vectorului soluție v să respecte condițiile date. În acest caz se continuă cu determinarea componentei următoare a lui v, v[k+1] Nu există nici o valoare pentru v[k] care să respecte condițiile date; în acest caz se revine la componenta anterioară v[k-1] și se încearcă următoarea valoare pentru ea (dacă mai există) Schema generală a metodei Backtracking Pentru o simplificare a rezolvării și o înțelegere mai rapidă se vor utiliza mai multe funcții Funcția void back(int k)-funcția pivot a programului, care implementează strategia de generare a vectorilor candidați și selectare a vectorilor soluție, corespunzătoare pasului k al soluției Funcția void prel_sol()-care prelucrează soluția obținută: O afișează O compară cu soluția optimă parțială, etc.

Funcția int posibil(int k)-determină dacă valoarea atribuită lui V[k] este validă (îndeplinește condițiile impuse de problemă) Funcția void include(int k)-adaugă soluției parțiale elementul V[k] (ex: când trebuie calculată suma elementelor- s=s+v[k];) Funcția void excude(int k)-elimină din soluția parțială elementul V[k], la întoarcerea de la palierul superior (k+1), când trebuie încercată altă valoare pentru V[k]. (ex: pentru problema dată- s=s-v[k];) În unele situații (probleme), operațiile fiind foarte simple, aceste funcții conțin 1-2 instrucțiuni sau pot fi înlocuite cu instrucțiuni scrise direct în funcția bază BACK Metoda backtracking are o implementare atât iterativă cât și una recursivă Datorită simplității, în continuare se prezintă algoritmul general recursiv al metodei (nu este general valabil!)

void back(int k) int i; if(k>n) prel_sol(); else for(i=1;i<=m;i++) v[k]=i; if(posibil(k)) include(k); back(k+1); exclude(k); Observație: în exemplu, s-a considerat că valorile posibile pentru vectorul soluție aparțin mulțimii 1, 2,..., m

Determinarea permutărilor unei mulțimi cu n elemente #include<iostream.h> #include<conio.h> int v[10],n; void prel_sol() int i; for(i=1;i<=n;i++) cout<<v[i]<<"\t"; cout<<endl; int posibil(int k) int i; for(i=1;i<k;i++) if(v[i]==v[k]) return 0; return 1; void back(int k) int i; if(k>n) prel_sol(); else for(i=1;i<=n;i++) v[k]=i; if(posibil(k)) back(k+1); main() cout<<"nr elem multimii="; cin>>n; back(1); getch();