SlideShare uma empresa Scribd logo
1 de 113
Baixar para ler offline
Aula 04 – T´ecnicas de
Desenvolvimento de Algoritmos:
Tentativa e Erro (Backtracking)
Norton Trevisan Roman
norton@usp.br
23 de agosto de 2018
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 1 / 29
Tentativa e Erro
Suponha que vocˆe tem que tomar uma s´erie de
decis˜oes dentre v´arias possibilidades, onde
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
Tentativa e Erro
Suponha que vocˆe tem que tomar uma s´erie de
decis˜oes dentre v´arias possibilidades, onde
Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que
escolher
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
Tentativa e Erro
Suponha que vocˆe tem que tomar uma s´erie de
decis˜oes dentre v´arias possibilidades, onde
Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que
escolher
Cada decis˜ao leva a um novo conjunto de escolhas
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
Tentativa e Erro
Suponha que vocˆe tem que tomar uma s´erie de
decis˜oes dentre v´arias possibilidades, onde
Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que
escolher
Cada decis˜ao leva a um novo conjunto de escolhas
Alguma sequˆencia de escolhas (possivelmente mais que uma)
pode ser a solu¸c˜ao para o problema
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
Tentativa e Erro
Suponha que vocˆe tem que tomar uma s´erie de
decis˜oes dentre v´arias possibilidades, onde
Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que
escolher
Cada decis˜ao leva a um novo conjunto de escolhas
Alguma sequˆencia de escolhas (possivelmente mais que uma)
pode ser a solu¸c˜ao para o problema
Tentativa e erro ´e um modo met´odico de tentar
v´arias sequˆencias de decis˜oes, at´e encontrar uma
que funcione
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
Tentativa e Erro
T´ecnica de solu¸c˜ao de problemas
Usada quando se quer achar solu¸c˜oes para problemas para os
quais n˜ao se conhece uma regra fixa de computa¸c˜ao
Basicamente, tentamos todas as alternativas poss´ıveis
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 3 / 29
Tentativa e Erro
T´ecnica de solu¸c˜ao de problemas
Usada quando se quer achar solu¸c˜oes para problemas para os
quais n˜ao se conhece uma regra fixa de computa¸c˜ao
Basicamente, tentamos todas as alternativas poss´ıveis
Passos
Escolher uma opera¸c˜ao plaus´ıvel;
Executar a opera¸c˜ao com os dados;
Se a meta n˜ao foi alcan¸cada, repita o processo at´e que se
atinja a meta ou se evidencie a insolubilidade do problema.
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 3 / 29
Tentativa e Erro
Tentativa e erro ´e uma t´ecnica que aproveita bem a
recursividade
A recursividade pode ser usada para resolver problemas cuja
solu¸c˜ao ´e do tipo tentar todas as alternativas poss´ıveis
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 4 / 29
Tentativa e Erro
Tentativa e erro ´e uma t´ecnica que aproveita bem a
recursividade
A recursividade pode ser usada para resolver problemas cuja
solu¸c˜ao ´e do tipo tentar todas as alternativas poss´ıveis
A ideia para algoritmos tentativa e erro ´e decompor
o processo em um n´umero finito de sub-tarefas
parciais (expressas de forma recursiva)
E ent˜ao explor´a-las exaustivamente
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 4 / 29
Tentativa e Erro
A constru¸c˜ao de uma solu¸c˜ao ´e obtida atrav´es de
tentativas (ou pesquisas) que gradualmente
constroem e percorrem uma ´arvore de sub-tarefas.
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 5 / 29
Tentativa e Erro
Funcionamento:
Passos em dire¸c˜ao `a solu¸c˜ao final s˜ao tentados e
registrados (em uma estrutura de dados)
Caso esses passos tomados n˜ao levem `a solu¸c˜ao
final, eles podem ser retirados e apagados do
registro.
A busca na ´arvore de solu¸c˜oes pode crescer
rapidamente (at´e mesmo exponencialmente)
Pode ser necess´ario usar algoritmos aproximados ou
heur´ısticas, que n˜ao garantem a solu¸c˜ao ´otima, mas s˜ao
r´apidas
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 6 / 29
Tentativa e Erro
Exploramos cada possibilidade como segue:
Se a possibilidade ´e a resposta, retorne “sucesso”
Se a possibilidade n˜ao for a resposta, e n˜ao houver
outra a ser testada a partir dela, retorne “falha”
Para cada possibilidade, a partir da atual:
Explore a nova possibilidade (recursivo)
Se encontrou a resposta, retorne “sucesso”
Esgotadas as possibilidades, retorne “falha”
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 7 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
Dado um labirinto,
encontre um caminho
da entrada `a sa´ıda
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 8 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
Dado um labirinto,
encontre um caminho
da entrada `a sa´ıda
Em cada interse¸c˜ao,
vocˆe tem que decidir
se:
Segue direto
Vai `a esquerda
Vai `a direita
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 8 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
S´o que... vocˆe n˜ao tem
informa¸c˜ao suficiente
para escolher
corretamente
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
S´o que... vocˆe n˜ao tem
informa¸c˜ao suficiente
para escolher
corretamente
Cada escolha leva a
outro conjunto de
escolhas
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
S´o que... vocˆe n˜ao tem
informa¸c˜ao suficiente
para escolher
corretamente
Cada escolha leva a
outro conjunto de
escolhas
Uma ou mais sequˆencia de escolhas pode ser a
solu¸c˜ao...
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
S´o que... vocˆe n˜ao tem
informa¸c˜ao suficiente
para escolher
corretamente
Cada escolha leva a
outro conjunto de
escolhas
Uma ou mais sequˆencia de escolhas pode ser a
solu¸c˜ao... Ou n˜ao!
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
E a solu¸c˜ao?
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
E a solu¸c˜ao?
Escolha uma metodologia
para fazer tentativas
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
E a solu¸c˜ao?
Escolha uma metodologia
para fazer tentativas
Ex: primeiro tentar `a
direita, depois `a frente, e
ent˜ao `a esquerda
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
E a solu¸c˜ao?
Escolha uma metodologia
para fazer tentativas
Ex: primeiro tentar `a
direita, depois `a frente, e
ent˜ao `a esquerda
Ent˜ao, a cada decis˜ao, siga essa ordem de escolhas
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
Tentativa e Erro
Exemplo: Caminho em Labirinto
E a solu¸c˜ao?
Escolha uma metodologia
para fazer tentativas
Ex: primeiro tentar `a
direita, depois `a frente, e
ent˜ao `a esquerda
Ent˜ao, a cada decis˜ao, siga essa ordem de escolhas
Se todas as escolhas em um ponto se esgotaram, volte ao
anterior, e escolha uma alternativa ainda n˜ao explorada
(seguindo a metodologia de escolha) a partir desse ponto
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
Vocˆe deseja colorir um
mapa com no m´aximo
4 cores: Vermelho,
amarelo, verde e azul
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 11 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
Vocˆe deseja colorir um
mapa com no m´aximo
4 cores: Vermelho,
amarelo, verde e azul
Pa´ıses adjacentes
devem ter cores
diferentes
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 11 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
Vocˆe deseja colorir um
mapa com no m´aximo
4 cores: Vermelho,
amarelo, verde e azul
Pa´ıses adjacentes
devem ter cores
diferentes
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 11 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
Em cada itera¸c˜ao, vocˆe
deve decidir de que cor
pintar um pa´ıs, dadas
as cores j´a atribu´ıdas
aos vizinhos imediatos
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 12 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
Em cada itera¸c˜ao, vocˆe
deve decidir de que cor
pintar um pa´ıs, dadas
as cores j´a atribu´ıdas
aos vizinhos imediatos
Vocˆe n˜ao tem informa¸c˜ao
suficiente para escolher as
cores (s´o conhece os
vizinhos imediatos)
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 12 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
Cada escolha leva a
outro conjunto de
escolhas
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 13 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
Cada escolha leva a
outro conjunto de
escolhas
Uma ou mais sequˆencia
de passos pode ser a
solu¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 13 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
E a solu¸c˜ao?
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
E a solu¸c˜ao?
1. Pinte um pa´ıs inicial
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
E a solu¸c˜ao?
1. Pinte um pa´ıs inicial
2. Escolha cores para seus
vizinhos, obedecendo `a
regra
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
E a solu¸c˜ao?
1. Pinte um pa´ıs inicial
2. Escolha cores para seus
vizinhos, obedecendo `a
regra
3. Escolha um vizinho
(seguindo uma ordem
pr´e-definida)
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
E a solu¸c˜ao?
1. Pinte um pa´ıs inicial
2. Escolha cores para seus
vizinhos, obedecendo `a
regra
3. Escolha um vizinho
(seguindo uma ordem
pr´e-definida)
4. Repita o procedimento do
passo 2 a partir desse
vizinho
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
5. Se n˜ao for poss´ıvel colorir
algu´em, volte `a escolha
anterior, e troque a cor do
pa´ıs no centro desse passo
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 15 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
5. Se n˜ao for poss´ıvel colorir
algu´em, volte `a escolha
anterior, e troque a cor do
pa´ıs no centro desse passo
Note que, se n˜ao for
poss´ıvel trocar a cor
deste, voltamos ao
anterior a ele
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 15 / 29
Tentativa e Erro
Exemplo: Colora¸c˜ao de Mapas
5. Se n˜ao for poss´ıvel colorir
algu´em, volte `a escolha
anterior, e troque a cor do
pa´ıs no centro desse passo
Note que, se n˜ao for
poss´ıvel trocar a cor
deste, voltamos ao
anterior a ele
Vamos voltando e revendo
nossas escolhas at´e
acertar
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 15 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo
Dado um tabuleiro com
n × n posi¸c˜oes, o cavalo se
movimenta segundo as regras
do xadrez:
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 16 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo
Dado um tabuleiro com
n × n posi¸c˜oes, o cavalo se
movimenta segundo as regras
do xadrez:
Problema: a partir de
(x0, y0), encontrar, se existir,
um passeio do cavalo que
visite todos os pontos do
tabuleiro uma ´unica vez
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 16 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Representa¸c˜ao
Tabuleiro: matriz t (n × n)
de inteiros
t[x][y] = 0 → (x, y) n˜ao
visitado
t[x][y] = i → (x, y) visitado
no i-´esimo movimento
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 17 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Representa¸c˜ao
Tabuleiro: matriz t (n × n)
de inteiros
t[x][y] = 0 → (x, y) n˜ao
visitado
t[x][y] = i → (x, y) visitado
no i-´esimo movimento
Note que o valor das c´elulas guarda o hist´orico dos
movimentos
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 17 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Algoritmo
void tenta() {
inicializa sele¸c~ao de movimentos
ENQUANTO (movimento n~ao bem sucedido E existem candidatos a
movimento) {
seleciona pr´oximo candidato ao movimento
SE (aceit´avel) {
registra movimento
SE (tabuleiro n~ao est´a cheio) {
tenta novo movimento; // Chamada recursiva a tenta()
SE (n~ao sucedido) apaga registro anterior
}
}
}
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Algoritmo
abastece t[i][j]
void tenta() {
inicializa sele¸c~ao de movimentos
ENQUANTO (movimento n~ao bem sucedido E existem candidatos a
movimento) {
seleciona pr´oximo candidato ao movimento
SE (aceit´avel) {
registra movimento
SE (tabuleiro n~ao est´a cheio) {
tenta novo movimento; // Chamada recursiva a tenta()
SE (n~ao sucedido) apaga registro anterior
}
}
}
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Algoritmo
O movimento anterior
n˜ao leva `a solu¸c˜ao. Deve
voltar (backtracking)
void tenta() {
inicializa sele¸c~ao de movimentos
ENQUANTO (movimento n~ao bem sucedido E existem candidatos a
movimento) {
seleciona pr´oximo candidato ao movimento
SE (aceit´avel) {
registra movimento
SE (tabuleiro n~ao est´a cheio) {
tenta novo movimento; // Chamada recursiva a tenta()
SE (n~ao sucedido) apaga registro anterior
}
}
}
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Algoritmo
Ao final do m´etodo, o tabuleiro conter´a a resposta
void tenta() {
inicializa sele¸c~ao de movimentos
ENQUANTO (movimento n~ao bem sucedido E existem candidatos a
movimento) {
seleciona pr´oximo candidato ao movimento
SE (aceit´avel) {
registra movimento
SE (tabuleiro n~ao est´a cheio) {
tenta novo movimento; // Chamada recursiva a tenta()
SE (n~ao sucedido) apaga registro anterior
}
}
}
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
class Cavalo {
int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2};
int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1};
int num, numQuad;
int[][] tab;
Cavalo(int num) {
this.num = num;
this.numQuad = num * num;
this.tab = new int[num][num];
}
boolean aceitavel(int x, int y) {
return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 &&
tab[x][y] == 0);
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Deslocamentos poss´ıveis a
partir da posi¸c˜ao do cavalo
class Cavalo {
int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2};
int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1};
int num, numQuad;
int[][] tab;
Cavalo(int num) {
this.num = num;
this.numQuad = num * num;
this.tab = new int[num][num];
}
boolean aceitavel(int x, int y) {
return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 &&
tab[x][y] == 0);
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
N´umero de quadros em
uma linha e total de
quadros no tabuleiro
class Cavalo {
int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2};
int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1};
int num, numQuad;
int[][] tab;
Cavalo(int num) {
this.num = num;
this.numQuad = num * num;
this.tab = new int[num][num];
}
boolean aceitavel(int x, int y) {
return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 &&
tab[x][y] == 0);
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
O tabuleiro
class Cavalo {
int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2};
int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1};
int num, numQuad;
int[][] tab;
Cavalo(int num) {
this.num = num;
this.numQuad = num * num;
this.tab = new int[num][num];
}
boolean aceitavel(int x, int y) {
return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 &&
tab[x][y] == 0);
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Determina se (x, y) ´e
uma coordenada v´alida
class Cavalo {
int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2};
int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1};
int num, numQuad;
int[][] tab;
Cavalo(int num) {
this.num = num;
this.numQuad = num * num;
this.tab = new int[num][num];
}
boolean aceitavel(int x, int y) {
return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 &&
tab[x][y] == 0);
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Tenta mover o cavalo
a partir de (x, y) no
i-´esimo movimento
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Coordenadas de
destino do movimento
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Quantos dos poss´ıveis
movimentos a partir
de (x, y) j´a tentou
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Diz se pode parar
(caso base: j´a marcou
todo o tabuleiro)
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Enquanto n˜ao termi-
nou de marcar o tabu-
leiro todo, e ainda h´a
movimentos poss´ıveis
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Calcula a coorde-
nada de destino
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Se a coordenada for v´alida
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Move o cavalo a ela
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
E tenta novo movimento
a partir dessa coordenada
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Se a tentativa for infrut´ıfera
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Descarta o movimento
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
passa ao pr´oximo
movimento poss´ıvel
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
define se o caminho a
partir de (x, y) teve
ou n˜ao teve sucesso
boolean tenta(int i, int x, int y) {
int u,v; int k = 0;
boolean feito = (i > numQuad);
while (!feito && k < 8) {
u = x + dx[k]; v = y + dy[k];
if (aceitavel(u,v)) {
tab[u][v] = i;
feito = tenta(i+1, u, v);
if (!feito) {
tab[u][v] = 0;
}
}
k++;
}
return feito;
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
void imprime() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++)
System.out.print(tab[i][j] + "t");
System.out.println("n");
}
}
void passeia(int x, int y) {
tab[x][y] = 1;
boolean feito = tenta(2, x, y);
if (feito)
imprime();
else
System.out.println("N~ao h´a passeio poss´ıvel");
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Inicia o passeio em (x, y)
void imprime() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++)
System.out.print(tab[i][j] + "t");
System.out.println("n");
}
}
void passeia(int x, int y) {
tab[x][y] = 1;
boolean feito = tenta(2, x, y);
if (feito)
imprime();
else
System.out.println("N~ao h´a passeio poss´ıvel");
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Marca a posi¸c˜ao de
in´ıcio como visitada
void imprime() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++)
System.out.print(tab[i][j] + "t");
System.out.println("n");
}
}
void passeia(int x, int y) {
tab[x][y] = 1;
boolean feito = tenta(2, x, y);
if (feito)
imprime();
else
System.out.println("N~ao h´a passeio poss´ıvel");
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
E verifica os cami-
nhos a partir dela
void imprime() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++)
System.out.print(tab[i][j] + "t");
System.out.println("n");
}
}
void passeia(int x, int y) {
tab[x][y] = 1;
boolean feito = tenta(2, x, y);
if (feito)
imprime();
else
System.out.println("N~ao h´a passeio poss´ıvel");
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Se achou a resposta, mostra
void imprime() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++)
System.out.print(tab[i][j] + "t");
System.out.println("n");
}
}
void passeia(int x, int y) {
tab[x][y] = 1;
boolean feito = tenta(2, x, y);
if (feito)
imprime();
else
System.out.println("N~ao h´a passeio poss´ıvel");
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Sen˜ao, avisa que n˜ao
h´a resposta poss´ıvel
void imprime() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++)
System.out.print(tab[i][j] + "t");
System.out.println("n");
}
}
void passeia(int x, int y) {
tab[x][y] = 1;
boolean feito = tenta(2, x, y);
if (feito)
imprime();
else
System.out.println("N~ao h´a passeio poss´ıvel");
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
int x = Integer.parseInt(args[1]);
int y = Integer.parseInt(args[2]);
new Cavalo(n).passeia(x, y);
}
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 22 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Representa¸c˜ao
Est´a correto t[x][y] → (x, y)?
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Representa¸c˜ao
Est´a correto t[x][y] → (x, y)?
Mem´oria:
x
y
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Representa¸c˜ao
Est´a correto t[x][y] → (x, y)?
Mem´oria:
x
y
Ao somarmos algum dx a t[x][y], estaremos, na
verdade, “descendo” na vertical
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – Representa¸c˜ao
Est´a correto t[x][y] → (x, y)?
Mem´oria:
x
y
Ent˜ao...
Ao somarmos algum dx a t[x][y], estaremos, na
verdade, “descendo” na vertical
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Se chamado com
java Cavalo 8 0 0
temos o seguinte
resultado:
1 60 39 34 31 18 9 64
38 35 32 61 10 63 30 17
59 2 37 40 33 28 19 8
36 49 42 27 62 11 16 29
43 58 3 50 41 24 7 20
48 51 46 55 26 21 12 15
57 44 53 4 23 14 25 6
52 47 56 45 54 5 22 13
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 24 / 29
Tentativa e Erro
Exemplo: Passeio do Cavalo – C´odigo
Se chamado com
java Cavalo 8 0 0
temos o seguinte
resultado:
1 60 39 34 31 18 9 64
38 35 32 61 10 63 30 17
59 2 37 40 33 28 19 8
36 49 42 27 62 11 16 29
43 58 3 50 41 24 7 20
48 51 46 55 26 21 12 15
57 44 53 4 23 14 25 6
52 47 56 45 54 5 22 13
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 24 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
Ao chamarmos fatorial(3),
o m´etodo ´e empilhado
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
N˜ao ´e o caso base
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
Ent˜ao nova chamada
´e feita e empilhada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
N˜ao ´e o caso base
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
Ent˜ao nova chamada
´e feita e empilhada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
N˜ao ´e o caso base
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
retorna: ?n: 0
Ent˜ao nova chamada
´e feita e empilhada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
retorna: 1n: 0
´E o caso base!
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
Desempilha, retornando 1.
E assim “volta” `a por¸c˜ao de
mem´oria no passo anterior
da recurs˜ao → backtracking
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: 1n: 1
Faz 1 * 1
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
Desempilha, retor-
nando 1 → backtracking
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: 2n: 2
Faz 2 * 1
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
Desempilha, retor-
nando 2 → backtracking
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: 6n: 3
Faz 3 * 2
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Recurs˜ao ´e a maneira mais natural de se implementar
tentativa e erro
Vamos relembrar nosso
fatorial(3):
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
} Desempilha, retornando 6
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
Recurs˜ao com Tentativa e Erro
Se conseguirmos codificar o problema de modo a
que:
Cada nova decis˜ao seja uma chamada recursiva
Cada backtracking corresponda a voltar de uma chamada
recursiva
Ent˜ao a solu¸c˜ao do problema, se feita
recursivamente, naturalmente gerenciar´a o
mecanismo de tentativa e erro
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 26 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Precisaremos de um mecanismo que nos permita:
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Precisaremos de um mecanismo que nos permita:
Registrar cada decis˜ao tomada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Precisaremos de um mecanismo que nos permita:
Registrar cada decis˜ao tomada
Voltar `a decis˜ao imediatamente anterior a cada decis˜ao
tomada, para que possamos fazer o backtracking em caso de
falha
Ou seja, precisamos registrar tamb´em a ordem em que foram
tomadas
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Precisaremos de um mecanismo que nos permita:
Registrar cada decis˜ao tomada
Voltar `a decis˜ao imediatamente anterior a cada decis˜ao
tomada, para que possamos fazer o backtracking em caso de
falha
Ou seja, precisamos registrar tamb´em a ordem em que foram
tomadas
Um mecanismo assim ´e fornecido por uma pilha:
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Precisaremos de um mecanismo que nos permita:
Registrar cada decis˜ao tomada
Voltar `a decis˜ao imediatamente anterior a cada decis˜ao
tomada, para que possamos fazer o backtracking em caso de
falha
Ou seja, precisamos registrar tamb´em a ordem em que foram
tomadas
Um mecanismo assim ´e fornecido por uma pilha:
Empilhamos cada decis˜ao tomada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Precisaremos de um mecanismo que nos permita:
Registrar cada decis˜ao tomada
Voltar `a decis˜ao imediatamente anterior a cada decis˜ao
tomada, para que possamos fazer o backtracking em caso de
falha
Ou seja, precisamos registrar tamb´em a ordem em que foram
tomadas
Um mecanismo assim ´e fornecido por uma pilha:
Empilhamos cada decis˜ao tomada
Em caso de falha, desempilhamos → voltamos `a decis˜ao
imediatamente anterior
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
decis˜ao 1
Registramos cada decis˜ao tomada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
decis˜ao 1
decis˜ao 2
Registramos cada decis˜ao tomada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
decis˜ao 1
decis˜ao 2
decis˜ao 3
Registramos cada decis˜ao tomada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
decis˜ao 1
decis˜ao 2
decis˜ao 3
decis˜ao 4
Registramos cada decis˜ao tomada
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
decis˜ao 1
decis˜ao 2
decis˜ao 3
decis˜ao 4
Em caso de falha, desempilha-
mos a decis˜ao problem´atica
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
decis˜ao 1
decis˜ao 2
decis˜ao 3
Voltando `a decis˜ao imedi-
atamente anterior a esta
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Recurs˜ao com Tentativa e Erro
E se n˜ao pudermos/quisermos usar recurs˜ao?
Note que isso ´e
exatamente o que a
pilha de recurs˜ao faz
decis˜ao 1
decis˜ao 2
decis˜ao 3
decis˜ao 5
E podendo ent˜ao tomar outra
decis˜ao no lugar da que falhou
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
Referˆencias
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Gersting, Judith L. Fundamentos Matem´aticos para a Ciˆencia
da Computa¸c˜ao. 3a ed. LTC. 1993.
Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 29 / 29

Mais conteúdo relacionado

Mais procurados

Mais procurados (7)

(ACH2002) Introdução à Análise de Algoritmos - Aula 08
(ACH2002) Introdução à Análise de Algoritmos - Aula 08(ACH2002) Introdução à Análise de Algoritmos - Aula 08
(ACH2002) Introdução à Análise de Algoritmos - Aula 08
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 18
(ACH2002) Introdução à Análise de Algoritmos - Aula 18(ACH2002) Introdução à Análise de Algoritmos - Aula 18
(ACH2002) Introdução à Análise de Algoritmos - Aula 18
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos em portugol
Algoritmos em portugolAlgoritmos em portugol
Algoritmos em portugol
 
Lógica e algoritmos
Lógica e algoritmosLógica e algoritmos
Lógica e algoritmos
 
ApostilaAlgoritmo
ApostilaAlgoritmoApostilaAlgoritmo
ApostilaAlgoritmo
 
Apresentacao N P Completude Loiane
Apresentacao  N P Completude  LoianeApresentacao  N P Completude  Loiane
Apresentacao N P Completude Loiane
 

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 04

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 04 (10)

Obtenção de Combinação Ótima de Classificadores
Obtenção de Combinação Ótima de ClassificadoresObtenção de Combinação Ótima de Classificadores
Obtenção de Combinação Ótima de Classificadores
 
Backtracking
BacktrackingBacktracking
Backtracking
 
algoritmo construção
algoritmo construçãoalgoritmo construção
algoritmo construção
 
Algoritmo e fluxogramas: introdução à lógica
Algoritmo e fluxogramas: introdução à lógicaAlgoritmo e fluxogramas: introdução à lógica
Algoritmo e fluxogramas: introdução à lógica
 
Algoritmos e Programação_01
Algoritmos e Programação_01Algoritmos e Programação_01
Algoritmos e Programação_01
 
Logica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoLogica Algoritmo 02 Algoritmo
Logica Algoritmo 02 Algoritmo
 
Atps
AtpsAtps
Atps
 
Algoritmos e Programação
Algoritmos e ProgramaçãoAlgoritmos e Programação
Algoritmos e Programação
 
Forb.cap1
Forb.cap1Forb.cap1
Forb.cap1
 
Machine Learning com Python e Scikit-learn
Machine Learning com Python e Scikit-learnMachine Learning com Python e Scikit-learn
Machine Learning com Python e Scikit-learn
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?AnabelaGuerreiro7
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresAnaCarinaKucharski1
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFtimaMoreira35
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇJaineCarolaineLima
 

Último (20)

Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdf
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
 

(ACH2002) Introdução à Análise de Algoritmos - Aula 04

  • 1. Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking) Norton Trevisan Roman norton@usp.br 23 de agosto de 2018 Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 1 / 29
  • 2. Tentativa e Erro Suponha que vocˆe tem que tomar uma s´erie de decis˜oes dentre v´arias possibilidades, onde Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
  • 3. Tentativa e Erro Suponha que vocˆe tem que tomar uma s´erie de decis˜oes dentre v´arias possibilidades, onde Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que escolher Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
  • 4. Tentativa e Erro Suponha que vocˆe tem que tomar uma s´erie de decis˜oes dentre v´arias possibilidades, onde Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que escolher Cada decis˜ao leva a um novo conjunto de escolhas Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
  • 5. Tentativa e Erro Suponha que vocˆe tem que tomar uma s´erie de decis˜oes dentre v´arias possibilidades, onde Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que escolher Cada decis˜ao leva a um novo conjunto de escolhas Alguma sequˆencia de escolhas (possivelmente mais que uma) pode ser a solu¸c˜ao para o problema Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
  • 6. Tentativa e Erro Suponha que vocˆe tem que tomar uma s´erie de decis˜oes dentre v´arias possibilidades, onde Vocˆe n˜ao tem informa¸c˜ao suficiente para saber o que escolher Cada decis˜ao leva a um novo conjunto de escolhas Alguma sequˆencia de escolhas (possivelmente mais que uma) pode ser a solu¸c˜ao para o problema Tentativa e erro ´e um modo met´odico de tentar v´arias sequˆencias de decis˜oes, at´e encontrar uma que funcione Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 2 / 29
  • 7. Tentativa e Erro T´ecnica de solu¸c˜ao de problemas Usada quando se quer achar solu¸c˜oes para problemas para os quais n˜ao se conhece uma regra fixa de computa¸c˜ao Basicamente, tentamos todas as alternativas poss´ıveis Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 3 / 29
  • 8. Tentativa e Erro T´ecnica de solu¸c˜ao de problemas Usada quando se quer achar solu¸c˜oes para problemas para os quais n˜ao se conhece uma regra fixa de computa¸c˜ao Basicamente, tentamos todas as alternativas poss´ıveis Passos Escolher uma opera¸c˜ao plaus´ıvel; Executar a opera¸c˜ao com os dados; Se a meta n˜ao foi alcan¸cada, repita o processo at´e que se atinja a meta ou se evidencie a insolubilidade do problema. Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 3 / 29
  • 9. Tentativa e Erro Tentativa e erro ´e uma t´ecnica que aproveita bem a recursividade A recursividade pode ser usada para resolver problemas cuja solu¸c˜ao ´e do tipo tentar todas as alternativas poss´ıveis Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 4 / 29
  • 10. Tentativa e Erro Tentativa e erro ´e uma t´ecnica que aproveita bem a recursividade A recursividade pode ser usada para resolver problemas cuja solu¸c˜ao ´e do tipo tentar todas as alternativas poss´ıveis A ideia para algoritmos tentativa e erro ´e decompor o processo em um n´umero finito de sub-tarefas parciais (expressas de forma recursiva) E ent˜ao explor´a-las exaustivamente Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 4 / 29
  • 11. Tentativa e Erro A constru¸c˜ao de uma solu¸c˜ao ´e obtida atrav´es de tentativas (ou pesquisas) que gradualmente constroem e percorrem uma ´arvore de sub-tarefas. Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 5 / 29
  • 12. Tentativa e Erro Funcionamento: Passos em dire¸c˜ao `a solu¸c˜ao final s˜ao tentados e registrados (em uma estrutura de dados) Caso esses passos tomados n˜ao levem `a solu¸c˜ao final, eles podem ser retirados e apagados do registro. A busca na ´arvore de solu¸c˜oes pode crescer rapidamente (at´e mesmo exponencialmente) Pode ser necess´ario usar algoritmos aproximados ou heur´ısticas, que n˜ao garantem a solu¸c˜ao ´otima, mas s˜ao r´apidas Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 6 / 29
  • 13. Tentativa e Erro Exploramos cada possibilidade como segue: Se a possibilidade ´e a resposta, retorne “sucesso” Se a possibilidade n˜ao for a resposta, e n˜ao houver outra a ser testada a partir dela, retorne “falha” Para cada possibilidade, a partir da atual: Explore a nova possibilidade (recursivo) Se encontrou a resposta, retorne “sucesso” Esgotadas as possibilidades, retorne “falha” Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 7 / 29
  • 14. Tentativa e Erro Exemplo: Caminho em Labirinto Dado um labirinto, encontre um caminho da entrada `a sa´ıda Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 8 / 29
  • 15. Tentativa e Erro Exemplo: Caminho em Labirinto Dado um labirinto, encontre um caminho da entrada `a sa´ıda Em cada interse¸c˜ao, vocˆe tem que decidir se: Segue direto Vai `a esquerda Vai `a direita Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 8 / 29
  • 16. Tentativa e Erro Exemplo: Caminho em Labirinto S´o que... vocˆe n˜ao tem informa¸c˜ao suficiente para escolher corretamente Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
  • 17. Tentativa e Erro Exemplo: Caminho em Labirinto S´o que... vocˆe n˜ao tem informa¸c˜ao suficiente para escolher corretamente Cada escolha leva a outro conjunto de escolhas Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
  • 18. Tentativa e Erro Exemplo: Caminho em Labirinto S´o que... vocˆe n˜ao tem informa¸c˜ao suficiente para escolher corretamente Cada escolha leva a outro conjunto de escolhas Uma ou mais sequˆencia de escolhas pode ser a solu¸c˜ao... Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
  • 19. Tentativa e Erro Exemplo: Caminho em Labirinto S´o que... vocˆe n˜ao tem informa¸c˜ao suficiente para escolher corretamente Cada escolha leva a outro conjunto de escolhas Uma ou mais sequˆencia de escolhas pode ser a solu¸c˜ao... Ou n˜ao! Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 9 / 29
  • 20. Tentativa e Erro Exemplo: Caminho em Labirinto E a solu¸c˜ao? Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
  • 21. Tentativa e Erro Exemplo: Caminho em Labirinto E a solu¸c˜ao? Escolha uma metodologia para fazer tentativas Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
  • 22. Tentativa e Erro Exemplo: Caminho em Labirinto E a solu¸c˜ao? Escolha uma metodologia para fazer tentativas Ex: primeiro tentar `a direita, depois `a frente, e ent˜ao `a esquerda Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
  • 23. Tentativa e Erro Exemplo: Caminho em Labirinto E a solu¸c˜ao? Escolha uma metodologia para fazer tentativas Ex: primeiro tentar `a direita, depois `a frente, e ent˜ao `a esquerda Ent˜ao, a cada decis˜ao, siga essa ordem de escolhas Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
  • 24. Tentativa e Erro Exemplo: Caminho em Labirinto E a solu¸c˜ao? Escolha uma metodologia para fazer tentativas Ex: primeiro tentar `a direita, depois `a frente, e ent˜ao `a esquerda Ent˜ao, a cada decis˜ao, siga essa ordem de escolhas Se todas as escolhas em um ponto se esgotaram, volte ao anterior, e escolha uma alternativa ainda n˜ao explorada (seguindo a metodologia de escolha) a partir desse ponto Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 10 / 29
  • 25. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas Vocˆe deseja colorir um mapa com no m´aximo 4 cores: Vermelho, amarelo, verde e azul Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 11 / 29
  • 26. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas Vocˆe deseja colorir um mapa com no m´aximo 4 cores: Vermelho, amarelo, verde e azul Pa´ıses adjacentes devem ter cores diferentes Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 11 / 29
  • 27. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas Vocˆe deseja colorir um mapa com no m´aximo 4 cores: Vermelho, amarelo, verde e azul Pa´ıses adjacentes devem ter cores diferentes Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 11 / 29
  • 28. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas Em cada itera¸c˜ao, vocˆe deve decidir de que cor pintar um pa´ıs, dadas as cores j´a atribu´ıdas aos vizinhos imediatos Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 12 / 29
  • 29. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas Em cada itera¸c˜ao, vocˆe deve decidir de que cor pintar um pa´ıs, dadas as cores j´a atribu´ıdas aos vizinhos imediatos Vocˆe n˜ao tem informa¸c˜ao suficiente para escolher as cores (s´o conhece os vizinhos imediatos) Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 12 / 29
  • 30. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas Cada escolha leva a outro conjunto de escolhas Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 13 / 29
  • 31. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas Cada escolha leva a outro conjunto de escolhas Uma ou mais sequˆencia de passos pode ser a solu¸c˜ao Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 13 / 29
  • 32. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas E a solu¸c˜ao? Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
  • 33. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas E a solu¸c˜ao? 1. Pinte um pa´ıs inicial Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
  • 34. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas E a solu¸c˜ao? 1. Pinte um pa´ıs inicial 2. Escolha cores para seus vizinhos, obedecendo `a regra Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
  • 35. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas E a solu¸c˜ao? 1. Pinte um pa´ıs inicial 2. Escolha cores para seus vizinhos, obedecendo `a regra 3. Escolha um vizinho (seguindo uma ordem pr´e-definida) Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
  • 36. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas E a solu¸c˜ao? 1. Pinte um pa´ıs inicial 2. Escolha cores para seus vizinhos, obedecendo `a regra 3. Escolha um vizinho (seguindo uma ordem pr´e-definida) 4. Repita o procedimento do passo 2 a partir desse vizinho Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 14 / 29
  • 37. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas 5. Se n˜ao for poss´ıvel colorir algu´em, volte `a escolha anterior, e troque a cor do pa´ıs no centro desse passo Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 15 / 29
  • 38. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas 5. Se n˜ao for poss´ıvel colorir algu´em, volte `a escolha anterior, e troque a cor do pa´ıs no centro desse passo Note que, se n˜ao for poss´ıvel trocar a cor deste, voltamos ao anterior a ele Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 15 / 29
  • 39. Tentativa e Erro Exemplo: Colora¸c˜ao de Mapas 5. Se n˜ao for poss´ıvel colorir algu´em, volte `a escolha anterior, e troque a cor do pa´ıs no centro desse passo Note que, se n˜ao for poss´ıvel trocar a cor deste, voltamos ao anterior a ele Vamos voltando e revendo nossas escolhas at´e acertar Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 15 / 29
  • 40. Tentativa e Erro Exemplo: Passeio do Cavalo Dado um tabuleiro com n × n posi¸c˜oes, o cavalo se movimenta segundo as regras do xadrez: Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 16 / 29
  • 41. Tentativa e Erro Exemplo: Passeio do Cavalo Dado um tabuleiro com n × n posi¸c˜oes, o cavalo se movimenta segundo as regras do xadrez: Problema: a partir de (x0, y0), encontrar, se existir, um passeio do cavalo que visite todos os pontos do tabuleiro uma ´unica vez Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 16 / 29
  • 42. Tentativa e Erro Exemplo: Passeio do Cavalo – Representa¸c˜ao Tabuleiro: matriz t (n × n) de inteiros t[x][y] = 0 → (x, y) n˜ao visitado t[x][y] = i → (x, y) visitado no i-´esimo movimento Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 17 / 29
  • 43. Tentativa e Erro Exemplo: Passeio do Cavalo – Representa¸c˜ao Tabuleiro: matriz t (n × n) de inteiros t[x][y] = 0 → (x, y) n˜ao visitado t[x][y] = i → (x, y) visitado no i-´esimo movimento Note que o valor das c´elulas guarda o hist´orico dos movimentos Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 17 / 29
  • 44. Tentativa e Erro Exemplo: Passeio do Cavalo – Algoritmo void tenta() { inicializa sele¸c~ao de movimentos ENQUANTO (movimento n~ao bem sucedido E existem candidatos a movimento) { seleciona pr´oximo candidato ao movimento SE (aceit´avel) { registra movimento SE (tabuleiro n~ao est´a cheio) { tenta novo movimento; // Chamada recursiva a tenta() SE (n~ao sucedido) apaga registro anterior } } } } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
  • 45. Tentativa e Erro Exemplo: Passeio do Cavalo – Algoritmo abastece t[i][j] void tenta() { inicializa sele¸c~ao de movimentos ENQUANTO (movimento n~ao bem sucedido E existem candidatos a movimento) { seleciona pr´oximo candidato ao movimento SE (aceit´avel) { registra movimento SE (tabuleiro n~ao est´a cheio) { tenta novo movimento; // Chamada recursiva a tenta() SE (n~ao sucedido) apaga registro anterior } } } } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
  • 46. Tentativa e Erro Exemplo: Passeio do Cavalo – Algoritmo O movimento anterior n˜ao leva `a solu¸c˜ao. Deve voltar (backtracking) void tenta() { inicializa sele¸c~ao de movimentos ENQUANTO (movimento n~ao bem sucedido E existem candidatos a movimento) { seleciona pr´oximo candidato ao movimento SE (aceit´avel) { registra movimento SE (tabuleiro n~ao est´a cheio) { tenta novo movimento; // Chamada recursiva a tenta() SE (n~ao sucedido) apaga registro anterior } } } } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
  • 47. Tentativa e Erro Exemplo: Passeio do Cavalo – Algoritmo Ao final do m´etodo, o tabuleiro conter´a a resposta void tenta() { inicializa sele¸c~ao de movimentos ENQUANTO (movimento n~ao bem sucedido E existem candidatos a movimento) { seleciona pr´oximo candidato ao movimento SE (aceit´avel) { registra movimento SE (tabuleiro n~ao est´a cheio) { tenta novo movimento; // Chamada recursiva a tenta() SE (n~ao sucedido) apaga registro anterior } } } } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 18 / 29
  • 48. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo class Cavalo { int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2}; int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1}; int num, numQuad; int[][] tab; Cavalo(int num) { this.num = num; this.numQuad = num * num; this.tab = new int[num][num]; } boolean aceitavel(int x, int y) { return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 && tab[x][y] == 0); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
  • 49. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Deslocamentos poss´ıveis a partir da posi¸c˜ao do cavalo class Cavalo { int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2}; int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1}; int num, numQuad; int[][] tab; Cavalo(int num) { this.num = num; this.numQuad = num * num; this.tab = new int[num][num]; } boolean aceitavel(int x, int y) { return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 && tab[x][y] == 0); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
  • 50. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo N´umero de quadros em uma linha e total de quadros no tabuleiro class Cavalo { int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2}; int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1}; int num, numQuad; int[][] tab; Cavalo(int num) { this.num = num; this.numQuad = num * num; this.tab = new int[num][num]; } boolean aceitavel(int x, int y) { return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 && tab[x][y] == 0); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
  • 51. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo O tabuleiro class Cavalo { int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2}; int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1}; int num, numQuad; int[][] tab; Cavalo(int num) { this.num = num; this.numQuad = num * num; this.tab = new int[num][num]; } boolean aceitavel(int x, int y) { return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 && tab[x][y] == 0); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
  • 52. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Determina se (x, y) ´e uma coordenada v´alida class Cavalo { int[] dx = { 2, 1,-1,-2,-2,-1, 1, 2}; int[] dy = { 1, 2, 2, 1,-1,-2,-2,-1}; int num, numQuad; int[][] tab; Cavalo(int num) { this.num = num; this.numQuad = num * num; this.tab = new int[num][num]; } boolean aceitavel(int x, int y) { return(x >= 0 && x <= num-1 && y >= 0 && y <= num-1 && tab[x][y] == 0); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 19 / 29
  • 53. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 54. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Tenta mover o cavalo a partir de (x, y) no i-´esimo movimento boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 55. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Coordenadas de destino do movimento boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 56. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Quantos dos poss´ıveis movimentos a partir de (x, y) j´a tentou boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 57. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Diz se pode parar (caso base: j´a marcou todo o tabuleiro) boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 58. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Enquanto n˜ao termi- nou de marcar o tabu- leiro todo, e ainda h´a movimentos poss´ıveis boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 59. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Calcula a coorde- nada de destino boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 60. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Se a coordenada for v´alida boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 61. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Move o cavalo a ela boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 62. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo E tenta novo movimento a partir dessa coordenada boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 63. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Se a tentativa for infrut´ıfera boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 64. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Descarta o movimento boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 65. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo passa ao pr´oximo movimento poss´ıvel boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 66. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo define se o caminho a partir de (x, y) teve ou n˜ao teve sucesso boolean tenta(int i, int x, int y) { int u,v; int k = 0; boolean feito = (i > numQuad); while (!feito && k < 8) { u = x + dx[k]; v = y + dy[k]; if (aceitavel(u,v)) { tab[u][v] = i; feito = tenta(i+1, u, v); if (!feito) { tab[u][v] = 0; } } k++; } return feito; } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 20 / 29
  • 67. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo void imprime() { for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) System.out.print(tab[i][j] + "t"); System.out.println("n"); } } void passeia(int x, int y) { tab[x][y] = 1; boolean feito = tenta(2, x, y); if (feito) imprime(); else System.out.println("N~ao h´a passeio poss´ıvel"); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
  • 68. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Inicia o passeio em (x, y) void imprime() { for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) System.out.print(tab[i][j] + "t"); System.out.println("n"); } } void passeia(int x, int y) { tab[x][y] = 1; boolean feito = tenta(2, x, y); if (feito) imprime(); else System.out.println("N~ao h´a passeio poss´ıvel"); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
  • 69. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Marca a posi¸c˜ao de in´ıcio como visitada void imprime() { for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) System.out.print(tab[i][j] + "t"); System.out.println("n"); } } void passeia(int x, int y) { tab[x][y] = 1; boolean feito = tenta(2, x, y); if (feito) imprime(); else System.out.println("N~ao h´a passeio poss´ıvel"); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
  • 70. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo E verifica os cami- nhos a partir dela void imprime() { for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) System.out.print(tab[i][j] + "t"); System.out.println("n"); } } void passeia(int x, int y) { tab[x][y] = 1; boolean feito = tenta(2, x, y); if (feito) imprime(); else System.out.println("N~ao h´a passeio poss´ıvel"); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
  • 71. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Se achou a resposta, mostra void imprime() { for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) System.out.print(tab[i][j] + "t"); System.out.println("n"); } } void passeia(int x, int y) { tab[x][y] = 1; boolean feito = tenta(2, x, y); if (feito) imprime(); else System.out.println("N~ao h´a passeio poss´ıvel"); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
  • 72. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Sen˜ao, avisa que n˜ao h´a resposta poss´ıvel void imprime() { for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) System.out.print(tab[i][j] + "t"); System.out.println("n"); } } void passeia(int x, int y) { tab[x][y] = 1; boolean feito = tenta(2, x, y); if (feito) imprime(); else System.out.println("N~ao h´a passeio poss´ıvel"); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 21 / 29
  • 73. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo public static void main(String[] args) { int n = Integer.parseInt(args[0]); int x = Integer.parseInt(args[1]); int y = Integer.parseInt(args[2]); new Cavalo(n).passeia(x, y); } } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 22 / 29
  • 74. Tentativa e Erro Exemplo: Passeio do Cavalo – Representa¸c˜ao Est´a correto t[x][y] → (x, y)? Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
  • 75. Tentativa e Erro Exemplo: Passeio do Cavalo – Representa¸c˜ao Est´a correto t[x][y] → (x, y)? Mem´oria: x y Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
  • 76. Tentativa e Erro Exemplo: Passeio do Cavalo – Representa¸c˜ao Est´a correto t[x][y] → (x, y)? Mem´oria: x y Ao somarmos algum dx a t[x][y], estaremos, na verdade, “descendo” na vertical Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
  • 77. Tentativa e Erro Exemplo: Passeio do Cavalo – Representa¸c˜ao Est´a correto t[x][y] → (x, y)? Mem´oria: x y Ent˜ao... Ao somarmos algum dx a t[x][y], estaremos, na verdade, “descendo” na vertical Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 23 / 29
  • 78. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Se chamado com java Cavalo 8 0 0 temos o seguinte resultado: 1 60 39 34 31 18 9 64 38 35 32 61 10 63 30 17 59 2 37 40 33 28 19 8 36 49 42 27 62 11 16 29 43 58 3 50 41 24 7 20 48 51 46 55 26 21 12 15 57 44 53 4 23 14 25 6 52 47 56 45 54 5 22 13 Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 24 / 29
  • 79. Tentativa e Erro Exemplo: Passeio do Cavalo – C´odigo Se chamado com java Cavalo 8 0 0 temos o seguinte resultado: 1 60 39 34 31 18 9 64 38 35 32 61 10 63 30 17 59 2 37 40 33 28 19 8 36 49 42 27 62 11 16 29 43 58 3 50 41 24 7 20 48 51 46 55 26 21 12 15 57 44 53 4 23 14 25 6 52 47 56 45 54 5 22 13 Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 24 / 29
  • 80. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 81. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 82. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 Ao chamarmos fatorial(3), o m´etodo ´e empilhado Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 83. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 N˜ao ´e o caso base Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 84. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 Ent˜ao nova chamada ´e feita e empilhada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 85. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 N˜ao ´e o caso base Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 86. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 Ent˜ao nova chamada ´e feita e empilhada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 87. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 N˜ao ´e o caso base Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 88. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 retorna: ?n: 0 Ent˜ao nova chamada ´e feita e empilhada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 89. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 retorna: 1n: 0 ´E o caso base! Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 90. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 Desempilha, retornando 1. E assim “volta” `a por¸c˜ao de mem´oria no passo anterior da recurs˜ao → backtracking Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 91. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: 1n: 1 Faz 1 * 1 Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 92. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 Desempilha, retor- nando 1 → backtracking Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 93. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: 2n: 2 Faz 2 * 1 Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 94. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 Desempilha, retor- nando 2 → backtracking Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 95. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: 6n: 3 Faz 3 * 2 Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 96. Recurs˜ao com Tentativa e Erro Recurs˜ao ´e a maneira mais natural de se implementar tentativa e erro Vamos relembrar nosso fatorial(3): long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Desempilha, retornando 6 Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 25 / 29
  • 97. Recurs˜ao com Tentativa e Erro Se conseguirmos codificar o problema de modo a que: Cada nova decis˜ao seja uma chamada recursiva Cada backtracking corresponda a voltar de uma chamada recursiva Ent˜ao a solu¸c˜ao do problema, se feita recursivamente, naturalmente gerenciar´a o mecanismo de tentativa e erro Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 26 / 29
  • 98. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
  • 99. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Precisaremos de um mecanismo que nos permita: Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
  • 100. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Precisaremos de um mecanismo que nos permita: Registrar cada decis˜ao tomada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
  • 101. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Precisaremos de um mecanismo que nos permita: Registrar cada decis˜ao tomada Voltar `a decis˜ao imediatamente anterior a cada decis˜ao tomada, para que possamos fazer o backtracking em caso de falha Ou seja, precisamos registrar tamb´em a ordem em que foram tomadas Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
  • 102. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Precisaremos de um mecanismo que nos permita: Registrar cada decis˜ao tomada Voltar `a decis˜ao imediatamente anterior a cada decis˜ao tomada, para que possamos fazer o backtracking em caso de falha Ou seja, precisamos registrar tamb´em a ordem em que foram tomadas Um mecanismo assim ´e fornecido por uma pilha: Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
  • 103. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Precisaremos de um mecanismo que nos permita: Registrar cada decis˜ao tomada Voltar `a decis˜ao imediatamente anterior a cada decis˜ao tomada, para que possamos fazer o backtracking em caso de falha Ou seja, precisamos registrar tamb´em a ordem em que foram tomadas Um mecanismo assim ´e fornecido por uma pilha: Empilhamos cada decis˜ao tomada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
  • 104. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Precisaremos de um mecanismo que nos permita: Registrar cada decis˜ao tomada Voltar `a decis˜ao imediatamente anterior a cada decis˜ao tomada, para que possamos fazer o backtracking em caso de falha Ou seja, precisamos registrar tamb´em a ordem em que foram tomadas Um mecanismo assim ´e fornecido por uma pilha: Empilhamos cada decis˜ao tomada Em caso de falha, desempilhamos → voltamos `a decis˜ao imediatamente anterior Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 27 / 29
  • 105. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 106. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz decis˜ao 1 Registramos cada decis˜ao tomada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 107. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz decis˜ao 1 decis˜ao 2 Registramos cada decis˜ao tomada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 108. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz decis˜ao 1 decis˜ao 2 decis˜ao 3 Registramos cada decis˜ao tomada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 109. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz decis˜ao 1 decis˜ao 2 decis˜ao 3 decis˜ao 4 Registramos cada decis˜ao tomada Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 110. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz decis˜ao 1 decis˜ao 2 decis˜ao 3 decis˜ao 4 Em caso de falha, desempilha- mos a decis˜ao problem´atica Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 111. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz decis˜ao 1 decis˜ao 2 decis˜ao 3 Voltando `a decis˜ao imedi- atamente anterior a esta Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 112. Recurs˜ao com Tentativa e Erro E se n˜ao pudermos/quisermos usar recurs˜ao? Note que isso ´e exatamente o que a pilha de recurs˜ao faz decis˜ao 1 decis˜ao 2 decis˜ao 3 decis˜ao 5 E podendo ent˜ao tomar outra decis˜ao no lugar da que falhou Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 28 / 29
  • 113. Referˆencias Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes em Java e C++. Cengage. 2007. Gersting, Judith L. Fundamentos Matem´aticos para a Ciˆencia da Computa¸c˜ao. 3a ed. LTC. 1993. Norton Trevisan Romannorton@usp.br Aula 04 – T´ecnicas de Desenvolvimento de Algoritmos: Tentativa e Erro (Backtracking)23 de agosto de 2018 29 / 29