Buscar

ANALISE DE ALGORITMOS - ATIVIDADE 3 - Unidade de Estudo 4

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 7 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 7 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

Continue navegando


Prévia do material em texto

ANÁLISE DE ALGORITMOS
Atividade 3: Unidade de Estudo 4
1. Os conceitos que fundamentam a construção de estratégias gulosas são importantes para que uma modelagem precisa possa ser empregada durante a proposição de soluções. Essa análise deve preceder, inclusive, a etapa de projeto de um algoritmo guloso.
 
Nesse contexto, dado um conjunto { x1, x2, …, xn } de pontos na reta dos números reais, analise as asserções a seguir e a relação proposta entre elas.
 
I. É possível projetar uma estratégia gulosa para encontrar o menor conjunto de intervalos fechados de comprimento 1 (um) contendo todos os pontos.
Porque:
II. A cada etapa da estratégia gulosa uma escolha local ótima pode ser feita de modo a garantir a obtenção de uma solução final ótima.
· A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
· As asserções I e II são proposições falsas.
· Resposta 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, mas a II não é uma justificativa correta da I.
· A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
2. 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.
· Todo problema que é NP-completo, mas não é NP-difícil, pode ter um algoritmo polinomial que o resolva.
· Resposta correta
A descoberta de um algoritmo polinomial para um problema NP-completo pode tornar a igualdade P = NP verdadeira.
· Qualquer problema NP-difícil é possível de ter um certificado verificado em tempo polinomial.
· Encontrar a rota ótima para um trajeto de entrega de mercadorias em pontos específicos é um problema da classe P.
· Para todo problema cuja solução possa ser testada em tempo polinomial, existe um algoritmo polinomial que o resolve.
3. A recursão é uma poderosa técnica para modelagem e projeto de algoritmos. O uso dessa estratégia, porém, depende da correta identificação dos seus dois principais elementos: um caso base que finaliza as chamadas recursivas e o passo de recursão. Suponha a situação em que a operação de adição em uma linguagem de programação é feita por um componente externo. Esse componente recebe como parâmetro dois números a serem somados e, internamente, ele faz uso dos operadores ++ para incrementar o valor de um número em 1 e -- para decrementar em 1.
 
	Somador
Entrada: Dois inteiros i e j a serem somados
Saída: Valor de i + j
1. se i = 0 então
2.        retorna j
3. senão
4.        retorna Somador(- -i, ++j)
 
Considerando o Algoritmo Somador apresentado, assinale a alternativa correta a respeito de seu funcionamento.
· A etapa de combinação das soluções parciais, computadas em cada chamada recursiva, é feita em cada invocação do algoritmo.
· Resposta correta
O passo recursivo da função de recorrência associada é T(i, j) = T(i -1, j + 1) para i > 0.
· Para a soma dos números i = 3 e j = 7, o algoritmo realiza 2 chamadas recursivas.
· A parada do algoritmo é garantida pelo incremento realizado no parâmetro j.
· O caso base da função de recorrência que modela o algoritmo é T(i, j) = j, se j = 0.
4. 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.
· A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
· As asserções I e II são proposições falsas.
· Resposta 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, mas a II não é uma justificativa correta da I.
· A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
5. O conceito de recursão é antigo e já era explorado muito antes do desenvolvimento da computação. No entanto, até hoje, vários problemas são modelados com funções de recorrência e estas dão subsídio ao desenvolvimento de várias soluções computacionais. Uma das recorrências antigas, usadas pela civilização egípcia, é conhecida como multiplicação por duplicação. A equação de recorrência que a define é descrita a seguir:
 
· x · y = 0,                                se x = 0
· x · y = ⌊x/2⌋ · (y + y),           se x é par
· x · y = ⌊x/2⌋ · (y + y) + y,    se x é ímpar
 
