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 A | Função B | Funçã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 verdadeiro | funçã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 verdadeiro | funçã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.
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 e que todas são implementações válidas).
Função A
- Testa divisores de até .
- Tempo: no pior caso (quando é primo), faz cerca de testes ⇒ .
- Memória: usa apenas variáveis de controle ⇒ .
Função B
- Cria um array com todos os números de a .
- Depois percorre e vai removendo elementos do array (remoção em array geralmente custa por remoção, pois exige deslocamentos).
- Tempo: no pior caso pode chegar a comportamento quadrático devido às remoções ⇒ tipicamente (ou, no mínimo, pior que ).
- Memória: armazena um array de tamanho ~ ⇒ .
Função C
- Testa todos os de até (exceto 1 e o próprio como divisores “úteis”).
- Tempo: no pior caso (primo), faz ~ testes ⇒ .
- Memória: apenas variáveis de controle ⇒ .
Conclusão
Comparando:
- A: tempo e memória
- B: pior em memória () e tempo (tende a )
- C: tempo e memória
Logo, a mais eficiente em tempo e memória é a Função A.
Alternativa correta: (A).