Buscar

Analise de algoritmos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Pergunta 1
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
Um típico problema em que algoritmos gulosos são aplicados é conhecido
comoagendamento para minimizar o tempo médio de finalização. Várias
estratégias têm sido propostas para oferecer uma solução em tempo
computacionalmente viável. Suponha um conjunto S = { a1, a2, …, an } de
tarefas, em que cada tarefa aidemanda pi unidades de tempo para ser concluída
a partir do momento em que é iniciada. As tarefas podem ser executadas
apenas uma por vez. Seja ci o tempo de finalização da tarefa ai, isto é, o tempo
em que a tarefa ai completa seu processamento.
 
Considerando que o objetivo é minimizar o tempo médio para finalização de
todas as tarefas, ou seja, minimizar , analise as afirmativas a seguir e assinale V
para a(s) verdadeira(s) e F para a(s) falsa(s).
 
I. ( ) Se as tarefas forem ordenadas pela quantidade de unidades de tempo para
serem finalizadas (pi), então a complexidade do algoritmo será O(n log n).
II. ( ) Um algoritmo guloso que processa as tarefas em ordem crescente de
piobtém a solução ótima para qualquer conjunto de tarefas.
III. ( ) Considerando S composto apenas de duas tarefas a1 e a2 com p1 = 3 e
p2 = 5, o tempo médio de finalização de S é independente da ordem de
execução das tarefas.
IV. ( ) Uma solução gulosa, baseada no tempo de processamento de cada tarefa,
apresenta uma estrutura local ótima em cada iteração.
 
Agora, assinale a alternativa que apresenta a sequência correta.
V, V, F, V.
V, V, F, V.
Resposta certa. Considerando S composto apenas de duas tarefas
a1 e a2 com p1 = 3 e p2 = 5, temos que, quando a2 é executada
primeiro que a1, o tempo médio para finalização de S é dado por (5
+ 8) / 2 = 6.5. Porém, quando a ordem de execução é inversa,
temos que o tempo médio é (3 + 8) / 2 = 5.5. Considerando a
ordenação das tarefas pela quantidade de unidades de tempo para
serem finalizadas (pi), o tempo de execução do algoritmo será
dominado superiormente por essa operação. Como não é possível
definir um valor máximo para todos os pi possíveis, então a
ordenação não pode ser feita em tempo linear. Nesse caso,
algoritmos como Merge Sort ou Quick Sort podem ser empregados
a fim de se alcançar o melhor desempenho na ordenação, ou seja,
O(n log n).
Pergunta 2
1 em 1 pontos
1 em 1 pontos
Resposta
Selecionada:
Resposta
Correta:
Comentário
da resposta:
O algoritmo counting sort tem larga aplicabilidade pelo seu desempenho linear
na ordenação de dados em memória. No entanto, o maior consumo de espaço
em memória pode restringir seu uso em determinados cenários. Outra
característica é sua estabilidade quanto ao posicionamento de elementos com o
mesmo valor.
 
Considerando que um vetor A de n posições é passado como parâmetro para o
algoritmo counting sort e que dois elementos nas posições i e j têm o mesmo
valor k (A[ i ] = A[ j ] = k), assinale a alternativa correta quanto ao funcionamento
do algoritmo. Assuma que um vetor B é retornado pelo algoritmo.
 
O algoritmo é estável, porque a posição C[ k ] do vetor auxiliar C é
decrementada após a alocação de k em B, e não é mais
incrementada.
O algoritmo é estável, porque a posição C[ k ] do vetor auxiliar C é
decrementada após a alocação de k em B, e não é mais
incrementada.
Resposta certa. Suponha que as posições i e j com i <j contenham
algum elemento k. Considere o último laço do algoritmo counting
sort, responsável pela construção do vetor B de saída. Como j > i,
o laço examina A[ j ] antes de examinar A[ i ]. Ao fazer isso, o
algoritmo coloca corretamente A[ j ] na posição m = C [ k ] de B.
Como C[ k ] é decrementado na linha 10 e nunca mais é
incrementado, temos a garantia de que quando o laço for examinar
A[ i ], teremos C[ k ] < m. Portanto, A[ i ] será colocado em uma
posição anterior no vetor de saída B, provando a estabilidade do
algoritmo.
Pergunta 3
h(“x ← 0”) = verdadeiro
h(“enquanto verdadeiro faça x ← 1”) = falso
Os conceitos de computabilidade de problemas são essenciais para a definição
de soluções que possam atender tanto a cenários teóricos como práticos. Em
particular, é importante dar atenção à decidibilidade dos problemas, já que ela
pode inviabilizar qualquer implementação computacional.
 
