Observe o seguinte código em Python:Considerando que a compl...

Próximas questões
Com base no mesmo assunto
Q788626 Programação

Observe o seguinte código em Python:

Imagem associada para resolução da questão

Considerando que a complexidade de tempo média da função sorted é o (nlogn), em que n é o tamanho do vetor de entrada, a ordem de chamadas das funções func1, func2 e func3, da mais rápida para a mais lenta, é:

Alternativas

Comentários

Veja os comentários dos nossos alunos

Gabarito: Letra A.

 

Essa questão mistura Python com complexidade de algoritmos. Para respondê-la, é preciso saber que a instrução: [codigo for i in colecao] vai executar o codigo para cada item na colecao, e retornar a coleção resultante.

 

O cálculo do tempo médio vai depender de quantos elementos estão na colecao. Apenas a operação [i for i in var1 < 0.5] filtra os valores, então, quanto mais cedo for executada, melhor será o desempenho. 

 

func1() realiza o filtro no 3o. passo, func2() realiza no 4o. passo, e func3() no 2o. passo. Portanto, func3() < func1() < func2(). Letra A.

 

Se você quiser uma análise mais detalhada de todos os passos:

 

No caso 1 (considerando n = 500.000):

param1 - gera 500.000 elementos randômicos, complexidade O(n), lista resultante de tamanho n.

var1 - ordena param1 (tamanho n), portanto, complexidade O(n log n), lista resultante de tamanho n.

var2 - filtra var1 (tamanho n) valores < 0.5, complexidade O(n), lista resultante de tamanho aprox. n/2.

var3 - gera 1-i para var2 (tamanho n/2), complexidade O(n/2).

Tempo acumulado: O(n) + O(n log n) + O(n) + O(n/2).

 

No caso 2 (considerando n = 500.000):

param1 - gera 500.000 elementos randômicos, complexidade O(n), lista resultante de tamanho n.

var1 - ordena param1 (tamanho n), portanto, complexidade O(n log n), lista resultante de tamanho n.

var2 - gera 1-i para var1 (tamanho n), complexidade O(n), lista resultante de tamanho n.

var3 - filtra var2 (tamanho n) valores < 0.5, complexidade O(n),

Tempo acumulado: O(n) + O(n log n) + O(n) + O(n).

 

No caso 3 (considerando n = 500.000):

param1 - gera 500.000 elementos randômicos, complexidade O(n), lista resultante de tamanho n.

var1 - filtra param1 (tamanho n) valores < 0.5, complexidade O(n), lista resultante de tamanho n/2.

var2 - ordena var1 (tamanho n/2), portanto, complexidade O(n/2 log n/2), lista resultante de tamanho n/2.

var3 - gera 1-i para var2 (tamanho n/2), complexidade O(n/2), lista resultante de tamanho n/2.

Tempo acumulado: O(n) + O(n/2 log n/2) + O(n/2) + O(n/2).

 

Portanto: func3 < func1 < func2, letra A.

Prof Judah Reis-Estratégia Concursos

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo