Backtracking
Animação dos Algoritmos de
Permutação, Geração de Subconjuntos e
Soma de Subconjuntos
Paulo Eustáquio Duarte Pinto
(pauloedp arroba ime.uerj.br)
abril/2005
Backtracking
Geração de Permutações - Versão 2
Listar todas as n! permutações de um conjunto
Perm:
Fim;
Para i de 1 a n:
Se (not S[i]) Então
np np + 1; P[np] i;
Se (np = n) Então
Imprime
Senão
Perm;
np np - 1; S[i] F;
Fp;
Externamente:
S F;
np 0;
Perm;
S[i] V;
Backtracking
n=3
{}
i=1
{1}
i = 1 ,2
{1,2}
i = 1 ,2,3
- Geração de Permutações
Backtracking
n=3
{}
i=1
{1}
i = 1 ,2
{1,2,3}
i = 1 ,2,3
- Geração de Permutações
123
Backtracking
n=3
{}
i=1
{1}
i = 1 ,2 ,3
{1,2}
i = 1 ,2,3
{1,3}
i = 1 ,2
- Geração de Permutações
123
Backtracking
n=3
{}
i=1
{1}
i = 1 ,2 ,3
{1,2}
i = 1 ,2,3
{1,3,2}
i = 1 ,2
- Geração de Permutações
123
132
Backtracking
- Geração de Permutações
n=3
{}
i = 1 ,2,3
{1}
i = 1 ,2 ,3
{1,2}
i = 1 ,2,3
{1,3}
i = 1 ,2,3
{2}
i = 1,2 ,3
{2,1}
i = 1,2,3
{3}
i = 1,2 ,3
{2,3}
i = 1 ,2,3
123
132
213
231
312
321
{3,1}
{3,2}
i = 1 ,2,3 i = 1,2,3
.
Backtracking
Geração de Subconjuntos
Número de subconjuntos de C = {c1... cn} = 2n
GeraSub (p):
Para i de p a n:
ns ns + 1; S[ns] i;
Imprime;
Se (i < n) Então
GeraSub (i + 1);
ns ns - 1;
Fp;
Fim;
Externamente:
ns 0; GeraSub (1);
Backtracking
- Geração de Subconjuntos
C = {a, b, c, d}
1
{}
i = 1 ,2,3,4
2
{1}
{2}
i = 3,4
i = 2 ,3,4
{1, 2}
i = 3 ,4
3
{1, 2, 3}
4
i=4
.
{1, 3}
i=4
4
3
{2, 3}
i=4
{3}
i=4
4
4
{1}
{1,2}
{1,2,3}
{1,2,3,4}
{1,2,4}
{1,3}
{1,3,4}
{1,4}
{2}
{2,3}
{2,3,4}
{2,4}
{3}
{3,4}
{4}
Backtracking
Geração de Subconjuntos
Subconjuntos gerados para:
{
{
{
{
{
{
{
{
a },
a, b },
a, b, c },
a, b, c, d },
a, b, d },
a, c },
a, c, d },
a, d },
{ a, b, c, d }
{
{
{
{
{
{
{
b },
b, c },
b, c, d },
b, d },
c },
c, d },
d }
Backtracking
- Soma de Subconjuntos
SomaSub (pi):
i pi;
Enquanto (i n) e ((soma + C[i]) s):
ns ns + 1; S[ns] i; soma soma + C[i];
Se (soma = s) Então
Imprime
Senão
SomaSub (i+1);
ns ns - 1; soma soma - C[i];
i i + 1;
Fe;
Fim;
Externamente: ns 0; s 0; Ordena C;
SomaSub (1);
Backtracking
- Soma de Subconjuntos
C = {1, 2, 2, 3, 4, 5, 9}, s = 4
{}
1
i = 1 ,2,3,4,5,6
{1}
2
i = 2 ,3,4 ,5
{1, 2}
i=3
1, 3
2, 2
4
.
3
3
{2}
i = 3 ,4
{1, 2}
i=4
{2}
i=4
4
4
{3}
i=5
5