← Questões de Algoritmos e Estrutura de Dados

Algoritmos e Estrutura de Dados · FGV · 2021

Questão comentada de Algoritmos e Estrutura de Dados

João precisa codificar uma função f(A), onde A é um array unidimensional de números inteiros, que deve retornar o maior valor armazenado em A. A complexidade de um algoritmo eficiente para a função f, para um array com n (n ≥ 1) elementos, deveria ser:

Gabarito: C

Para descobrir o maior valor em um array de inteiros, voce precisa olhar os elementos e comparar um por um. Isso porque, em uma lista sem informacao extra sobre a ordenacao, nao existe atalho magico: o maior pode estar em qualquer posicao, inclusive no fim, e voce so confirma isso verificando os valores. A ideia do algoritmo eficiente e simples: assumir que o primeiro elemento e o maior ate prova em contrario e, em seguida, percorrer o restante do array atualizando esse valor quando encontrar um numero maior. Esse tipo de varredura completa faz uma passada pelos n elementos, entao o custo cresce de forma linear. Por isso, a complexidade esperada e O(n). Em notacao Big O, esse eh o comportamento da funcao quando o numero de operacoes aumenta proporcionalmente ao tamanho da entrada. Nao da para ser O(1), porque uma unica leitura nao garante achar o maior; nem O(log n), O(n log n) ou O(n²), porque nao ha necessidade de dividir, ordenar ou comparar repetidamente os elementos. Em resumo: para achar o maior de um array nao ordenado, voce precisa inspecionar praticamente todos os itens. E quando a tarefa e simplesmente varrer a estrutura uma vez, a resposta classica de concurso e linearidade pura e honesta: O(n).

Continue treinando

Questões relacionadas