curs 13: tehnica căutării cu revenire...

Download Curs 13: Tehnica căutării cu revenire (Backtracking)web.info.uvt.ro/~dzaharie/alg/alg2012_folii13.pdf · Algoritmica - Curs 13 14 Aplicație 2: problema reginelor Săse determine

If you can't read please download the document

Upload: dodat

Post on 07-Feb-2018

223 views

Category:

Documents


1 download

TRANSCRIPT

  • Algoritmica - Curs 13 1

    Curs 13:

    Tehnica cutrii cu revenire(Backtracking)

  • Algoritmica - Curs 13 2

    Structura

    Ce este tehnica cutrii cu revenire ?

    Structura general a algoritmilor proiectai folosind aceasttehnic

    Aplicaii: Generarea permutrilor Problema plasrii reginelor pe tabla de ah Colorarea hrilor Gsirea traseelor care unesc dou locaii Problema labirintului

  • Algoritmica - Curs 13 3

    Ce este tehnica cutrii cu revenire?

    Este o strategie de cutare sistematic n spaiul soluiilor uneiprobleme

    Se utilizeaz n special pentru rezolvarea problemelor a crorcerin este de a determina configuraii care satisfac anumiterestricii (probleme de satisfacere a restriciilor). Majoritateaproblemelor ce pot fi rezolvate folosind tehnica cutrii cu revenirese ncadreaz n urmtorul ablon:

    S se gseasc o submulime S a produsului cartezian A1 x A2 x x An (Ak mulimi finite) avnd proprietatea c fiecare element s=(s1,s2,,sn) satisface anumite restrictii

    Exemplu: generarea tuturor permutrilor mulimii {1,2,,n}Ak = {1,2,,n} pentru fiecare k=1..nsi sj pentru orice ij (restricia: componente distincte)

  • Algoritmica - Curs 13 4

    Ce este tehnica cutrii cu revenire?Ideea de baza: Soluiile sunt construite n manier incremental prin gsirea

    succesiv a valorilor potrivite pentru componente (la fiecare etapse completeaz o component obinndu-se o soluie parial)

    Fiecare soluie parial este evaluat cu scopul de a stabili daceste valid (promitoare). O soluie parial valid poate conduce la o soluie final pe cnd una invalid ncalc restriciile pariale, nsemnnd c nu va conduce niciodat la o soluie care ssatisfac toate restriciile problemei

    Dac nici una dintre valorile corespunztoare unei componente nu conduce la o soluie parial valid atunci se revine la componentaanterioar i se ncearc alt valoare pentru aceasta.

  • Algoritmica - Curs 13 5

    Ce este tehnica cutrii cu revenire?Ideea de baz:

    Principiul tehnicii poate fi vizualizat folosind un arbore de cutarecare ilustreaz parcurgerea spaiului soluiilor:

    Rdcina arborelui corespunde strii iniiale (nainte de a ncepecompletarea componentelor)

    Un nod intern corespunde unei soluii pariale valide

    Un nod extern (frunz) corespunde fie unei soluii pariale invalide fie unei soluii finale

  • Algoritmica - Curs 13 6

    Ce este tehnica cutrii cu revenire?Exemplu: arborele de parcurgere a spaiului soluiilor n cazul

    problemei de generare a permutrilor (n=3)

    (*,*,*)

    (1,*,*) (2,*,*) (3,*,*)

    (1,1,*) (1,2,*) (1,3,*)

    (1,2,3) (1,3,2)

    (2,1,*) (2,2,*) (2,3,*) (3,1,*) (3,2,*) (3,3,*)

    (2,1,3) (2,3,1) (3,1,2) (3,2,1)

  • Algoritmica - Curs 13 7

    Structura general a algoritmului

    Etape n proiectarea algoritmului:

    1. Se alege modul de reprezentare a soluiilor

    2. Se identific spaiul de cutare i se stabilesc mulimile A1,,Ani ordinea n care acestea sunt parcurse

    3. Din restriciile problemei se deduc condiiile pe care trebuie sle satisfac soluiile pariale pentru a fi valide. Aceste condiii sunt denumite condiii de continuare.

    4. Se stabilete criteriul n baza cruia se decide dac o soluieparial este soluie final

  • Algoritmica - Curs 13 8

    Structura general a algoritmului

    Exemplu: generarea permutrilor

    1. Reprezentarea soluiei: fiecare permutare este un vector s=(s1,s2,sn) care satisface sisj pentru orice ij

    2. Mulimile A1,,An : {1,2,,n}. Fiecare mulime este parcursn ordinea natural a elementelor (de la 1 la n)

    3. Condiii de continuare: o soluie parial (s1,s2,,sk) trebuie ssatisfac sksi pentru orice i

  • Algoritmica - Curs 13 9

    Structura general a algoritmului

    Notaii:

    (s1,s2,,sk) soluie parial

    k indice n s

    Ak = {ak1,,akmk}

    mk=card{Ak}

    ik - indice in Ak

  • 10

    Structura general a algoritmului

    Backtracking(A1, A2, , An)k 1; ik 0WHILE k>0 DOik ik+1 v FalseWHILE v=False AND ik

  • Algoritmica - Curs 13 11

    Structura general a algoritmului

    Varianta recursiv:

    Presupunem ca A1,,An is sunt variabile globale

    Fie k componenta care urmeaz a fi completat

    Algoritmul se apeleaz prinBT_rec(1)

    BT_rec(k)IF (s1,,sk-1) este soluie

    THEN se prelucreaz soluiaELSE FOR j 1,mk DO

    sk akjIF (s1,sk) este validTHEN BT_rec(k+1) ENDIF

    ENDFOR ENDIF

    Se ncearc fiecare valoareposibil

    Se completeaz urmtoareacomponent

  • Algoritmica - Curs 13 12

    Aplicaie 1: generarea permutrilorBacktracking(A1, A2, , An)

    k 1; ik 0WHILE k>0 DOik ik+1 v FalseWHILE v=False AND ik0 DOs[k] s[k]+1v FalseWHILE v=False AND s[k]

  • Algoritmica - Curs 13 13

    Aplicaie 1: generarea permutrilor

    Funcie care verific dac o soluie parial este valid

    valid(s[1..k])FOR i 1,k-1 DO

    IF s[k]=s[i] THEN RETURN FALSE

    ENDIFENDFORRETURN TRUE

    Varianta recursiva:

    perm_rec(k)IF k=n+1 THEN WRITE s[1..n]ELSE

    FOR i 1,n DOs[k] iIF valid(s[1..k])=True

    THEN perm_rec(k+1)ENDIF

    ENDFORENDIF

  • Algoritmica - Curs 13 14

    Aplicaie 2: problema reginelorS se determine toate posibilitile de a plasa n regine pe o tabl de

    ah de dimensiune nxn astfel nct acestea s nu se atacereciproc:

    - fiecare linie conine exact o regin- fiecare coloan conine exact o regin- fiecare diagonal conine cel mult o regina

    Obs. Este o problem clasic propus de ctre Max Bezzel (1850) i studiat de ctre mai muli matematicieni ai vremii (Gauss, Cantor)

    Exemplu: dac n

  • Algoritmica - Curs 13 15

    Aplicaie 2: problema reginelor

    1. Reprezentarea soluiei: vom considera c regina k estentotdeauna plasat pe linia k. Astfel pentru fiecare regineste suficient s se identifice coloana pe care va fi plasat. Soluia va fi astfel reprezentat printr-un tablou (s1,,sn) undesk = indicele coloanei pe care se plaseaz regina k

    2. Mulimile A1,,An : {1,2,,n}. Fiecare mulime va fiprelucrat n ordinea natural a elementelor (de la 1 la n)

    3. Condiii de continuare: o soluie parial (s1,s2,,sk) trebuies satisfac restriciile problemei (nu mai mult de o regin pefiecare linie, coloan sau diagonal)

    4. Criteriu pentru a decide dac o soluie parial este final:k = n (toate reginele au fost plasate)

  • Algoritmica - Curs 13 16

    Aplicaie 2: problema reginelorCondiii de continuare: Fie (s1,s2,,sk) o soluie parial. Aceasta este

    valid dac satisface:

    Reginele se afl pe linii diferite condiia este implicit satisfacutdatorit modului de reprezentare utilizat (regina i este ntotdeaunaplasat pe linia i)

    Reginele se afla pe coloane diferite:

    sisj pentru orice ij

    (este suficient s se verifice ca sksi pentru orice 1

  • Algoritmica - Curs 13 17

    Aplicaie 2: problema reginelorObs:

    Dou regine i i j se afl peaceeai diagonal dac

    i-si=j-sj i-j = si-sjsau

    i+si=j+sj i-j= sj-siAceasta nseamn c

    |i-j|=|si-sj|

    i-j=0

    i-j=-1

    i-j=-(n-2)i-j=1

    i-j=n-2

    i+j=n+1

    i+j=n

    i+j=3

    i+j=2n-1

    i+j=n+2

  • Algoritmica - Curs 13 18

    Aplicaie 2: problema reginelor

    Validare(s[1..k])

    FOR i 1,k-1 DO

    IF s[k]=s[i] OR |i-k|=|s[i]-s[k]| THEN RETURN False

    ENDIF

    ENDFOR

    RETURN True

    Apel: regine(1)

    Algoritm:

    regine(k)

    IF k=n+1 THEN WRITE s[1..n]

    ELSE

    FOR i 1,n DO

    s[k] i

    IF Validare(s[1..k])=True

    THEN regine(k+1)

    ENDIF

    ENDFOR

    ENDIF

  • Algoritmica - Curs 13 19

    Aplicaie 3: colorarea hrilorProblema: Considerm o hart geografic care conine n ri.

    Avnd la dispoziie 4

  • Algoritmica - Curs 13 20

    Aplicaie 3: colorarea hrilorProblema: : Considerm o hart geografic care conine n ri.

    Avnd la dispoziie 4

  • Algoritmica - Curs 13 21

    Aplicaie 3: colorarea hrilor1. Reprezentarea soluiei

    S=(s1,,sn) unde sk culoarea asociat rii k

    2. Mulimile A1,,An : {1,2,,m}. Fiecare mulime va fiprelucrat n ordinea natural a elementelor (de la 1 la m)

    3. Condiii de continuare: o soluie parial (s1,s2,,sk) trebuies satisfac sisj pentru toate perechile (i,j) pentru care N(i,j)=1

    Pentru fiecare k este suficient s se verifice ca sksj pentrutoate valorile i in {1,2,,k-1} satisfacnd N(i,k)=1

    4. Criteriu pentru a decide daca o solutie partiala este solutiefinala: k = n (toate rile au fost colorate)

  • Algoritmica - Curs 13 22

    Aplicaie 3: colorarea hrilorAlgoritm recursiv

    Colorare(k)IF k=n+1 THEN WRITE s[1..n]ELSE

    FOR j 1,m DOs[k] jIF valid(s[1..k])=True

    THEN Colorare(k+1)ENDIF

    ENDFORENDIF

    Algoritm de validare

    valid(s[1..k])FOR i 1,k-1 DO

    IF N[i,k]=1 AND s[i]=s[k]THEN RETURN FalseENDIF

    ENDFORRETURN True

    Apel: Colorare(1)

  • Algoritmica - Curs 13 23

    Aplicaie 4: gsirea traseelorConsiderm un set de n orae i o reea de drumuri care le

    conecteaz. S se determine toate traseele care conecteazdou orae date (un traseu nu poate trece de dou ori prinacelasi ora).

    Arad

    Timisoara

    Satu Mare

    Brasov

    Iasi

    Bucuresti

    Constanta

    Orae:

    1.Arad

    2.Brasov

    3.Bucuresti

    4.Constanta

    5.Iasi

    6.Satu-Mare

    7.Timisoara

    Trasee de la Arad la Constanta

    1->7->3->4

    1->2->3->4

    1->6->5->3->4

    1->6->5->2->3->4

  • Algoritmica - Curs 13 24

    Aplicaie 4: gsirea traseelorFormalizarea problemei: Reeaua de osele este specificat prin

    matricea C: 0 nu exist osea direct de la oraul i la oraul j

    C(i,j) = 1 exist osea direct de la oraul i la oraul j

    S se gseasc toate traseele S=(s1,,sm) - unde sk n {1,,n} specific oraul vizitat la etapa k - astfel nct

    s1 este oraul surssm este oraul destinaiesisj pentru orice i j (un ora este vizitat o singur dat)C(sk,sk+1)=1 (exist osea direct ntre oraele vizitate la momente

    consecutive de timp)

  • Algoritmica - Curs 13 25

    Aplicaie 4: gsirea traseelor1. Reprezentarea soluiei

    S=(s1,,sm) cu sk reprezentnd oraul vizitat la etapa k(m = numrul de etape; nu este cunoscut de la nceput)2. Mulimile A1,,An : {1,2,,n}. Fiecare mulime va fi

    prelucrat n ordinea natural a elementelor (de la 1 la n)

    3. Condiii de continuare: o soluie parial (s1,s2,,sk) trebuies satisfac:

    sksj pentru orice j n {1,2,,k-1} (oraele sunt distincte)C(sk-1,sk)=1 (se poate trece direct de la sk-1la sk)

    4. Criteriul pentru a decide dac o soluie parial este soluiefinal:

    sk = ora destinaie

  • Algoritmica - Curs 13 26

    Aplicaie 4: gsirea traseelorAlgoritm recursiv

    trasee(k)IF s[k-1]=oras destinatie THEN

    WRITE s[1..k-1]ELSE

    FOR j 1,n DOs[k] jIF valid(s[1..k])=TrueTHEN trasee(k+1)ENDIF

    ENDFORENDIF

    Algoritm de validare

    valid(s[1..k])IF C[s[k-1],s[k]]=0 THEN

    RETURN FalseENDIFFOR i 1,k-1 DO

    IF s[i]=s[k]THEN RETURN False

    ENDIFENDFORRETURN True

    Apel: s[1] ora surstrasee(2)

  • Algoritmica - Curs 13 27

    Aplicaie 5: problema labirintuluiProblema. Se consider un labirint definit pe o gril nxn. S se

    gseasc toate traseele care pornesc din (1,1) i se termin n (nxn)

    Obs. Doar celulele libere pot fi vizitate. Dintr-o celul (i,j) se poate trece n una dintre celulele vecine:

    (i,j)(i,j-1) (i,j+1)

    (i-1,j)

    (i+1,j)

    Obs: celulele de pe frontier au mai puinivecini

  • Algoritmica - Curs 13 28

    Aplicaie 5: problema labirintuluiFormalizarea problemei. Labirintul este stocat ntr-o matrice nxn

    0 celul liberM(i,j) =

    1 celul ocupatS se gseasc S=(s1,,sm) cu sk n {1,,n}x{1,,n} indicii

    corespunztori celulei vizitate la etapa k s1 este celula de start: (1,1) sm este celula destinaie: (n,n) sksq pentru orice k q (o celul este vizitat cel mult o

    dat) M(sk)=0 (doar celulele libere pot fi vizitate) sk-1 si sk sunt celule vecine

  • Algoritmica - Curs 13 29

    Aplicaie 5: problema labirintului1. Reprezentarea soluiei

    S=(s1,,sn) cu sk reprezentnd indicii celulei vizitate la etapak

    2. Mulimile A1,,An sunt submulimi ale mulimii{1,2,,n}x{1,2,,n}. Pentru fiecare celul (i,j) exist un set de 4 vecini: (i,j-1), (i,j+1), (i-1,j), (i+1,j)

    3. Condiii de continuare: o soluie parial (s1,s2,,sk) trebuie ssatisfac:

    sksq pentru orice q in {1,2,,k-1} M(sk)=0sk-1 i sk sunt celule vecine

    4. Condiia ca o soluie parial (s1,,sk) s fie soluie final:sk = (n,n)

  • Algoritmica - Curs 13 30

    Aplicatie 5: problema labirintuluilabirint(k)

    IF s[k-1].i=n and s[k-1].j=n THEN WRITE s[1..k]

    ELSE // se incearc toi vecinii

    s[k].i s[k-1].i-1; s[k].j s[k-1].j

    IF valid(s[1..k])=True THEN labirint (k+1) ENDIF

    s[k].i s[k-1].i+1; s[k].j s[k-1].j

    IF valid(s[1..k])=True THEN labirint (k+1) ENDIF

    s[k].i s[k-1].i; s[k].j s[k-1].j-1

    IF valid(s[1..k])=True THEN labirint (k+1) ENDIF

    s[k].i s[k-1].i-1; s[k].j s[k-1].j+1

    IF valid(s[1..k])=True THEN labirint (k+1) ENDIF

    ENDIF

    Obs:

    s[k].i reprezintprima component a perechii de indici

    s[k].j reprezint a doua component a perechii de indici

  • Algoritmica - Curs 13 31

    Aplicaie 5: problema labirintuluivalid(s[1..k])

    IF s[k].in OR s[k].jn // n afara grilei

    THEN RETURN False

    ENDIF

    IF M[s[k].i,s[k].j]=1 THEN RETURN False ENDIF // celul ocupat

    FOR q 1,k-1 DO // celul deja vizitat

    IF s[k].i=s[q].i AND s[k].j=s[q].j THEN RETURN False ENDIF

    ENDFOR

    RETURN TrueApel algoritm labirint:

    s[1].i:=1; s[1].j:=1

    labirint(2)

  • Algoritmica - Curs 13 32

    Curs urmtor: recapitulare

    Tematica examen:

    Algorirmi iterativi: proiectare i analiza complexitate Algoritmi recursivi: descriere i analiza complexitate Tehnici de reducere i divizare: descriere i analiza

    complexitate Algoritmi de sortare:

    algoritmi elementari (inserie, selecie, interschimbare) algoritmi eficieni (sortare prin interclasare, sortare rapid)

    Cutare local optimala (greedy) Programare dinamic Cutare cu revenire (backtracking)

    Slide Number 1StructuraCe este tehnica cutrii cu revenire?Ce este tehnica cutrii cu revenire?Ce este tehnica cutrii cu revenire?Ce este tehnica cutrii cu revenire?Structura general a algoritmuluiStructura general a algoritmuluiStructura general a algoritmuluiStructura general a algoritmuluiStructura general a algoritmuluiAplicaie 1: generarea permutrilorAplicaie 1: generarea permutrilorAplicaie 2: problema reginelorAplicaie 2: problema reginelorAplicaie 2: problema reginelorAplicaie 2: problema reginelorAplicaie 2: problema reginelorAplicaie 3: colorarea hrilorAplicaie 3: colorarea hrilorAplicaie 3: colorarea hrilorAplicaie 3: colorarea hrilorAplicaie 4: gsirea traseelorAplicaie 4: gsirea traseelorAplicaie 4: gsirea traseelorAplicaie 4: gsirea traseelorAplicaie 5: problema labirintuluiAplicaie 5: problema labirintuluiAplicaie 5: problema labirintuluiAplicatie 5: problema labirintuluiAplicaie 5: problema labirintuluiCurs urmtor: recapitulare