Prof.Davi Morais N584 Agenda Conceitos Critérios de escolha do algoritmo Medidas de complexidade Análise de complexidade Conceitos Algoritmo: é, em geral, uma descrição passo a passo de como um problema é solucionável. A descrição deve ser finita, e os passos devem ser bem definidos, sem ambiguidades, e executáveis computacionalmente.(Terada) Instância do problema: Um entrada que satisfaz a quaisquer restrições impostas no enunciado do problema, necessária para se calcular a solução Correto: Para cada instância do problema, o algoritmo para com saída correta. Conceitos Um problema pode ser resolvido por diversos algoritmos Por exemplo... O que não quer dizer que ele seja aceitável na prática Entrada Algoritmo 01 Algoritmo 02 10 0.00001s 0.001s 20 0.00002s 1s 30 0.00003s 17.9 minutos 40 0.00004s 12.7 dias 50 0.00005s 35.7 anos Conceitos Escolhemos um algoritmo para resolver algum problema, considerando alguns critérios: Corretude Simplicidade do código Consumo de memória Tempo de processamento Através da análise de algoritmo sabemos a medida de desempenho proporcional ao tempo de execução do algoritmo. Por exemplo, medida de desempenho n = 10s, então n2 = 100s Questão Os computadores estão em constante evolução, estão cada dia mais rápidos. Ainda assim, é necessário calcular a complexidade? Questão Computador A: 1 bilhão de instruções por segundo Computador B: 10 milhões de instruções por segundo Algoritmo 1: 2n2 Algoritmo 2: 50nlogn Computador A com o Algoritmo 1: 2.(106)2 109 = 2000𝑠 Computador B com o Algoritmo 2: 50.106𝑙𝑜𝑔106 = 30𝑠 7 10 Medidas de complexidade Medidas de complexidade Medidas de Complexidade Calcular a quantidade de operações elementares do algoritmo Adição Subtração Comparação ... A complexidade é calculada pelo número de vezes que a operação fundamental é realizada. A medida de complexidade é o crescimento assintótico dessa contagem de operações. A complexidade de um algoritmo é inferida de acordo com o tamanho da instância do problema Ex.: Encontrar o elemento máximo de um vetor. Análise de Complexidade Pior Caso: caracterizado por entradas que resultam em maior crescimento do número de operações, conforme aumenta o valor de n; Melhor Caso: caracterizado por entradas que resultam em menor crescimento do número de operações, conforme aumenta o valor de n; Caso Médio: que retrata o comportamento médio do algoritmo, quando se consideram todas as entradas possíveis e as respectivas probabilidades de ocorrência Análise de Complexidade A análise de Algoritmo busca: Corretude: provar que o algoritmo é correto para qualquer instância Tempo de execução: tempo necessário para executar um algoritmo de entrada n Espaço da memória: quanto de espaço na memória é necessário para armazenar as estruturas do algoritmo Questão Enumere cada item de acordo com a complexidade. De modo, que a função de maior complexidade receberá o maior número. a) n - ( ) b) n2 - ( ) c) 2n - ( ) d) n.logn - ( ) e) logn - ( ) f) n! - ( ) g) 1 - ( ) h) nn - ( ) i) loglogn - ( ) Questão Considere dois algoritmos A e B com tempo de execução n2 e n3, respectivamente. Qual deles é o mais eficiente ? Questão Considere dois algoritmos A e B com tempos de execução 100n2 e 5n3, respectivamente, qual é o mais eficiente? Se n < 20, então B é mais rápido. No entanto, para n grande, então A é mais rápido. Questão Considere dois algoritmos A e B com complexidades 8n2 e n3, respectivamente, qual é o mais eficiente ? Qual é o maior valor de n, para o qual o algoritmo B é mais eficiente que o algoritmo A? Os algoritmos têm igual desempenho quando n = 8. Até n = 7, B é mais eficiente que A.