SlideShare uma empresa Scribd logo
Backtracking
Curso de Maratona de Programação
ICT-Unifesp
Backtracking
• De acordo com o Wikipédia:
• Backtracking é um tipo de algoritmo que representa um refinamento da busca
por força bruta, em que múltiplas soluções podem ser eliminadas sem serem
explicitamente examinadas.
2
Backtracking
• A recursividade pode ser usada para resolver problemas cuja solução
é do tipo tentar todas as alternativas possíveis.
• O backtracking executa podas quando não é possível encontrar uma
solução pelo caminho escolhido.
3
Backtracking
• NULL quer encontrar a saída do labirinto...
4
Vou tentar
por aqui...
?
Backtracking
• NULL quer encontrar a saída do labirinto...
5
Opa, consegui,
vou continuar...
?
Backtracking
• NULL quer encontrar a saída do labirinto...
6
Sem saída, vou
fazer o
backtracking!!
?
Backtracking
• NULL quer encontrar a saída do labirinto...
7
Vou tentar por
outro caminho...
?
Sem saída
Backtracking
• NULL quer encontrar a saída do labirinto...
8
TRIVIAL!!
?
Sem saída
Backtracking
• Imagine um problema com as seguintes características:
• Você tem que fazer uma série de decisões...
• Você não tem informações suficientes para saber o que escolher...
• Cada decisão leva a um novo conjunto de escolhas...
• Alguma sequência de escolhas pode ser uma solução para o seu problema...
• Backtracking pode ser uma boa forma de experimentar várias sequências de
decisões até encontrar uma que funciona!
9
Backtracking
• A busca em profundidade (DFS) explora tanto quanto possível um
ramo antes de retroceder. É o que acontece no backtracking!
10
Gerando todos os subconjuntos
• Problema: gerando todos os subconjuntos
• Temos um conjunto S = {1 ... N}
• Objetivo: imprimir todos os subconjuntos a partir de N elementos.
• Para S = {1, 2} (N = 2) temos os subconjuntos: {1,2}, {1}, {2}, {}
• {1, 2} é o mesmo que {2, 1}
• O número de possíveis subconjuntos é 2^N
11
Gerando todos os subconjuntos
• Ideia: ou o elemento faz parte do subconjunto ou não faz parte.
• Pode-se construir um vetor de bool de tamanho N.
• Para S = {1, 2}, teríamos um vetor inicialmente com {0, 0}.
• Para S = {1, 2, 3}, teríamos um vetor inicialmente com {0, 0, 0}.
• Esse vetor irá nos ajudar a construir todos os subconjuntos.
• Se vet é o vetor de bool, vet[i] indica se o i-ésimo elemento está ou
não está no subconjunto.
12
Gerando todos os subconjuntos
• Uma variável K indicará qual elemento será colocado ou removido do
subconjunto.
• S(K) = (true, false)
• Seja F nossa função para gerar todos os subconjuntos, ela pode ser
definida como F(K, N).
• Inicialmente F é chamada da seguinte forma:
• F(1, N) // indexando a partir do 1
13
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
14
1 pertence a S
2 pertence a S
K
vet = [1, 0]
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
15
1 pertence a S
2 pertence a S
K == N, imprime {1, 2}
vet = [1, 0]
vet = [1, 1]
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
16
1 pertence a S
2 pertence a S
imprime {1, 2} Backtracking, o vet até então era [1, 1],
quando retrocede, fazemos vet[K] = 0,
se K = 2, teremos que vet = [1, 0]
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
17
1 pertence a S
2 pertence a S
imprime {1, 2}
vet = [1, 0]
K == N, imprime {1}
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
18
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
ramo processado
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
19
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
backtracking vet era [1, 0],
como K = 1, fazemos vet[K] = 0,
portanto, vet = [0, 0]
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
20
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
vet = [0, 0]
2 pertence a S
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
21
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
2 pertence a S
K == N, imprime {2}
vet = [0, 1]
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
22
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
2 pertence a S
imprime {2}
backtracking...
vet = [0, 0]
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
23
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
2 pertence a S
imprime {2}
K == N, imprime {}
vet = [0, 0]
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
24
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
2 pertence a S
imprime {2}
K == N, imprime {}
ramo processado
Gerando todos os subconjuntos
• Construindo a árvore para S = {1, 2}, N = 2
25
1 pertence a S
2 pertence a S
imprime {1, 2}
imprime {1}
2 pertence a S
imprime {2}
imprime {}
Todos os subconjuntos
foram gerados
Gerando todos os subconjuntos
• Construindo a função F (indexando a partir do 0)...
26
Gerando todos os subconjuntos
• Construindo a função F ...
27
Gerando todos os subconjuntos
• Código em C++
• https://goo.gl/9J7Zhi
28
Dúvidas?
mcastrosouza@live.com
twitter.com/mcastrosouza
29