Nesse contexto, considere a função h: P → B, em que P é um tipo de dado que
representa um programa e B um tipo de dado booleano (verdadeiro ou falso).
Quando h é aplicada a um programa que termina, ela retorna verdadeiro;
quando aplicada a um programa que não termina, o resultado é falso. Por
exemplo:
 
Tendo como base a função h descrita, e considerando os conteúdo estudado,
analise as asserções a seguir e a relação proposta entre elas.
 
I. A função h é computável.
1 em 1 pontos
Resposta Selecionada:
 
Resposta Correta:
 
Comentário
da resposta:
Porque:
II. Ela é capaz de retornar uma saída para qualquer instância de problema, em
um número finito de passos.
 
A seguir, assinale a alternativa correta.
As asserções I e II são proposições falsas.
 
As asserções I e II são proposições falsas.
 
H(“x ← 0”) = verdadeiro
H(“enquanto verdadeiro faça x ← 1”) = falso.
Resposta certa. Se for assumido que h é computável, então um
programa H que computa a função h pode ser escrito de modo
que:
Nesse caso, é possível definir um programa D como segue
D = “se H(D) então,
 enquanto verdadeiro, faça x ← 1
 se não x ← 0”.
Então, como o programa H aceita qualquer entrada, é possível
para ele uma instância de si próprio, tendo o programa D como
parâmetro, ou seja, H(H(D)). Logo, se H(D) é verdadeiro, então D
representa um programa que é equivalente a
“enquanto verdadeirofaça x ← 1”, cuja execução não termina e,
portanto, H(D) é falso. Por outro lado, se H(D) é falso, então D representa
um programa equivalente a “x ← 0”, cuja execução termina e, portanto,
H(D) é verdadeiro. Dessa forma, uma inconsistência é obtida.
Consequentemente, pode-se afirmar que o programa H não existe, o que,
por sua vez, leva à conclusão de que a função h não retorna para
qualquer instância e não é computável.
Pergunta 4
Conhecer os detalhes de funcionamento dos algoritmos mais tradicionais é
importante, para que as ideias implementadas por eles possam ser aproveitadas
na solução de problemas correlatos. Esse é o caso das estratégias empregadas
na ordenação linear de dados em memória.
 
Considerando esse contexto, analise as asserções a seguir e a relação proposta
entre elas.
 
I. Dado um conjunto de n inteiros no intervalo de 0 a k, é possível construir um
algoritmo que aprimore a entrada em um tempo Θ(n + k) e que responda
quantos números existem no intervalo [a ... b] em um tempo O(1).
Porque:
II. O aprimoramento da entrada, ou pré-processamento, pode ser feito com base
no algoritmo counting sort e a obtenção da quantidade de números no intervalo
informado acontece por meio de uma operação computacional elementar.
1 em 1 pontos
Resposta
Selecionada:
Resposta
Correta:
Comentário
da resposta:
As asserções I e II são proposições verdadeiras, e a II é uma
justificativa correta da I.
As asserções I e II são proposições verdadeiras, e a II é uma
justificativa correta da I.
Resposta certa. O algoritmo pode começar com os primeiros
passos executados pelo counting sort. Nesse caso, os três
primeiros laços atuarão no aprimoramento da entrada, o que
demandará um custo Θ(n + k), assim como o algoritmo counting
sort. Logo, o vetor auxiliar C, utilizado pelo algoritmo, conterá em
cada posição C[ i ] o número de elementos menores ou iguais a i
no vetor original. Para obter a quantidade de números presentes
no intervalo [a ... b], uma operação elementar de subtração C[ b ] -
C[ a - 1 ] pode ser executada. Nesse caso, ela demandará um
tempo O(1).
Pergunta 5
Algoritmos gulosos constituem uma poderosa ferramenta para a solução de
problemas em um tempo computacionalmente viável. No entanto, dependendo
das características do problema, estratégias gulosas não são capazes de
alcançar soluções ótimas. Um exemplo é o problema de devolver um valor
(troco) com o uso da menorquantidade de moedas possível.
 
