Linguagem de Programação IX Métodos de Ordenação

Slides:



Advertisements
Apresentações semelhantes
UFSC-CTC-INE INE Estruturas de Dados
Advertisements

Ordenação de Dados em Memória
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Estruturas de Dados Marcio Gonçalves.
ESTRUTURA DE DADOS LES.
Linguagem de Programação X Métodos de Pesquisa
Exercício Exercício. Considere um algoritmo sequencial que busca um elemento em uma lista não ordenada a) Qual é a complexidade de tempo deste algoritmo.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Algoritmos de Ordenação
Classificação de Dados
Algoritmos de Ordenação Aplicação a Listas de Registos
17 Novembro 2006Algoritmos de Ordenação e Pesquisa Aplicação a Listas de Registos 1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º
11 de Maio de 2006Listas e Ordenação1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
Pesquisa e Ordenação de Vectores
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
FACENS – Engenharia da Computação Lógica Computacional II
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Complexidade de Algoritmos
Classificação (Ordenação) de dados
Algoritmos Escher.
THOBER CORADI DETOFENO, MSC. Aula 07
Método de Ordenação: InsertionSort
Métodos de Classificação por Seleção
Ordenação de Dados.
Marco Antonio Montebello Júnior
Algoritmos e Estrutura de Dados: Uma pequena motivação
Algoritmos de Ordenação
Algoritmos de Ordenação
Insertion Sort.
Algoritmos de ordenação
ICC2 Aula 7 Fábio Nakano.
Algoritmos e Estruturas de Dados II
Comparação entre os métodos de ordenação
Ordenação em memória primária
Complexidade de algoritmos e Classificação (Ordenação) de dados
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Ordenação por inserção
Ceça Moraes – Introdução à Programação SI1
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
Procedimentos e Funções
Algoritmos de Ordenação
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações.
Como analisar um algoritmo
DCC 001 Programação de Computadores 2º Semestre de 2011
Métodos de Ordenação.
CLASSIFICAÇÃO DE DADOS
Prof. Alessandro Gonçalves
Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville
Classificação Ordenação de Dados
Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.
Métodos de Pesquisa: Sequencial e Binária
Classificação (Ordenação) de dados
USP – ICMC – SSC SSC0300 2º Semestre 2015
Classificação (Ordenação) de dados. Roteiro Contextualização e definições sobre Classificação Métodos de Classificação de Dados.
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
V ETORES E M ATRIZES Disciplina: Informática Aplicada Professor: Modesto Chaves.
Algoritmos com matrizes e vetores
Métodos de Pesquisa e Ordenação
Transcrição da apresentação:

Linguagem de Programação IX Métodos de Ordenação CST EM ANÁLISE E DESENVOLVIMENTO DE SISTEMA Linguagem C Linguagem de Programação IX Métodos de Ordenação Joseane Alves Freire 2ª Semestre 2009

Ordenação Ordenação é o processo de arranjar um conjunto de informações semelhantes numa ordem crescente ou decrescente A utilidade destes algoritmos está na resolução de problemas como: pesquisa (lista telefónica); agrupar elementos repetidos: (7, 1, 2, 7, 2, 5) -> (1, 2, 2, 5, 7, 7) ou (7, 7, 5, 2, 2, 1). Dado um vector V de N inteiros (caso mais simples), pretende-se construir um algoritmo que, após a sua execução, deixe o vector V ordenado por ordem crescente: V[0] ≤ V[1] ≤ V[2] ≤ ... ≤ V[N-1].

Ordenação Existem três métodos gerais para ordenar: Por seleção Por troca Por inserção Critério de avaliação dos algoritmos Em que velocidade ele ordena os elementos no caso médio, no pior e no melhor caso? A velocidade está diretamente relacionada ao número de comparações e o número de trocas que ocorrem.

Ordenação por seleção Como ordenar as cartas de um baralho utilizando o método de seleção? Espalhe as cartas na mesa Selecione a carta de menor valor e segure em sua mão Repita este processo até que todas as cartas estejam em sua mão

Ordenação por seleção – Algoritmos 1 Para a 1ª posição do vetor (V[0]) Encontrar a posição do menor elemento (pos_menor) entre V[0] e V[N-1] (percorre todo o vetor) Trocar o elemento da pos_menor com o elemento da 1ª posição Para a 2ª posição (V[1]) Encontra a posição do menor elemento (pos_menor) entre V[1] e V[N-1] Trocar o elemento da pos_menor com o elemento da 2ª posição . . . Para a N-ésima posição (V[N-1]) Encontrar a posição do menor elemento (pos_menor) de V[N-1] a V[N-1]. Como só falta um elemento para ordenar, V[N-1], este encontra-se automaticamente ordenado (é o maior elemento de todos). Acessar o aplicativo de ordenação em http://math.hws.edu/TMCM/java/xSortLab/

