Baixe o app para aproveitar ainda mais
Prévia do material em texto
Disc.: ALGORITMOS E COMPLEXIDADE Turma: 3002 Aluno: FELIPE ANDERSON SILVA DE ANDRADE Matr.: 201703344936 Prof.: JEAN PIERRE HASHIMOTO BARROS Nota: 2,00 pts. 6639458704 29/09/2023 19:20:59 1. Ref.: 7652658 Segundo a Lei de Moore (1965), o poder computacional das máquinas dobra a cada 18 meses. Portanto, a princípio, pode-se considerar que um computador poderia resolver qualquer problema em um espaço de tempo curto. No entanto, os problemas crescem mais rápido que a capacidade computacional existente. A e�ciência pode ser associada aos recursos computacionais da seguinte forma: A quantidade de espaço de armazenamento que utiliza. A quantidade de tráfego que gera em uma rede de computadores. A quantidade de dados que precisam ser movidos do disco ou para o disco. Diante das a�rmações acima, assinale a alternativa correta: O desempenho do algoritmo deve ser associado do desempenho da máquina que executará o algoritmo Uma ferramenta de busca na Web, como o Google, que hoje retorna páginas relevantes de forma rápida e e�ciente, não precisa se preocupar em melhorar seu algoritmo devido ao crescimento de informações na Web, seu desempenho será sempre e�ciente devido ao seu atual grau de complexidade. Caso a escolha do algoritmo mais e�ciente seja a errada, uma máquina 10 vezes mais rápida consegue ser e�ciente proporcionalmente à sua capacidade computacional. Com a evolução tecnológica da capacidade computacional das máquinas, a importância de se analisar o algoritmo mais e�ciente �ca em último plano. Para a maior parte dos problemas, a e�ciência está relacionada ao tempo de execução em função do tamanho a entrada a ser processada. Respondido em 29/09/2023 19:24:53 2. Ref.: 7703918 Dado o trecho de código em C++ abaixo, assinale única a�rmativa correta: #de�ne struct Pessoa { String nome; int idade; }; int main() { Pessoa alunos[10], professores; } A variável aluno é um ponteiro de estrutura contendo contendo as variáveis nome do tipo string e idade do tipo inteiro A variável professor é um ponteiro contendo as variáveis nome do tipo string e idade do tipo inteiro As variáveis aluno e professor são criadas na memória como ponteiro. javascript:alert('C%C3%B3digo da quest%C3%A3o: 7652658.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7652658.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7703918.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7703918.'); A variável aluno é um vetor de estrutura com 10 posições contendo as variáveis nome do tipo string e idade do tipo inteiro. A variável aluno é um vetor com 10 posições Respondido em 29/09/2023 19:27:04 3. Ref.: 7702647 A modularização de algoritmos é importante para organizar melhor o código, facilitar a manutenção, entre outras coisas. Sobre funções e procedimentos, assinale a alternativa correta sobre a modularização: As variáveis de�nidas no escopo de cada função são acessíveis em todo o programa. A função retorna um valor ao programa. O procedimento sempre retorna um valor ao programa. Variáveis globais não são acessíveis no corpo de uma função As variáveis locais são declaradas no escopo do programa inteiro. Respondido em 29/09/2023 19:29:17 4. Ref.: 7653648 A recursividade se apresenta como uma ferramenta poderosa para resolução de problemas computacionais, tanto acadêmicos quanto comerciais. Por isso, vários algoritmos de ordenação e estrutura de dados são baseados em programas recursivos. Sobre recursividade podemos a�rmar: I) - É importante saber quando utilizar a recursão ou a iteração na solução de um problema. Em linhar gerais, solucionar problemas através da iteração geralmente exige uma quantidade maior de linhas de código; II) - Quando o foco é a e�ciência, a iteração é mais rápida em todos os casos; III) - Em algumas situações as funções recursivas podem não oferecer benefícios quando comparadas a um algoritmo elaborado utilizando iteração; IV) - Quando um algoritmo recursivo faz muitas chamadas, ele pode comprometer o funcionamento adequado da solução ao causar uma sobrecarga no uso de memória; Diante das a�rmações acima, assinale a alternativa correta: apenas as a�rmações I, II e III estão corretas; apenas as a�rmações I e III estão corretas; apenas as a�rmações II, III e IV estão corretas; todas as a�rmações estão corretas; apenas as a�rmações I, III e IV estão corretas; Respondido em 29/09/2023 20:10:15 5. Ref.: 7767160 Relacionado ao conceito de Algorítmos Recursivos, estudado, assinale a única opção incorreta javascript:alert('C%C3%B3digo da quest%C3%A3o: 7702647.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7702647.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7653648.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7653648.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7767160.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7767160.'); Uma função é uma função que faz uma chamada a si mesma. A geração de sequência é mais fácil com recursão do que usando alguma iteração aninhada. Uma desvantagem do uso da recursão é que uma tarefa complexa pode ser dividida em subproblemas mais simples. O cálculo do fatorial de um número, é um bom exemplo para resolvermos de forma recursiva. Uma vantagem do uso de recursão, é que funções recursivas fazem o código parecer limpo e elegante. Respondido em 29/09/2023 20:11:03 6. Ref.: 7642176 A recursividade é uma ferramenta poderosa para resolução de diversos problemas na computação. Alguns, que seriam solucionados com algoritmos complexos e difíceis de entender, conseguem ser resolvidos de forma elegante e bem mais simples. Diversos problemas complexos da computação são resolvidos utilizando programação dinâmica e/ou paradigmas de programação funcional. Essas técnicas e paradigmas são todas baseadas em programação recursiva, o que torna obrigatório o conhecimento adequado da recursividade. Sobre recursividade podemos a�rmar: I ) Não é necesário entender a de�nição recursiva de um algoritmo para realizar sua implementação; II ) Ao elaborarmos algoritmos recursivos é importante testar os limites dos valores a serem inseridos (carregados) para, assim, avaliarmos em que tipos de aplicações devemos utilizar-los; III) Um algoritmo recursivo deve chamar a si mesmo, recursivamente; IV ) Ao implementar algoritmos recursivos é importante consideramos a utilização da pilha da memória do computador, procedimento que pode levar a estouros da capacidade de memória; ssinale a alternativa correta: a) apenas as a�rmações I, II e III são verdadeiras; b) apenas as a�rmações II, III e IV são verdadeiras; c) apenas as a�rmações I e IV são verdadeiras; d) apenas as a�rmações I, II e IV são verdadeiras; e) todas as a�rmações são verdadeiras; Asinale a alternativa correta: apenas as a�rmações I e IV são verdadeiras; apenas as a�rmações I, II e III são verdadeiras; apenas as a�rmações II, III e IV são verdadeiras; todas as a�rmações são verdadeiras; apenas as a�rmações I, II e IV são verdadeiras; Respondido em 29/09/2023 20:08:18 7. Ref.: 7642426 Sabemos que cada algoritmo tem uma complexidade que está intimamente associada à complexidade do problema a ser resolvido. Quanto maior for a variedade de situações a serem tratadas, maior será a complexidade. A complexidade pode ser reduzida ao reduzirmos a variedade. E a variedade pode ser reduzida, dividindo problemas maiores em problemas menores. Os problemas menores são tratados através do emprego de sub-rotinas, que terão complexidade menor que o todo. Considerando o contexto apresentado podemos a�rmar: javascript:alert('C%C3%B3digo da quest%C3%A3o: 7642176.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7642176.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7642426.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7642426.'); I ) Subrotina, também chamada de subprograma, é um bloco contendo início e �m, sendo identi�cada por um nome, pelo qual será referenciada em qualquer parte e em qualquer momento do programa princial; II ) Aoelaborar um algoritmo podemos criar subrotias ou subprogramas, que são de�nidos como procedimentos e funções; III) A diferença principal entre os procedimento e as funções é que a função sempre vai retornar um valor e o procedimento não retorna valor; IV ) Dentro das subrotinas podem ser declaradas variáveis locais, que só podem ser referenciadas por comandos que estão na própria subrotina ao qual foram declaradas, essas variáveis existem somente enquanto a subrotina está sendo executada. Assinale a alternativa correta: todas as a�rmações são verdadeiras; apenas as a�rmações I, II e III são verdadeiras; apenas as a�rmações I, II e IV são verdadeiras; apenas as a�rmações I e IV são verdadeiras; apenas as a�rmações II, III e IV são verdadeiras; Respondido em 29/09/2023 20:08:41 8. Ref.: 7653388 Uma das alternativas para solucionar o problema do cálculo do fatorial de um número é utilizando a recursividade, conforme foi feito no algoritmo abaixo: 01 - //cálculo do fatorial 02 - #include 03 - int fat(int n); 04 - int main(void) 05 - { int n; 06 - printf("\n\nDigite um valor para calcularmos o fatorial: "); 07 - scanf("%d", &n); 08 - printf("\nO fatorial de %d eh %d, ", n, fat(n)); 09 - return 0;} 10 - int fat(int n) 11 - { if (n) //em C o valor 0 (zero) é interpretado como FALSO e valores <>0 são interpretados como VERDAEIRO 12 - return n*fat(n-1); 13 - else return 1;} Considerando o algoritmo apresentado, é correto a�rmar: I ) a recursividade é evidenciada na linha 12 do código; II ) o subprograma fat é um procedimento, pois retorna um inteiro como resposta ao seu chamamento; III) o subprograma fat chama ele mesmo e, assim, todas as chamadas �cam ocupando um espaço de memória até que a útima chamada seja �nalizada e retorne valor para a chamada anterior e assim sucessivamente até chegar a primeira chamada; IV ) a funçção fat é chamada para execução na linha 03, do programa principal, momento em que inicia sua execução. Assinale a alternativa correta: apenas as a�rmações II, III e IV são verdadeiras; apenas as a�rmações I, II e IV são verdadeiras; javascript:alert('C%C3%B3digo da quest%C3%A3o: 7653388.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7653388.'); apenas as a�rmações I e III são verdadeiras; todas as a�rmações são verdadeiras; apenas as a�rmações I, II e III são verdadeiras; Respondido em 29/09/2023 20:07:00 9. Ref.: 7702563 Em relação aos ponteiros nas linguagens de programação, selecione, das opções seguintes, aquela que justi�ca sua aplicação: Aumento da legibilidade dos programas. Di�culdade na implementação de tipos primitivos. Código �ca mais legível e menos propenso a erros. Flexibilidade de endereçamento e controle do gerenciamento de armazenamento dinâmico. Facilidade de implementação no gerenciamento dinâmico. Respondido em 29/09/2023 20:03:44 10. Ref.: 7642260 A notação Big O é uma ferramenta importantíssima para os cientistas da computação analisarem o custo de um algoritmo. Tecnocamente falando, a notação Big O é uma notação matemática que descreve o comportamento limitante de uma função quando o argumento tende a um valor especí�co ou ao in�nito. Ela pertence a uma família de notações inventadas por Paul Bachmann, Edmund Landau e outros, coletivamente chamadas de notação Bachmann¿Landau ou de notação assintótica. Ou seja, a notação Big O descreve a complexidade do seu código usando termos algébricos. Diante do contexdo apresentado, podemos a�rmar: I ) Quando tentamos descobrir a Big O para uma função g(n) especí�ca, nos preocupamos apenas com o termo dominante da função. O termo dominante é o termo que cresce mais rápido. II ) Na notação Big O, podemos dizer que um algoritmo tem a menor complexidade quando seu custo for O(1). III) De uma forma geral, a complexidade de um algoritmo tem relação principalmente com seu tempo de execução e espaço de memória ocupado para execução; IV ) Na notação Big O, podemos dizer que um algoritmo que tem a complexidade O(log(n)) é mais complexo do que que custa O(n⁴); Assinale a alternativa correta: apenas as a�rmações II, III e IV são verdadeiras; apenas as a�rmações I, II e IV são verdadeiras; apenas as a�rmações I, II e III são verdadeiras; todas as a�rmações são verdadeiras; apenas as a�rmações I e IV são verdadeiras; Respondido em 29/09/2023 20:04:40 javascript:alert('C%C3%B3digo da quest%C3%A3o: 7702563.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7702563.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7642260.'); javascript:alert('C%C3%B3digo da quest%C3%A3o: 7642260.');
Compartilhar