Algoritmo Troco em Moedas
Entrada: Um inteiro n e um conjunto de moedas (c1, c2, …, cr) com
c1 > c2 > … > cr.
Saída: Conjunto de moedas (d1, d2, …, dr) tal que e k é mínimo
1. C ← ∅
2. para i = 1, …, r faça
3. enquanto n ≥ ci faça
4. C ← C ∪ { ci }
5. n ← n - ci
6. retorna C
 
 
Considerando o algoritmo guloso apresentado para esse problema, analise as
afirmativas a seguir.
 
I. A execução do algoritmo com os parâmetros (c1 = 20, c2 = 15, c3 = 7, c4 = 1) e
n = 22 produz uma solução ótima.
II. Para n = 48 e (c1 = 25, c2 = 10, c3 = 5, c4 = 1), nenhuma moeda c3 comporá a
solução final.
III. A complexidade O(n) do algoritmo constitui o melhor desempenho
conseguido para esse tipo de problema.
IV. O algoritmo sempre obtém a solução ótima para o conjunto de moeda (c1 =
25, c2 = 10, c3 = 5, c4 = 1).
1 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
 
Está correto o que se afirma em:
II e IV.
II e IV.
a1 = ⌊n/c1⌋ e nq = n mod c1
a2 = ⌊nq/c2⌋ e nd = nq mod c2
a3 = ⌊nd/c3⌋ e nk = nq mod c2
a4 = nk
Resposta certa. Para as entradas (c1 = 20, c2 = 15, c3 = 7, c4 = 1)
en = 22, o algoritmo não produz a solução ótima, já que ele vai retornar o
conjunto C = { c1, c4, c4 } de 3 moedas, enquanto a solução ótima é C = {
c2, c3 } de 2 moedas. Para as entradas n = 48 e (c1 = 25, c2 = 10, c3 = 5,
c4 = 1), a solução produzida pelo algoritmo é C = { c1, c2, c2, c1, c1, c1 }
e não contém a moeda c3. Embora o algoritmo tenha complexidade O(n),
uma versão dele com desempenho O(1) pode ser obtida com as seguintes
operações:
O conjunto final C será { a1 × d1, a2 × d2, a3 × d3, a4 × d4 }.
Finalmente, para o conjunto de moedas (c1 = 25, c2 = 10, c3 = 5,
c4= 1) o algoritmo sempre obtém a solução ótima.
Pergunta 6
Resposta
Selecionada:
Resposta Correta:
Vários problemas que surgem em contextos práticos demandam análises
elaboradas, para que uma solução possa ser proposta. E, muitas vezes, o
conceito de computabilidade precisa ser considerado, já que a característica do
problema pode impactar na elaboração de uma solução computacional.
 
Nesse contexto, e considerando os conteúdos estudados sobre problemas P e
NP, analise as asserções a seguir e a relação proposta entre elas.
 
I. O problema de analisar centenas de milhares de registros para verificar quais
deles totalizam um dado valor pode ser resolvido em tempo polinomial.
Porque:
II. Um procedimento computacional simples pode ser construído para somar
esses registros e responder se o valor contabilizado é igual ao valor informado.
 
A seguir, assinale a alternativa correta:
A asserção I é uma proposição falsa, e a II é uma proposição
verdadeira.
1 em 1 pontos
Comentário
da resposta:
A asserção I é uma proposição falsa, e a II é uma proposição
verdadeira.
Resposta certa. A respeito da complexidade do problema, é
preciso identificar que se trata de procurar, dentro de um conjunto
de números (registros), quais subconjuntos somam certo valor (o
valor informado). Dentro da teoria da computabilidade, esse
problema é conhecido como o problema da soma de
subconjunto, e ele pertence à classe dos problemas NP. Logo, não
se conhece ainda um algoritmo capaz de resolver esse problema
em um tempo polinomial. Logo, a primeira asserção é falsa.
Porém, outra característica dos problemas NP é que eles podem
ser verificados em tempo polinomial. Por isso, é possível
implementar um procedimento computacional simples para somar
esses registros e responder se o valor contabilizado é igual ao
valor suspeito. Logo, a segunda asserção é verdadeira.
Pergunta 7
Resposta
Selecionada:
Resposta
Correta:
Comentário
da resposta:
As classes de computabilidade possibilitam que os problemas sejam
organizados de acordo com as suas características de tratabilidade
computacional. Conhecer as relações entre essas classes e os problemas
categorizados nelas é de grande importância para projetar algoritmos que
possam ser aplicados em cenários reais.
 
