You are on page 1of 57

n 8 Conception et programmes : BackTracking Leon n.

1 Introduction de vue densemble

Structures de donnes

STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

CONCEPTION DE PROGRAMMES:
BACKTRACKING

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Objectifs
Problmes viss
La recherche dune rponse au problme ncessite la recherche dun nombre important de solutions plausibles

Problmes de type combinatoire


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Sudoko
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Plan de la leon
Problme du sac dos Permutation Problme des n reines

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problmes du sac dos

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Remplir un sac dos avec un certain nombre d'objets de faon le remplir exactement
Comment fait-on?
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Modlisation
Des poids: a0, a1, , an

Le poids permis: S

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Modlisation
Existe-t-il des nombres xi {0,1} tels que S = x0a0 + x1a1 + ... + xn-1an-1
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Modlisation
Existe-t-il des nombres xi {0,1} tels que Si xi=1 on doit prendre l'objet ai Sinon on ne le prend pas
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


de recherche des solutions
Doit tre capable d'numrer rapidement tous les n-uplets de valeurs des xi
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Algorithme

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Cas n=3
void sacADos3(int[] a, int S){ int S0, S1, S2; for(int x0 = 0; x0 < 2; x0++){ S0 = x0 * a[0]; for(int x1 = 0; x1 < 2; x1++){ S1 = S0 + x1 * a[1]; for(int x2 = 0; x2 < 2; x2++){ S2 = S1 + x2 * a[2]; if(S2 == S) printf("%d+%d+%d\n",x0,x1,x2); } } } }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Cas n=3
Le programme n'est pas volutif Traiter des cas particuliers fixes, exige de connatre n la compilation

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Deuxime approche
Toute solution peut s'crire comme une suite de bits x0 , x1 , ... , xn-1
Correspond un entier unique

x = x020 + x121 + ... + xn-12n-1


