A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Curso Programadores de Informática

Apresentações semelhantes


Apresentação em tema: "Curso Programadores de Informática"— Transcrição da apresentação:

1 Curso Programadores de Informática
ESTG – IPPortalegre Curso Programadores de Informática Algoritmos Luís Baptista 2016

2 Algoritmos O que é um algoritmo? Um algoritmo é uma sequência de instruções, não ambíguas, para resolver um problema, i.e., para obter o output correto para qualquer input, numa quantidade de tempo finita. Um algoritmo tem que ser preciso, efectivo, e tem que terminar. Para especificar um algoritmo: pseudocódigo e fluxogramas. Programa: algoritmo escrito de forma a ser executado por um computador (linguagem de programação). problema algoritmo computador input output Exemplos Instruções de montagem de um qualquer kit Receita (depende…) Programa de computador Luís Baptista, PI/Algoritmos, 2016

3 Exemplos: Pseudocódigo e Fluxogramas Algoritmo de Euclides (mdc)
Algoritmos Exemplos: Pseudocódigo e Fluxogramas Algoritmo de Euclides (mdc) Calcule o máximo divisor comum entre 2 número: mdc(m,n) Contadores Mostrar números de 0 a 100. Acumuladores Somar números de 0 a 100. Luís Baptista, PI/Algoritmos, 2016

4 Analisar um algoritmo Tempo (eficiência em termos de tempo)
Algoritmos Analisar um algoritmo Tempo (eficiência em termos de tempo) Espaço (eficiência em termos de memória necessária) Outras características importantes: Simplicidade e Generalidade Notação big oh - exemplos Ciclo for – crescimento linear O(n) For dentro de FOR – crescimento quadrático O(n2) Luís Baptista, PI/Algoritmos, 2016

5 Definições Pretende-se ordenar ficheiros Que contêm registos
Métodos Elementares de Ordenação Definições Pretende-se ordenar ficheiros Que contêm registos Considerando uma chave Exemplo 10222 Maria Silva EI Portalegre 10111 João Martins EC Lisboa 9044 António Ribeiro Setúbal 8300 João Silva EERA Coimbra 11001 Margarida Gil Bio 9991 Luís Moreira 10300 Rosa Matos 10222 Maria Silva EI Portalegre 10111 João Martins EC Lisboa 9044 António Ribeiro Setúbal 8300 João Silva EERA Coimbra 11001 Margarida Gil Bio 9991 Luís Moreira 10300 Rosa Matos ficheiro registo chave O que é Ordenar ? Re-arranjar a sequência de registos do ficheiro segundo a ordem ascendente das chaves Envolve comparar e mover (trocar…) item’s (registos) Para item’s muito grandes, utilizar array de ponteiro (ordenação indirecta) Luís Baptista, PI/Algoritmos, 2016

6 Estabilidade FAZER: Ordenação do Excel é estável?
Métodos Elementares de Ordenação Estabilidade Um algoritmos de ordenação é estável quando mantém a ordem relativas dos Item’s com chaves iguais. FCNIAHOARTO AACFHINOORT Provar a estabilidade exige formulação matemática (!) Para provar a não estabilidade basta apresentar um caso FAZER: Ordenação do Excel é estável? Abrir um ficheiro com informação que contenha várias colunas; Ordenar por uma das colunas (coluna A); Ordenar por outra coluna (coluna B); O que acontece à coluna A, nos casos em que existem elementos repetidos? Luís Baptista, PI/Algoritmos, 2016

7 Estabilidade Exemplo da importância da estabilidade
Métodos Elementares de Ordenação Estabilidade Exemplo da importância da estabilidade Queremos ordenar por várias chaves (sub-ordenações) Consideremos que temos registos de alunos e queremos: Ordenar por localidade E dentro de cada localidade, por nome Utilizando um algoritmo estável: Ordenar por nome Existem muitos registos com a mesma localidade Vão ficar juntos, mantendo a ordem anterior (por nome) Podemos tornar qualquer algoritmo de ordenação estável? Sim, adicionando à chave informação da sua posição Luís Baptista, PI/Algoritmos, 2016

8 Ordenar FAZER… Como ordenar a seguinte sequência de letras?
Métodos Elementares de Ordenação Ordenar Como ordenar a seguinte sequência de letras? E A S Y Q U T I O N FAZER… Luís Baptista, PI/Algoritmos, 2016