Ordenação por seleção – Algoritmos 2 Para k desde 0 até N-2 fazer: pos_menor = k Para kk desde k+1 até N-1 fazer: Se (V[kk] < V[pos_menor]) então pos_menor = kk Trocar V[pos_menor] com V[k] Fim Para fazer a troca: aux = V[pos_menor] V[pos_menor] = V[k] V[k] = aux Código em C: vide arquivo a ser enviado

Ordenação por seleção Avaliando o método O laço mais externo é executado n-1 vezes e o laço interno ½(n) vezes. Assim Teremos ½(n² - n) comparações Muito ineficiente!!! Algoritmo quadrático

Ordenação por troca Ordenação Bolha – “bubble sort” Consiste em comparar 2 elementos consecutivos e, se estiverem desordenados, trocá-los entre si. Desta forma, os maiores elementos tendem a deslocar-se para a direita e os menores para a esquerda do vetor. O vetor fica ordenado quando após várias passagem pelo vetor com pelo menos uma troca, não há qualquer troca na atual passagem. No exemplo do baralho para ordenar através deste método espalhe as cartas do baralho na mesa e vá trocando cada dupla de carta desordenada.

Ordenação por troca Ordenação Bolha – “bubble sort”- Algoritmo Fazer: Num_trocas = 0; Para k desde 0 até N-2 fazer: Se (V[k] > V[k+1]) então Trocar V[k] com V[k+1] Num_trocas = Num_trocas + 1 Enquanto (Num_trocas != 0) Código em C: vide arquivo a ser enviado

Ordenação por troca Avaliando o método Vide capítulo 19 do livro. O laço mais externo é executado n-1 vezes e o laço interno ½(n) vezes. Assim Teremos ½(n² - n) comparações para o pior caso (lista invertida) No melhor caso faremos apenas n-1 comparações. Muito ineficiente!!! Algoritmo quadrático Vide capítulo 19 do livro.

Ordenação por inserção Inicialmente é ordenado os dois primeiros elementos do vetor Em seguida o algoritmo insere o terceiro elemento na sua posição ordenada com relação aos dois primeiros membros. O processo continua até que todos os elementos tenham sido ordenados Exemplo: Inicial { d, c, a b} Passo 1 {c, d, a, b} Passo 2 {a, c, d, b} Passo 3 {a, b, c, d} Código em C: vide arquivo a ser enviado

Ordenação por inserção Avaliando o método Se a lista estiver ordenada teremos n-1 comparações – melhor caso Se estiver fora de ordem teremos ½(n² - n) comparações - pior caso Muito ineficiente!!! Algoritmo quadrático

Ordenação Todos os métodos visto até o momento são lentos, de ordem quadrática Existe algoritmo melhor? Sim. Veremos a seguir os métodos de ordenação Shellshort Quicksort

Ordenação Shellsort Este método tem o nome de seu inventor D. L. Shell. O método é baseado no de inserção Veja figura abaixo: primeiro todos os elementos que estão três posições afastados um do outro são ordenados. Em seguida, todos os elementos que estão duas posições afastados são ordenados. Finalmente, todos os elementos adjacentes são ordenados.

Ordenação Shellsort A análise desta ordenação apresenta alguns problemas matemáticos que estão além do escopo desta disciplina. O tempo de execução é proporcional a Veja na figura ao lado a comparação dos métodos de ordenação quadrático e o shell

Ordenação Quicksort Este método de ordenação é superior a todas as outras ordenações apresentadas anteriormente Ele é baseado no método de trocas O quicksort é baseado na idéias de PARTIÇÕES. Primeiro selecionamos um valor chamado “comparando” e então faz-se a partição do vetor em duas seções: Todos os elementos maiores ou iguais ao valor de um lado Todos os menores elementos de outro Este processo é repetido para cada seção restante até que a matriz esteja ordenada. Exemplo: Início {f e d a c b} => vamos escolher o valor d para a partição Passo1 {|b c a| |d e f|} => b, c e a são menores que d; e por sua vez d, e e f são maiores ou igual. Passo2 {b c a} => aplicamos o mesmo método para cada uma das partições => {a, b, c}

Ordenação Quicksort Exemplo: Como selecionar o valor do “comparando” Passo3 {d e f} => {d e f} Até que o vetor esteja totalmente ordenado {a, b, c, d, e, f} Algoritmo recursivo!! Como selecionar o valor do “comparando” Escolha aleatória Ou média de um pequeno conjunto de valores retirado da matriz O ideal seria encontrar um valor que estivesse precisamente no centro da faixa de valores. Código em C: vide arquivo a ser enviado

Ordenação Quicksort Avaliação do método O cálculo de sua complexidade está fora do escopo desta disciplina, mas é sabido que o número médio de comparações é n log n Este número é bem melhor que aqueles vistos até o momento