Considere um problema Y que pode ser resolvido usando um número polinomial de
passos computacionais, acrescido de um número polinomial de chamadas a um outro
problema X. Essa relação pode ser denotada por Y ≤p X. Isso quer dizer que X é pelo
menos tão difícil quanto Y com relação ao tempo polinomial. Sabendo que, se X
pode ser resolvido em tempo polinomial, isso vai implicar que Y também pode
ser resolvido em tempo polinomial, analise as asserções a seguir e a relação
proposta entre elas.
 
I. Se X é um problema NP-completo, então X pode ser resolvido em tempo
polinomial se, e somente se, P = NP.
Porque:
II. Nesse caso, qualquer outro problema Y pertencente a NP poderá ser
resolvido em tempo polinomial.
 
A seguir, assinale a alternativa correta.
As asserções I e II são proposições verdadeiras, e a II é uma
justificativa correta da I.
As asserções I e II são proposições verdadeiras, e a II é uma
justificativa correta da I.
Resposta certa. Observa-se que, se P = NP, então X pode ser resolvido em
tempo polinomial, já que X pertence à classe NP. Inversamente, suponha
1 em 1 pontos
que X possa ser resolvido em tempo polinomial. Se Y é qualquer outro
problema em NP, então Y ≤p X e, como por hipótese, se X pode ser
resolvido em tempo polinomial, então Y também pode, logo, temos
que Y pode ser resolvido em tempo polinomial.
Consequentemente, temos que NP ⊆P. Mas, como é provado que
P ⊆NP, concluímos que P = NP.
Pergunta 8
Resposta
Selecionada:
Resposta
Correta:
Comentário
da resposta:
Os problemas que precisam ser resolvidos computacionalmente podem ser
classificados de acordo com a sua computabilidade. Essa classificação é
importante, considerando que ela tem efeito direto sobre a viabilidade de
construção de um algoritmo útil em cenários práticos.
 
Considerando essas informações e os conteúdos estudados, assinale a
alternativa correta a respeito dessa classificação de problemas.
A descoberta de um algoritmo polinomial para um problema NP-
completo pode tornar a igualdade P = NP verdadeira.
A descoberta de um algoritmo polinomial para um problema NP-
completo pode tornar a igualdade P = NP verdadeira.
Resposta certa. O problema de encontrar uma rota ótima visitando
pontos específicos uma única vez é uma aplicação do problema do
Caixeiro Viajante, que é da classe NP. Problemas da classe NP-
difícil satisfazem apenas uma condição dos problemas da classe
NP (problemas NP-completo satisfazem às duas condições e são
NP-difíceis), ou seja, se um algoritmo polinomial for encontrado
para ele, então todos os problemas NP poderão ser reduzidos a
esse problema, o que possibilitará que estes sejam resolvidos em
tempo polinomial.
Pergunta 9
A construção de estratégias gulosas para a solução de problemas é uma
abordagem muito comum, porque, em geral, várias opções podem ser
implementadas. Porém, nem sempre a melhor solução é possível de ser obtida
com essa abordagem. Um exemplo é o problema conhecido como problema da
mochila 0-1. Uma mochila que suporta, no máximo, um peso P, deve ser
carregada com os itens mais valiosos dentre n disponíveis, de modo a alcançar
o maior valor total. Cada item i tem um peso pi e um valor vi associado.
1 em 1 pontos
1 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
Considerando a instância do problema da mochila 0-1, analise as afirmativas a
seguir e assinale V para a(s) verdadeira(s) e F para a(s) falsa(s).
 
