ED2 Flashcards
Algoritmos diferentes, mas capazes de resolver o mesmo problema, não necessariamente o fazem com a mesma eficiência. Essas diferenças de eficiência podem ser:
> Irrelevantes: para um pequeno número de elementos processados;
Crescer proporcionalmente: com o número de elementos processados.
Para comparar a eficiência dos algoritmos foi criada uma medida chamada de:
Complexidade Computacional
Complexidade Computacional, basicamente, indica o custo ao se aplicar um algoritmo, sendo:
CUSTO =
MEMÓRIA + TEMPO
Para determinar se um algoritmo é o mais eficiente, podemos utilizar duas abordagens:
> ANÁLISE EMPÍRICA: comparação entre os programas
> ANÁLISE MATEMÁTICA: estudo das propriedades do algoritmo
Análise Empírica
Avalia o custo (ou complexidade) de um algoritmo a partir da avaliação da execução do mesmo quando implementado, ou seja, um algoritmo é analisado
pela execução de seu programa correspondente;
Vantagens da análise empírica:
> Avaliar o desempenho em uma determinada configuração de computador /linguagem;
Considerar custos não aparentes, como por exemplo “custo de alocação de memória”;
Comparar computadores;
Comparar linguagens.
Dificuldades da análise empírica
> Há a necessidade de implementação do algoritmo, e isso depende da habilidade do programador;
O resultado pode ser mascarado pelo hardware (o computador utilizado) ou software (eventos ocorridos no momento da avaliação);
Qual a natureza dos dados na análise empírica?
> Dados reais;
Aleatórios: avaliam o desempenho médio;
Perversos: avaliam o comportamento no pior caso
Análise Matemática
> Permite um estudo formal de um algoritmo ao nível da ideia por trás do algoritmo;
Faz uso de um computador idealizado e simplificações que buscam considerar somente os custos dominantes do algoritmo
A medição do tempo gasto é feita de maneira independente do hardware ou da linguagem usada na sua implementação
Vantagens da análise matemática
> Detalhes de baixo nível, como a linguagem de programação utilizada, o hardware no qual o algoritmo é executado, ou o conjunto de instruções da CPU, são ignorados;
> Permite entender com um algoritmo se comporta à medida que o conjunto de dados de entrada cresce. Assim, podemos expressar a relação entre o conjunto de dados de entrada e a quantidade de tempo necessária para processar esses dados gerando sua saída.
Notação Grande-O ou “O”
Representa o custo (seja no tempo ou no espaço), do algoritmo no pior caso possível para todas as entradas de tamnho “n”;
Ou seja, ela analisa o limite superior de entrada. Desse modo, podemos dizer que o comportamento do nosso algoritmo não pode nunca ultrapassar um determinado limite.
O que descreve a notação Grande-Omega?
Descreve o limite assintótico inferior de um algoritmo.
É a notação utilizada para analisar o melhor caso do algoritmo:
Notação Grande-Omega
O que descreve a notação Grande-O?
Descreve o limite assintótico superior de um algoritmo.
É a notação utilizada para analisar o pior caso do algoritmo:
Notação Grande-O