Considerando essa equação de recorrência, assinale a alternativa que indica o algoritmo recursivo que implementa corretamente a multiplicação por duplicação. O algoritmo Multiplicadorrecebe como entrada dois inteiros x e y a serem multiplicados, e retorna o valor de x · y.
Resposta correta
Algoritmo Multiplicador
1. se x = 0, então
2. retorna 0
3. se não
4. x’ ← ⌊x/2⌋
5. y’ ← y + y
6. prod ← Multiplicador (x’, y’)
7. se x é ímpar, então
8. prod ← prod + y
9. retorna prod
6. A ordenação de dados em memória é uma das operações mais comuns executadas por algoritmos computacionais. Embora existam diferentes estratégias para esse tipo de operação, poucas delas conseguem alcançar um tempo computacional linear.
 
	Algoritmo Ordenação Linear Simplificada
Entrada: Um vetor A de n inteiros cujos valores são 1 ou 2.
Saída: Vetor A com os valores ordenados de forma não-decrescente
1. Defina k ← 0
2. para i ← 1 até n faça
3.        se A[ i ] = 1, então k ← k + 1
4. para i ← 1 até k faça
5.        A[ i ] ← 1      
6. para i ← k + 1 até n faça
7.         A[ i ] ← 2
8. retorna A
 
 
Nesse contexto, considerando o algoritmo apresentado, analise as afirmativas a seguir e assinale V para a(s) verdadeira(s) e F para a(s) falsa(s).
 
I. ( ) Para um vetor A contendo m posições com valor 1 e n posições com valor 2, o algoritmo realiza m + n operações de atribuições ao vetor A.
II. ( ) O algoritmo é estável.
III. ( ) Para qualquer sequência de valores aceitos pelo algoritmo, as primeiras posições do vetor A serão ocupadas pelo valor 2.
IV. ( ) O maior valor possível para k é n.
 
Agora, assinale a alternativa que apresenta a sequência correta:
· Resposta correta
V, V, F, V.
· V, V, F, F.
· V, F, V, F.
· F, V, F, V.
· F, F, V, V.
7. Um típico problema em que algoritmos gulosos são aplicados é conhecido como agendamento 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 ai demanda 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 ordenadaspela 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 pi obté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.
· Resposta correta
V, V, F, V.
· V, V, F, F.
· V, F, V, F.
· F, V, F, V.
· F, F, V, V.
8. 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:
· h(“x ← 0”) = verdadeiro
· h(“enquantoverdadeirofaça x ← 1”) = falso
 
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.
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.
· A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
· Resposta correta
As asserções I e II são proposições falsas.
· 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, mas a II não é uma justificativa correta da I.
· A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
9. 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.
 
· Se existirem outros elementos com valor k, o vetor auxiliar terá armazenado em sua posição k o valor p.
· Resposta correta
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.
· Como A[ i ] = A[ j ] no vetor de origem, então as posições relativas entre esses elementos podem ser alteradas no vetor de saída B.
· Supondo que i < j, neste caso, o último laço do algoritmo vai examinar A[ i ] antes que A[ j ].
· Se o vetor C tem na sua posição k o valor m, então o elemento k é alocado na posição n – m do vetor de saída B.
10. O algoritmo counting sort constitui uma alternativa eficiente para a ordenação de dados em memória, já que ele demanda um tempo computacional da ordem de Θ(n). No entanto, ele faz maior uso do espaço em memória, por precisar que vetores auxiliares sejam criados durante sua execução.
 
Considerando a execução do algoritmo sobre um vetor A = {4, 1, 5, 0, 1, 6, 5, 1, 5, 3}, em que todos os valores são menores que k = 7, analise as afirmativas a seguir.
 
I. Após o primeiro laço que inicializa cada posição do vetor auxiliar C com zero, o segundo laço finaliza com o vetor C = { 1, 3, 0, 1, 1, 3, 1 }.
II. Ao término do terceiro laço, o vetor auxiliar C definido no corpo do algoritmo terá os seguintes valores armazenados {0, 3, 3, 4, 5, 8, 9}.
III. A primeira iteração do último laço do algoritmo faz com que o valor 3 seja atribuído à posição 4 do vetor A.
IV. A posição 4 corresponde à última posição do vetor A a ser preenchida pelo laço final do algoritmo.
 
Está correto apenas o que se afirma em:
· II e III.
· III e IV.
· I e IV.
· I e II.
· Resposta correta
I, II e III.