Considerando a eficiência de memória e a complexidade de tempo, selecione a função que é a mais eficiente, mantendo-se uma implementação válida.

Questão

Considerando a eficiência de memória e a complexidade de tempo, selecione a função que é a mais eficiente, mantendo-se uma implementação válida.

Imagem 1
Função AFunção BFunção C
função éPrimo(número n)<br> para i de 2 até a raiz quadrada de n arredondado para baixo inclusive<br>   se n mod i for 0<br>     retorne falso<br><br> retorne verdadeirofunção éPrimo(número n)<br> fatores = array gerado de números de 2 a n-1 inclusive<br> para i em fatores:<br>   se n mod i for diferente de 0,<br>     remova i de fatores<br><br> se fatores não estiver vazio<br>   retorne falso<br><br> retorne verdadeirofunção éPrimo(número n)<br> para i de 1 até n inclusive<br>   se i ≠ 1 e i ≠ n e n mod i igual a 0<br>     retornar falso<br><br> retornar verdadeiro

Alternativas

A função A é a função mais eficiente.

96%

A função B é a função mais eficiente.

A função C é a função mais eficiente.

As três funções são iguais em termos de eficiência.

Explicação

Vamos comparar tempo e memória (assumindo n>1n>1 e que todas são implementações válidas).

Função A

  • Testa divisores de 22 até n\lfloor\sqrt{n}\rfloor.
  • Tempo: no pior caso (quando nn é primo), faz cerca de n\sqrt{n} testes ⇒ O(n)O(\sqrt{n}).
  • Memória: usa apenas variáveis de controle ⇒ O(1)O(1).

Função B

  • Cria um array com todos os números de 22 a n1n-1.
  • Depois percorre e vai removendo elementos do array (remoção em array geralmente custa O(n)O(n) por remoção, pois exige deslocamentos).
  • Tempo: no pior caso pode chegar a comportamento quadrático devido às remoções ⇒ tipicamente O(n2)O(n^2) (ou, no mínimo, pior que O(n)O(n)).
  • Memória: armazena um array de tamanho ~nnO(n)O(n).

Função C

  • Testa todos os ii de 11 até nn (exceto 1 e o próprio nn como divisores “úteis”).
  • Tempo: no pior caso (primo), faz ~nn testes ⇒ O(n)O(n).
  • Memória: apenas variáveis de controle ⇒ O(1)O(1).

Conclusão

Comparando:

  • A: O(n)O(\sqrt{n}) tempo e O(1)O(1) memória
  • B: pior em memória (O(n)O(n)) e tempo (tende a O(n2)O(n^2))
  • C: O(n)O(n) tempo e O(1)O(1) memória

Logo, a mais eficiente em tempo e memória é a Função A.

Alternativa correta: (A).

Questões relacionadas

Ver últimas questões

Comece a estudar de forma inteligente hoje mesmo

Resolva questões de concursos e vestibulares com IA, gere simulados personalizados e domine os conteúdos que mais caem nas provas.

Cancele quando quiser.