Mais conteúdo relacionado

Mais procurados

Algoritmos e Programação
Algoritmos e ProgramaçãoAlgoritmos e Programação
Algoritmos e Programação
Gabriel Demétrio
 
9 séries de números reais
9   séries de números reais9   séries de números reais
9 séries de números reaisMarinho Medeiros
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
Pablo Silva
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Delacyr Ferreira
 
Função de Distribuição Acumulada
Função de Distribuição AcumuladaFunção de Distribuição Acumulada
Função de Distribuição Acumulada
Anselmo Alves de Sousa
 
Probabilidade E Bioestatística
Probabilidade E BioestatísticaProbabilidade E Bioestatística
Probabilidade E BioestatísticaRodrigo Vianna
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e Autômatos
Tárcio Sales
 
Aula de distribuição de probabilidade[1] cópia
Aula de distribuição de probabilidade[1]   cópiaAula de distribuição de probabilidade[1]   cópia
Aula de distribuição de probabilidade[1] cópiaTuane Paixão
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
Manuel Menezes de Sequeira
 
Estatistica livro
Estatistica livroEstatistica livro
Estatistica livro
André Quiquio Lopes quiquio
 
Algoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetiçãoAlgoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetição
Professor Samuel Ribeiro
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
Daniel Arndt Alves
 
1. intervalo de confiança parte i
1. intervalo de confiança   parte i1. intervalo de confiança   parte i
1. intervalo de confiança parte i
Regional Jataí - Universidade Federal de Goiás
 
Introdução à programação
Introdução à programação Introdução à programação
Introdução à programação
João Piedade
 
Aula a1 precisão, incertezas e erros em medidas
Aula a1   precisão, incertezas e erros em medidasAula a1   precisão, incertezas e erros em medidas
Aula a1 precisão, incertezas e erros em medidas
João Marcos
 

Mais procurados (20)

Algoritmos e Programação
Algoritmos e ProgramaçãoAlgoritmos e Programação
Algoritmos e Programação
 
9 séries de números reais
9   séries de números reais9   séries de números reais
9 séries de números reais
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
 
Função de Distribuição Acumulada
Função de Distribuição AcumuladaFunção de Distribuição Acumulada
Função de Distribuição Acumulada
 
Probabilidade E Bioestatística
Probabilidade E BioestatísticaProbabilidade E Bioestatística
Probabilidade E Bioestatística
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e Autômatos
 
Aula de distribuição de probabilidade[1] cópia
Aula de distribuição de probabilidade[1]   cópiaAula de distribuição de probabilidade[1]   cópia
Aula de distribuição de probabilidade[1] cópia
 
Aula 02 população amostra e dados
Aula 02   população amostra e dadosAula 02   população amostra e dados
Aula 02 população amostra e dados
 
Aula analise algoritmos
Aula analise algoritmosAula analise algoritmos
Aula analise algoritmos
 
Algoritmos em portugol
Algoritmos em portugolAlgoritmos em portugol
Algoritmos em portugol
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
 
Estatistica livro
Estatistica livroEstatistica livro
Estatistica livro
 
Algoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetiçãoAlgoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetição
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
 
Algoritmo Guloso
Algoritmo GulosoAlgoritmo Guloso
Algoritmo Guloso
 
1. intervalo de confiança parte i
1. intervalo de confiança   parte i1. intervalo de confiança   parte i
1. intervalo de confiança parte i
 
Introdução à programação
Introdução à programação Introdução à programação
Introdução à programação
 
Aula a1 precisão, incertezas e erros em medidas
Aula a1   precisão, incertezas e erros em medidasAula a1   precisão, incertezas e erros em medidas
Aula a1 precisão, incertezas e erros em medidas
 