I. ( ) A solução ótima inclui os itens 2 e 3.
II. ( ) Organizando os itens por ordem crescente de peso e selecionando cada
item nessa ordem, somos conduzidos a uma solução sub-ótima.
III. ( ) A estratégia gulosa de selecionar os itens com maior razão vi/pi conduz à
solução ótima.
IV. ( ) Qualquer solução contendo o item com maior valor por peso é sub-ótima.
 
Agora, assinale a alternativa que apresenta a sequência correta.
V, V, F, V.
V, V, F, V.
Resposta certa. A seleção dos itens 2 e 3 é a única que conduz à
solução ótima com o valor da mochila em 220. Se ositens forem
selecionados de acordo com a razão vi/pi, o item 1 será o primeiro
selecionado (60/10), seguido do item 2 (100/20), o que levará a
uma mochila de valor 160. As demais estratégias também levarão
a soluções sub-ótimas.
Pergunta 10
Uma estratégia muito utilizada no desenvolvimento de algoritmos recursivos é
aplicar a técnica de divisão e conquista. Nesse caso, o problema original é
dividido em problemas menores, os quais são solucionados e, posteriormente,
combinados para formar a solução do problema inicial. Um exemplo é o
problema de multiplicação de matrizes quadradas (mesmo número de linhas e
colunas), cujo algoritmo iterativo é apresentado a seguir:
 
Algoritmo MultiplicaMatrizQuadrada
Entrada: Duas matrizes A e B quadradas de tamanho n
Saída: Matriz C = A × B
1. Defina uma matriz C quadrada de tamanho n
1 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
2. para i ← 1 até n faça
3. para j ← 1 até n faça
4. cij ← 0
5. para k ← 1 até n faça
6. cij ← cij + aik × bkj
7. retorna C
 
Suponha, então, uma versão recursiva desse algoritmo,
chamadaMultiplicaRecursivo, pode ser obtida por meio da divisão das matrizes
A, B e C em 4 matrizes de tamanho n/2 (assuma que n é potência exata de 2),
conforme imagem a seguir:
 
 
Considerando essas informações e os conteúdos estudados, analise as
seguintes afirmativas.
 
I. O algoritmo MultiplicaRecursivo terá desempenho superior que a versão
iterativa apresentada.
II. O caso base do algoritmo será se n = 1, então retorna c11 = a11 × b11.
III. Serão necessárias 8 chamadas recursivas ao algoritmo MultiplicaRecursivo,
para a construção de todas as submatrizes Cij.
IV. A etapa de divisão das matrizes A, B e C em submatrizes pode impactar no
desempenho geral do algoritmo.
 
Está correto apenas o que se afirma em:
II e III.
II e III.
Resposta certa. Considerando a estratégia de divisão das matrizes
originais em 4 submatrizes, o algoritmo recursivo pode ser descrito
como a seguir:
Algoritmo MultiplicaRecursivo
Entrada: Duas matrizes A e B quadradas de tamanho n
Saída: Matriz C = A × B
01. Defina uma matriz C quadrada de tamanho n
02. se n = 1 então
03. retorna c11 = a11 × b11
04. se não
05. Particionar as matrizes A, B e C em 4 submatrizes
06. C11 = MultiplicaRecursivo(A11, B11) +
MultiplicaRecursivo(A12, B21)
07. C12 = MultiplicaRecursivo(A11, B12) +
MultiplicaRecursivo(A12, B22)
08. C21 = MultiplicaRecursivo(A21, B11) +
MultiplicaRecursivo(A22, B21)
T(1) = Θ(1), se n = 1
T(n) = 8T(n/2) + Θ(n2), se n > 1
09. C22 = MultiplicaRecursivo(A21, B12) +
MultiplicaRecursivo(A22, B22)
10. retorna C
Como cada uma das submatrizes tem n2/4 entradas, cada uma
das 4 adições de submatrizes demanda um tempo Θ(n2). Logo, a
equação de recorrência que descreve o algoritmo é dada por:
Pela aplicação do teorema mestre, a solução fechada da
recorrência é T(n) = Θ(n3), ou seja, não há diferença de
desempenho entre ambas versões do algoritmo. Além disso, como
a etapa de divisão das matrizes é Θ(n2), no pior caso, ela não tem
impacto sobre a complexidade geral do algoritmo.

Outros materiais