de l'intervalle I=[0, 2n[
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Deuxime approche
Parcourir l'ensemble des solutions possibles ou bien lintervalle
I=[0, 2n[

n=4 a={2,12,23,30} S=44 x0, x1, x3 ou bien x=1101=13


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Enumration de I=[0,2n[
Comment passer en revue tous les lments de I?

Laddition : +1
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Enumration de I=[0,2n[
Programmer l'addition binaire sur un entier n reprsent comme un tableau de bits x

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Enumration de I=[0,2n[
Programmer l'addition binaire
Gestion virtuelle de la retenue

13 = 1+1+0+1 14 = 1+1+1+0
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Enumration de I=[0,2n[
Programmer l'addition binaire
Gestion virtuelle de la retenue
// simulation for(int j = if(x[j] == else{ x[j] }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

de l'addition x[]=x[]+1 0; j < n; j++){ 1) x[j] = 0; = 1; break; } // on a fini

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


//a[0..n[:a-t-on somme(a[i]*x[i],i=0..n-1)=S? void sacADos(int [] a, int S){ int n=sizeof(a); int* x = (int *) malloc(n*sizeof(int)); for(int i = 0; i < (1 << n); i++){ // reconstruction de S1 = somme(a[j]*x[j]) int S1=0; for(int j = 0; j < n; j++){ calcule 2n if(x[j] == 1) S1 = S1+a[j]; if( S1 == S) // une solution trouve for(int j = 0; j < n; j++) if(x[j] == 1) printf("+ %d ",a[j]); } // simulation de l'addition x[] = x[]+1
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Nombre dadditions
En moyenne n/2 additions pour chaque i
for(int j = 0; j < n; j++){ if(x[j] == 1) S1 = S1 + a[j];

O(n 2n)
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Backtracking
Principe
Essayer toutes les combinaisons pour trouver une ou plusieurs solutions Mthode consistant faire des essais et rebrousser chemin en cas d'chec
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Backtracking
Principe
En gnral, des algorithmes reprsents de manire arborescente. Chaque branche symbolisant un appel rcursif Croissance exponentielle
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Backtracking

Supposons avoir dj calcul


Si = x0a0 + x1a1 + + xi-1ai-1 Si Si=S Alors on a trouv une solution Sinon Si Si<S Alors
On essaie de rajouter xi=0 et on teste au cran suivant

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Backtracking

Supposons avoir dj calcul


Si = x0a0 + x1a1 + + xi-1ai-1 Si Si=S Alors on a trouv une solution Sinon Si Si<S Alors
On essaie avec xi=1
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Backtracking: exemple
int[]a= {1,4,7,12,18,20,30}; S =13 X={1} Si=1x1 < 13 {1,0} {1,0,0} {1,0,0,0} {1,0,0,1} OK {1,0,1} {1,0,1,0} {1,0,1,1} {1,1} {1,1,0} {1,1,1}
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


// Si=sum(a[j]*x[j],j=0..i-1) dj calcule void sacADosrec(int a[],int S, int x[],int Si, int i, int n){ nbrec++; if(Si == S) afficherSolution(a, S, x, i); else if((i < n) && (Si < S)){ x[i] = 0; sacADosrec(a, S, x, Si, i+1,n); x[i] = 1; sacADosrec(a, S, x, Si+a[i], i+1,n);} }
nbrec: nombre dappels la fonction

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme du sac dos


Appel void sacADos(int a[], int S,int n){ int *x = (int *) malloc( n*sizeof(int)); nbrec = 0; sacADosrec(a, S, x, 0, 0,n); Le programme principal void main(){ printf("Nbre dappels= 25, 50, 55, 60, 62}; int a[] = {10, 20, %d\n" , nbrec); } sacADos(a, 85,7); } L'excution donne : 85 =+25+60 85 =+10+25+50 85 =+10+20+55 # appels=131 Sur 256=2n+1
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations
(1,3,2) Il y a n! permutations de n lments {1,2,3}, {1,3,2},
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations
Enumration des permutations

On procde rcursivement, en gnrant les permutations d'ordre n-1 et en rajoutant n toutes les positions possibles
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations
Enumration des permutations
Permutation t[1..i0-1] construite Mettre dans t[i0] les n-i0+1 valeurs non utilises auparavant, tour de rle
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations
Enumration des permutations
On va grer un tableau auxiliaire de boolens choisi, tel que choisi[j] est vrai si le nombre j a dj t choisi

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations
Le programme
// approche en O(n!) void permRec(int[]t,int n,bool[]choisi,int i0){ if(i0 > n) afficher(t, n); else{ for(int v = 1; v <= n; v++){ if(! choisi[v]){ choisi[v] = true; t[i0] = v; permRec(t, n, choisi, i0+1); } } } }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations
Le programme
// approche en O(n!) void permutations(int n){ int* t = (int *) malloc( (n+1)*sizeof(int)); bool*choisi=(bool*)malloc((n+1)*sizeof(bool)); permRec(t, n, choisi, 1); }

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Permutations
Le programme
// approche en O(n!) void permutations(int n){ } Pour n=3, on gnre les permutations dans l'ordre : 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


n tours
Une tour menace toute pice adverse
Se trouvant dans la mme ligne Ou la mme colonne
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


n tours
On peut mettre n tours sur l'chiquier sans que les tours ne s'attaquent
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


n tours

Une solution:
Permutation de 1..n

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


n tours

Le nombre de faons de placer n tours non attaquantes est donc T(n) = n!


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


n reines
La reine se dplace dans toutes les directions Cest une tour avec un peu plus de pouvoir
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


n reines
Le nombre maximal de reines pouvant tre sur l'chiquier sans s'attaquer est plus petit que n Egal n pour n=1 ou n 4 Le nombre de solutions possibles est une tche non rsolue
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


n reines
n=4

2 solutions avec 4 reines

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


Rsolution du problme
Codage d'une configuration admissible
Suite des positions d'une reine dans chaque colonne
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

2 4 1 3

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


Rsolution du problme
Proposition
(i1, j1) et (i2, j2) sont en conflit ssi i1=i2 j1=j2 i1+j1=i2+j2 i1-j1=i2-j2
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Problme des n reines


Avec 8 reines
distribuer sur un chiquier sans conflits

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Les huit reines


Rsolution du problme
On suppose avoir construit une solution approche dans t[1..i0[ et on cherche placer une reine dans la colonne i0

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Les huit reines


Rsolution du problme
Il faut s'assurer que la nouvelle reine n'attaque personne sur sa ligne (c'est le rle du tableau enLigne[] comme pour les permutations), ...
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Les huit reines


Rsolution du problme

... et personne dans aucune de ses diagonales (fonction enDiagonale())

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Les huit reines


Code
// t[1..i0[ est dj rempli void reines(int[]t,int n,bool[]enLigne,int i0){ if(i0 > n) afficher(t); else{ for(int v = 1; v <= n; v++) if(!enLigne[v] && !enDiagonale(t, i0, v)){ enLigne[v] = true; t[i0] = v; reines(t, n, enLigne, i0+1); enLigne [v] = false; } } }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Les huit reines


Code
// t[1..i0[ est dj rempli boolean enDiagonale(int[] t, int i0, int j){ int x1, y1, x2 = i0, y2 = j; for(int i = 1; i < i0; i++){ // on rcupre les positions x1 = i; y1 = t[i]; if((x1 == x2) || (y1 == y2) || ((x1-y1)==(x2-y2)) || ((x1+y1)==(x2+y2))) return true; } return false; }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Les huit reines


n Rn 4 2 5 10 6 4 7 40 n 19 20 21 22 Rn 4968057848 39029188884 314666222712 2691008701644

8 92
Prof. A. EL FAKER

23 24233937684440

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Exercice
Problme des phrases cohrentes
Dans cette phrase il y a 2 fois le nombre 1, 3 fois le nombre 2, 2 fois le nombre 3, et 1 fois le nombre 4

Pas de solution avec les nombres allant jusqu' 1,2 ou 3


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Exercice
Problme des phrases cohrentes
Dans cette phrase il y a 2 fois le nombre 1, 3 fois le nombre 2, 2 fois le nombre 3, et 1 fois le nombre 4

Deux solutions avec les nombres allant jusqu' 4 (Pas vident)


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

Exercice
Problme des phrases cohrentes
Dans cette phrase il y a 2 fois le nombre 1, 3 fois le nombre 2, 2 fois le nombre 3, et 1 fois le nombre 4

Pas de solution avec les nombres allant jusqu' 6


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 8 Conception et programmes : BackTracking Leon n. 1 Introduction de vue densemble

Structures de donnes

STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

You might also like