Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Por que backtracking favorece frequentemente melhor eficiência que uma busca exaustiva?
Explique.
Uma das principais vantagens do backtracking é que ele é capaz de evitar a busca exaustiva em
todas as soluções possíveis podando aquelas que não atendem às restrições que devem ser
satisfeitas na solução final e, portanto, não são viáveis, reduzindo assim o espaço de busca.
1
ANÁLISE DE ALGORITMOS
Bacharelado em Ciência da Computação
cuja complexidade é O(n3), que demonstra que essa abordagem não é melhor que o algoritmo
simples (citado no início da questão). Sendo assim, o cientista inventou as seguintes equações:
(cuja verificação é simples). Essas equações contêm somente sete multiplicações de tamanho n/2,
que leva à recorrência:
2
ANÁLISE DE ALGORITMOS
Bacharelado em Ciência da Computação
1
O termo "memoization" ou "memoisation" foi inventado por Donald Michie em 1968 e é derivado da palavra latina
"memorandum" ("a ser lembrado"), geralmente truncado como "memo" na língua inglesa, e assim carrega o significado
de "Transformando os resultados de uma função em algo a ser lembrado".
3
ANÁLISE DE ALGORITMOS
Bacharelado em Ciência da Computação
A complexidade do algoritmo é O(n). Sendo assim, é correto afirmar que o algoritmo se baseia em
programação dinâmica? Justifique.
Não, pois se trata do método guloso. Não há, sequer o uso de uma estrutura de dados adicional que
justifique qualquer ideia semelhança com a programação dinâmica.
7. Expliquem a principal diferença entre um algoritmo baseado em PD e um algoritmo guloso para
solucionar um problema.
A principal diferença entre um algoritmo baseado em programação dinâmica e um algoritmo guloso
é a estratégia utilizada para tomar decisões em cada etapa da resolução do problema.
Em resumo, o primeiro faz escolhas locais ótimas a cada etapa, sem levar em conta as implicações
futuras, enquanto o segundo considera todas as escolhas possíveis e determina a escolha ótima
através da comparação de todos os subproblemas possíveis. Como resultado, a programação
dinâmica é geralmente mais precisa e confiável, mas pode ser mais lenta do que um algoritmo
guloso em certas situações.
8. Considere a seguinte fórmula booleana.
(x𝗏y𝗏z)(x𝗏 ¬y)(y𝗏 ¬z)(z𝗏 ¬x)( ¬x𝗏 ¬y𝗏 ¬z)
Qual técnica de projeto de algoritmo pode ser utilizada para resolver o problema da
satisfatibilidade (SAT) dessa fórmula?
Resolva o problema utilizando a técnica proposta e apresente o passo-a-passo.
A técnica de Backtracking pode ser utilizada para resolver o problema da satisfatibilidade (SAT) dessa
fórmula.
Vamos resolver o problema passo a passo:
1. Criar uma lista com as variáveis da fórmula: x, y e z.
2. Atribuir um valor verdadeiro ou falso para a primeira variável, no caso x. Podemos escolher x
= True ou x = False.
3. Avaliar as cláusulas da fórmula que contêm a variável x escolhida no passo 2. Se todas as
cláusulas forem satisfeitas, passamos para a próxima variável da lista (y). Caso contrário,
voltamos para o passo anterior e escolhemos o valor oposto para a variável x.
4. Repetir os passos 2 e 3 para as variáveis y e z, respectivamente.
5. Se chegarmos ao final da lista de variáveis e todas as cláusulas da fórmula forem satisfeitas,
encontramos uma atribuição de valores para as variáveis que satisfaz a fórmula. Caso
contrário, não há solução.
Vamos aplicar essa técnica para a fórmula dada:
1. Lista de variáveis: x, y e z.
2. Escolhemos x = True.
3. Avaliamos as cláusulas que contêm x:
4
ANÁLISE DE ALGORITMOS
Bacharelado em Ciência da Computação
8. Portanto, encontramos uma atribuição de valores para as variáveis que satisfaz a fórmula: x =
False, y = True e z = True.
Note que a técnica de Backtracking nos permite encontrar uma solução para o problema SAT da
fórmula de forma sistemática, testando todas as possibilidades de atribuição de valores às variáveis.
No entanto, para fórmulas mais complexas, o tempo de execução pode ser muito grande e outras
técnicas, como a Programação Dinâmica, podem ser mais eficientes.
Nessa árvore, cada nó representa uma escolha de valor para
uma das variáveis da fórmula (x, y ou z). Os nós que levam à
solução do problema estão marcados como "Solution
Found". Os nós que levam a um beacktracking indicam que
o valor escolhido para a variável não leva a uma solução e,
portanto, precisamos voltar atrás e escolher outro valor
para uma variável anterior. Note que a árvore de decisão
tem profundidade 3, pois temos 3 variáveis na fórmula.
9. É dada uma peça retangular de tecido com dimensões X
x Y, onde X e Y são inteiros positivos, e uma lista de n produtos que podem ser feitos usando o
tecido. Para cada produto i ∈ [1, n] você sabe que um retângulo de tecido de dimensões a i x bi é
necessário, e que o preço final de venda do produto é c i. Considere que ai, bi e ci são todos inteiros
positivos. Você tem uma máquina que pode cortar qualquer peça retangular de pano em duas
peças, horizontal ou verticalmente. É possível aplicar programação dinâmica para o projeto de um
algoritmo que determine o melhor retorno possível sobre a peça de tecido de X x Y, ou seja, uma
estratégia para cortar o tecido de forma que os produtos feitos das peças resultantes deem a soma
máxima de preços de venda? Justifique.
Sim, pois o princípio da otimalidade é aplicável ao contexto e os subproblemas são superpostos.
Afinal, o custo ótimo de cortar uma peça retangular de tecido é a soma dos custos ótimos de cortar
2 partes da peça retangular (e assim por diante).