Destaque

Agrupamento (clustering) - K-Means
Agrupamento (clustering) - K-MeansAgrupamento (clustering) - K-Means
Agrupamento (clustering) - K-Means
Marcos Castro
 
Algoritmo de Kosaraju
Algoritmo de KosarajuAlgoritmo de Kosaraju
Algoritmo de Kosaraju
Marcos Castro
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionários
Marcos Castro
 
Agrupamento com K-Means
Agrupamento com K-MeansAgrupamento com K-Means
Agrupamento com K-Means
Alexandre Duarte
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3
Marcos Castro
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
Marcos Castro
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFS
Marcos Castro
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmica
Marcos Castro
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise Assintótica
Marcos Castro
 
Algoritmos gulosos
Algoritmos gulososAlgoritmos gulosos
Algoritmos gulosos
Marcos Castro
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro Viajante
Marcos Castro
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
Marcos Castro
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
Marcos Castro
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated Annealing
Marcos Castro
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
Marcos Castro
 
Backtracking
BacktrackingBacktracking
Tabela Hash
Tabela HashTabela Hash
Tabela Hash
Marcos Castro
 
Python - Set
Python - SetPython - Set
Python - Set
Marcos Castro
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
Marcos Castro
 
Binary heap
Binary heapBinary heap
Binary heap
Marcos Castro
 

Destaque (20)

Agrupamento (clustering) - K-Means
Agrupamento (clustering) - K-MeansAgrupamento (clustering) - K-Means
Agrupamento (clustering) - K-Means
 
Algoritmo de Kosaraju
Algoritmo de KosarajuAlgoritmo de Kosaraju
Algoritmo de Kosaraju
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionários
 
Agrupamento com K-Means
Agrupamento com K-MeansAgrupamento com K-Means
Agrupamento com K-Means
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFS
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmica
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise Assintótica
 
Algoritmos gulosos
Algoritmos gulososAlgoritmos gulosos
Algoritmos gulosos
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro Viajante
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated Annealing
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Tabela Hash
Tabela HashTabela Hash
Tabela Hash
 
Python - Set
Python - SetPython - Set
Python - Set
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 
Binary heap
Binary heapBinary heap
Binary heap
 

Mais de Marcos Castro

Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de Decisão
Marcos Castro
 
Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn Graphs
Marcos Castro
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
Marcos Castro
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
Marcos Castro
 
Arquivos FASTQ
Arquivos FASTQArquivos FASTQ
Arquivos FASTQ
Marcos Castro
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para Bioinformática
Marcos Castro
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da Bioinformática
Marcos Castro
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
Marcos Castro
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
Marcos Castro
 
Agrupamento de sequências biológicas
Agrupamento de sequências biológicasAgrupamento de sequências biológicas
Agrupamento de sequências biológicas
Marcos Castro
 
Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)
Marcos Castro
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMP
Marcos Castro
 
Bioinformática com Biopython
Bioinformática com BiopythonBioinformática com Biopython
Bioinformática com Biopython
Marcos Castro
 
Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)
Marcos Castro
 

Mais de Marcos Castro (14)

Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de Decisão
 
Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn Graphs
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Arquivos FASTQ
Arquivos FASTQArquivos FASTQ
Arquivos FASTQ
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para Bioinformática
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da Bioinformática
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Agrupamento de sequências biológicas
Agrupamento de sequências biológicasAgrupamento de sequências biológicas
Agrupamento de sequências biológicas
 
Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMP
 
Bioinformática com Biopython
Bioinformática com BiopythonBioinformática com Biopython
Bioinformática com Biopython
 
Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)
 