9 Bubble Sort Troca os elementos adjacentes que estão fora de ordem
Métodos Elementares de Ordenação Bubble Sort Troca os elementos adjacentes que estão fora de ordem Até estarem todos ordenados 7 6 3 9 4 2 5 1 8 void bubble(Item a[], int l, int r) { int i, j; for (i = l; i < r; i++) for (j = r; j > i; j--) compexch(a[j-1], a[j]); } 7 6 3 9 4 2 5 1 8 7 6 3 9 4 2 5 1 8 7 6 3 9 4 2 5 1 8 7 6 3 9 4 2 5 1 8 7 6 3 9 4 2 5 1 8 7 6 3 1 9 4 2 5 8 7 6 3 9 4 2 1 5 8 7 6 1 3 9 4 2 5 8 7 6 3 9 4 1 2 5 8 7 1 6 3 9 4 2 5 8 7 6 3 9 1 4 2 5 8 1 7 6 3 9 4 2 5 8 Luís Baptista, PI/Algoritmos, 2016

10 Métodos Elementares de Ordenação
Ordenar Ordene a seguinte sequência de letras usando o bubble sort E A S Y Q U T I O N FAZER… Apresentando as várias interacções resultantes da execução do algoritmo. Luís Baptista, PI/Algoritmos, 2016

11 Métodos Elementares de Ordenação
Selection Sort Encontrar o menor elemento no array e trocá-lo com o da 1º posição Encontrar o segundo menor elemento no array e trocá-lo com o da 2º posição Repetir o mesmo processo até ao fim do array 7 6 3 9 4 2 5 1 8 1 6 3 9 4 2 5 7 8 1 2 3 9 4 6 5 7 8 void selection(Item a[], int l, int r) { int i, j; for (i = l; i < r; i++) { int min = i; for (j = i+1; j <= r; j++) if (less(a[j], a[min])) min = j; exch(a[i], a[min]); } Luís Baptista, PI/Algoritmos, 2016

12 Métodos Elementares de Ordenação
Insertion Sort Considerar os elementos um de cada vez e inseri-los na posição correcta Mover os elementos maiores para a direita, para fazer espaço para inserir o elemento na posição deixada vazia 2 3 4 6 7 9 5 1 8 2 3 4 5 6 7 9 1 8 void insertion(Item a[], int l, int r) { int i, j; for (i = l+1; i <= r; i++) for (j = i; j > l; j--) compexch(a[j-1], a[j]); } Luís Baptista, PI/Algoritmos, 2016

13 Key-Indexed Sort Consideremos N Item’s
Métodos Elementares de Ordenação Key-Indexed Sort Consideremos N Item’s Onde as chaves (keys) são elementos distintos entre 0 e N-1 Resolução directa utilizando um array temporário e sem necessidade de comparações. for(i=0; i<N; i++) b[key(a[i])] = a[i]; É um algoritmos de ordenação de tempo linear Desde que as chaves esteja dentro de um factor constantes de N void distcount(int a[], int l, int r) { int i, j, cnt[M], b[maxN]; for (j = 0; j < M; j++) cnt[j] = 0; for (i = l; i <= r; i++) cnt[a[i]+1]++; for (j = 1; j < M; j++) cnt[j] += cnt[j-1]; for (i = l; i <= r; i++) b[cnt[a[i]]++] = a[i]; for (i = l; i <= r; i++) a[i] = b[i]; } Luís Baptista, PI/Algoritmos, 2016

14 Insertion Sort - Optimizações
Métodos Elementares de Ordenação Insertion Sort - Optimizações void insertion(Item a[], int l, int r) { int i; for (i = l+1; i <= r; i++) compexch(a[l], a[i]); for (i = l+2; i <= r; i++) { int j = i; Item v = a[i]; while (less(v, a[j-1])) { a[j] = a[j-1]; j--; } a[j] = v; v= 5 2 3 4 6 7 9 5 1 8 5 2 3 4 6 7 9 1 8 2 3 4 5 6 7 9 1 8 Deslocar em vez de trocar Parar o ciclo interior Sentinela (evita testar início) Colocar o menor no início 1 2 3 4 5 6 7 9 8 1 7 6 9 4 3 5 2 8 Luís Baptista, PI/Algoritmos, 2016


Carregar ppt "Curso Programadores de Informática"

Apresentações semelhantes


Anúncios Google