Engenharias de Produção e Petróleo Programação II Aula 07 Adan Lucio P. Rodovia BR 101 Norte, Km. 60, Bairro Litorâneo, CEP 29932-540, São Mateus ES, Tel.: +55 (27) 3312-1511 - CEUNES
Métodos de Ordenação MÉTODO POR EXTRACÇÃO Este método consiste em percorrer o vector, da primeira à última posição, à procura do menor elemento e colocá-lo na primeira posição; em seguida começa na segunda posição e percorre o resto do vector à procura do próximo menor elemento e colocao na segunda posição, e assim sucessivamente até à última posição.
MÉTODO POR EXTRACÇÃO
MÉTODO DE ORDENAÇÃO POR INSERÇÃO Este método percorre todos os elementos do vector e, sempre que encontrar um elemento menor do que algum dos anteriores, coloca-o na posição correta.
MÉTODO DE ORDENAÇÃO POR INSERÇÃO
MÉTODO DE ORDENAÇÃO DA BOLHA Este método faz a comparação, da esquerda para a direita do vector, de cada elemento com o seu elemento anterior até que não seja necessário trocar mais vezes, ficando assim ordenado.também se pode percorrer o vector da direita para a esquerda..
MÉTODO DE ORDENAÇÃO DA BOLHA
MergeSort entrada 7 5 2 4 1 6 3 0 saída 0 1 2 3 4 5 6 7 7 5 2 4 1 6 3 0 Dividir 7 5 2 4 1 6 3 0 2 4 5 7 0 1 3 6 Combinar 5 7 2 4 1 6 0 3 7 5 2 4 1 6 3 0 7 5 2 4 1 6 3 0 11
Complexidade Métodos Empíricos - O tempo de execução é obtido através da execução propriamente dita do algoritmo, considerando-se entradas diversas. (Depende fortemente de tecnologia.) Métodos Analíticos O tempo de execução é expresso através de expressões matemáticas que traduzem o comportamento do algoritmo em termos do tamanho da entrada. Entre entradas de mesmo tamanho que usam tempos de execução diferentes, considera-se sempre o pior caso.
Complexidade
Exemplo de Análise de Complexidade Algoritmo Somatório(A: array de inteiros, tam=n) Início soma = 0; i = n; Tempo constante repetir os comandos soma = soma + A[i]; i = i - 1; até que i = 0; output (soma) Fim Tempo constante Trecho realizado algumas vezes. Quantas? n Tempo execução = Cte. + (t som +t atr +t sub +t comp ) * n Cte.2
Algoritmo Inversão de seqüência Entrada: Elementos armazenados no vetor S[i], i=1..n. Saída: Sequência invertida dos elementos de S[i]. Início Para i = 1.. n/2 faça temp = S[i] i 1 2 3 4 S[i] = S[n i+1] n i+1 n n-1 n-2 n-3 S[n i+1] = temp Fim Outro Exemplo de Análise Laço é executado n/2 vezes. A cada iteração é feita uma troca. Ao final a seqüência está invertida. Tempo de execução: (t operações ) * n/2.
Observando os Tempos de Execução Gostaríamos de substituir as funções encontradas por uma função mais simples, que tenha o mesmo crescimento assintótico. C1 + C2 * n n C3 * n / 2 n Se a função tem termos de ordem diferente, gostaríamos de capturar o termo de mais alta ordem: 6 n 3 + 4n + 9 n 3
Notação Em complexidade computacional usamos uma notação que em funções do tipo C1 + C2 * n ou C3 * n/2 ignora as constantes - Aditivas (como C1) - Multiplicativas (como C2, C3 e 1/2) Ex: Se número de passos = 3n dizemos que o tempo de execução é O(n).
Notação Em complexidade computacional usamos uma notação que em funções do tipo C1 + C2 * n ou C3 * n/2 ignora as constantes - Aditivas (como C1) - Multiplicativas (como C2, C3 e 1/2) Ex: Se número de passos = 3n dizemos que o tempo de execução é O(n).
Notação Esta notação também despreza termos de ordem menor. Ex: Se número de passos = n 2 + n dizemos que o tempo de execução é O(n 2 ). O objetivo é ressaltar o termo que domina a curva da função.
A Notação Simétrica Ω Definição (notação ): Sejam f e h funções positivas de variável inteira n. Diz-se que f é (h), escrevendo-se f = (h), quando existirem - Uma constante c > 0 e - Um valor inteiro n 0, tais que: n > n 0 f(n) c. h(n) Uso da notação Ω: Limite inferior para o tempo de execução. O problema X requer pelo menos tempo h.
A Notação Ω Ex: f = n 2 1 f = (n 2 ) f = (n) f = (1) Mas não vale: f = (n 3 )
A Notação Θ Se f = O(h) e f = Ω(h), dizemos que f = Θ(h), ou seja, f é da ORDEM EXATA de h. e Algoritmo A executa em tempo no máximo h. O problema X requer pelo menos tempo h. Logo, o tempo de execução é ótimo.
Pior Caso Muitas vezes o tempo de execução de um algoritmo não depende apenas do tamanho da entrada, mas depende também do conteúdo da entrada. Se um algoritmo toma tempos diferentes para entradas do mesmo tamanho, em geral consideramos sempre o pior caso, ou seja, o tempo que o algoritmo gasta na pior entrada de tamanho n.