Backtracking - Gerar todos os subconjuntos

  • 1. Backtracking Curso de Maratona de Programação ICT-Unifesp
  • 2. Backtracking • De acordo com o Wikipédia: • Backtracking é um tipo de algoritmo que representa um refinamento da busca por força bruta, em que múltiplas soluções podem ser eliminadas sem serem explicitamente examinadas. 2
  • 3. Backtracking • A recursividade pode ser usada para resolver problemas cuja solução é do tipo tentar todas as alternativas possíveis. • O backtracking executa podas quando não é possível encontrar uma solução pelo caminho escolhido. 3
  • 4. Backtracking • NULL quer encontrar a saída do labirinto... 4 Vou tentar por aqui... ?
  • 5. Backtracking • NULL quer encontrar a saída do labirinto... 5 Opa, consegui, vou continuar... ?
  • 6. Backtracking • NULL quer encontrar a saída do labirinto... 6 Sem saída, vou fazer o backtracking!! ?
  • 7. Backtracking • NULL quer encontrar a saída do labirinto... 7 Vou tentar por outro caminho... ? Sem saída
  • 8. Backtracking • NULL quer encontrar a saída do labirinto... 8 TRIVIAL!! ? Sem saída
  • 9. Backtracking • Imagine um problema com as seguintes características: • Você tem que fazer uma série de decisões... • Você não tem informações suficientes para saber o que escolher... • Cada decisão leva a um novo conjunto de escolhas... • Alguma sequência de escolhas pode ser uma solução para o seu problema... • Backtracking pode ser uma boa forma de experimentar várias sequências de decisões até encontrar uma que funciona! 9
  • 10. Backtracking • A busca em profundidade (DFS) explora tanto quanto possível um ramo antes de retroceder. É o que acontece no backtracking! 10
  • 11. Gerando todos os subconjuntos • Problema: gerando todos os subconjuntos • Temos um conjunto S = {1 ... N} • Objetivo: imprimir todos os subconjuntos a partir de N elementos. • Para S = {1, 2} (N = 2) temos os subconjuntos: {1,2}, {1}, {2}, {} • {1, 2} é o mesmo que {2, 1} • O número de possíveis subconjuntos é 2^N 11
  • 12. Gerando todos os subconjuntos • Ideia: ou o elemento faz parte do subconjunto ou não faz parte. • Pode-se construir um vetor de bool de tamanho N. • Para S = {1, 2}, teríamos um vetor inicialmente com {0, 0}. • Para S = {1, 2, 3}, teríamos um vetor inicialmente com {0, 0, 0}. • Esse vetor irá nos ajudar a construir todos os subconjuntos. • Se vet é o vetor de bool, vet[i] indica se o i-ésimo elemento está ou não está no subconjunto. 12
  • 13. Gerando todos os subconjuntos • Uma variável K indicará qual elemento será colocado ou removido do subconjunto. • S(K) = (true, false) • Seja F nossa função para gerar todos os subconjuntos, ela pode ser definida como F(K, N). • Inicialmente F é chamada da seguinte forma: • F(1, N) // indexando a partir do 1 13
  • 14. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 14 1 pertence a S 2 pertence a S K vet = [1, 0]
  • 15. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 15 1 pertence a S 2 pertence a S K == N, imprime {1, 2} vet = [1, 0] vet = [1, 1]
  • 16. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 16 1 pertence a S 2 pertence a S imprime {1, 2} Backtracking, o vet até então era [1, 1], quando retrocede, fazemos vet[K] = 0, se K = 2, teremos que vet = [1, 0]
  • 17. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 17 1 pertence a S 2 pertence a S imprime {1, 2} vet = [1, 0] K == N, imprime {1}
  • 18. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 18 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} ramo processado
  • 19. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 19 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} backtracking vet era [1, 0], como K = 1, fazemos vet[K] = 0, portanto, vet = [0, 0]
  • 20. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 20 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} vet = [0, 0] 2 pertence a S
  • 21. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 21 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} 2 pertence a S K == N, imprime {2} vet = [0, 1]
  • 22. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 22 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} 2 pertence a S imprime {2} backtracking... vet = [0, 0]
  • 23. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 23 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} 2 pertence a S imprime {2} K == N, imprime {} vet = [0, 0]
  • 24. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 24 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} 2 pertence a S imprime {2} K == N, imprime {} ramo processado
  • 25. Gerando todos os subconjuntos • Construindo a árvore para S = {1, 2}, N = 2 25 1 pertence a S 2 pertence a S imprime {1, 2} imprime {1} 2 pertence a S imprime {2} imprime {} Todos os subconjuntos foram gerados
  • 26. Gerando todos os subconjuntos • Construindo a função F (indexando a partir do 0)... 26
  • 27. Gerando todos os subconjuntos • Construindo a função F ... 27
  • 28. Gerando todos os subconjuntos • Código em C++ • https://goo.gl/9J7Zhi 28