Introdução a Algoritmos Parte 09

Documentos relacionados
Métodos de Classificação

Métodos de Classificação

Classificação por Seleção - selection sort

Classificação por Inserção - insertion sort

Exercícios Aula Prática VII

Classificação por Particionamento

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

Introdução a Algoritmos Parte 06

Métodos de Ordenação

Ordenação. Prof. Jonas Potros

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

ESTRUTURA DE DADOS ORDENANDO LISTAS

Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

ESTRUTURA DE DADOS ORDENANDO LISTAS

BCC202 - Estrutura de Dados I

Introdução a Algoritmos Parte 08

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

ORDENAÇÃO EXTERNA DE ARQUIVOS: GERAÇÃO DE PARTIÇÕES CLASSIFICADAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

Métodos de Ordenação Parte I

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

Classificação Externa: Geração de Partições Classificadas

Projeto e Análise de Algoritmos

ALGORITMOS DE ORDENAÇÃO

2. Ordenação por Seleção

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

- Métodos simples de busca - Métodos ingênuos de ordenação (introdução)

Limite assintótico para a ordenação, Ordenação em tempo linear

Ordenação de Dados. Ordenação de Dados

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Estruturas Homogêneas (Vetores) II

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta

Computação Eletrônica. Vetores e Matrizes. Prof: Luciano Barbosa. CIn.ufpe.br

Classificação Externa: Geração de Partições Classificadas

Prof. Jorge Cavalcanti

Linguagem C: Algoritmos de Ordenação

Trabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012

Prof. Jorge Cavalcanti

Arquivos Seqüenciais: Intercalação

Linguagem C: Ordenação

Variáveis Indexadas Unidimensionais (Vetores)

O Problema da Ordenação Métodos de Ordenação Parte 1

Métodos de ordenação. Bubble sort:

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Algoritmos e Programação

Análise empírica de algoritmos de ordenação

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

Prof. Jorge Cavalcanti

Banco de Dados. Métodos de Ordenação de Dados. Prof. Walteno Martins Parreira Jr

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Algoritmos de Ordenação

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II

VETORES Motivação AULA 19

algoritmo "exercício vetor" var vet:vetor [1..12] de inteiro i:inteiro inicio para i de 1 ate 12 faca escreva ("Entre com vetor[",i,"]: ") leia

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

Ordenação por Seleção Métodos de Ordenação Parte 3

Métodos de Ordenação

Métodos de Ordenação. Ordenação Interna. Ordenação Interna

Métodos de Ordenação

Algoritmos e Programação

Ordenação - Motivação

Aula 19: Métodos eficientes de ordenação

Centro de Informá-ca Universidade Federal de Pernambuco. Vinicius Cardoso Garcia 2011 Vinicius Cardoso Garcia

ESTRUTURA DE DADOS LISTAS LINEARES

AED2 - Aula 11 Problema da separação e quicksort

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

ORDENAÇÃO E BUSCA 1. MÉTODOS DE ORDENAÇÃO

Projeto e Análise de Algoritmos

Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (ILA)

Prof. Jorge Cavalcanti

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores

Análise e Complexidade de Algoritmos

Programação Estruturada

INF111 Programação II Aulas 11, 12, 13 Ordenação

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Existem duas categorias de algoritmos de ordenação: Os algoritmos de ordenação são avaliados de acordo com os seguintes critérios:

MÉTODOS DE ORDENAÇÃO DE DADOS EM MEMÓRIA PRIMÁRIA. Material da Prof. Ana Eliza

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Algoritmos e Estruturas de Dados I Aula 05: Métodos simples de ordenação (bogo Sort, selection Sort, insertion Sort, bubble Sort)

Estruturas de Dados Algoritmos de Ordenação

algoritmo "exercício 28" var opcao, n1, n2: inteiro funcao seleciona_opcao():inteiro var o:caractere inicio repita escreva ("Efetue uma multiplicação

Algoritmos de Ordenação

ESTRUTURAS DE REPETIÇÃO

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção.

Algoritmos e Programação I

Algoritmos de ordenação: Inserção e Shellsort

PESQUISA EM INFORMÁTICA - COMO ESCREVER UM TEXTO. Prof. Angelo Augusto Frozza, M.Sc.

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

Análise e Complexidade de Algoritmos

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Transcrição:

Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 09 (Baseado no Material do Prof. Marcelo Linder) Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav

Noções de Classificação Conceitos O acesso a um conjunto de dados é facilitado se o mesmo está armazenado conforme uma certa ordem, baseada num critério conhecido. O objetivo básico da classificação ou ordenação é facilitar o acesso aos dados, propiciando a localização rápida de uma entrada, por um algoritmo. O interesse na ordenação se justifica por sua aplicação na adequação das tabelas (vetores de registros) à consulta. 2

Noções de Classificação Conceitos Além disso, o desenvolvimento de métodos e processos de ordenação também se constitui em campo de pesquisa na aplicação de técnicas básicas de construção de algoritmos. Talvez não haja outro problema de programação que, para uma mesma formulação (no caso: ordenar uma lista ), tenha tantas soluções diferentes, cada uma com qualidades e defeitos, relacionados com desempenho (complexidade em tempo e uso da memória), facilidade de programação, tipo e condição inicial dos dados, etc. Obs.: O termo lista será utilizado, deste ponto em diante, com o sentido de generalizar o termo vetor. 3

Noções de Classificação Conceitos A operação de classificação (ordenação) pode ser entendida como um rearranjo (ou permutação) de uma lista, por exemplo, do menor para o maior, aplicado sobre um dos campos (a chave da ordenação). Os processos de classificação diferem quanto à área de trabalho necessária. Enquanto uns métodos trabalham sobre o próprio vetor a ordenar (métodos in situ), outros exigem um segundo vetor para armazenar o resultado, e até mesmo outras áreas auxiliares. É interessante notar que nem sempre o uso de áreas auxiliares aumenta a eficiência dos processos, pois elas podem servir apenas para simplificar as operações, aumentando, no entanto, o número de operações a realizar. 4

Objetivos e Caracterizações A eficiência dos processos pode ser avaliada pelo número C de operações de comparação entre chaves conjuntamente com o número M de movimentos de dados (transposições) necessários. Tanto C como M são funções de n, o número de chaves. Daí, têm-se os processos ditos diretos, assim chamados por serem de formulação relativamente simples, de manipulação in situ. Nesses processos o normal é acontecer um grande número de operações de comparação e de troca de valores. 5

Objetivos e Caracterizações Existem também os processos avançados, que são aqueles de formulação baseada em expedientes não tão óbvios, com algoritmos, portanto, mais elaborado. Nesses métodos as operações tendem a ser mais complexas, porém há menos trocas, o que explica seu melhor desempenho. Por outro lado, os diversos processos de ordenação partem de alguma proposta básica, a qual caracteriza uma família de métodos. Os diversos processos se diferenciam numa família conforme os meios e truques que usam para realizar a proposta básica. Assim, os métodos diretos in situ, particularmente, pertencem às famílias de processos de ordenação por troca, por inserção e por seleção. 6

Objetivos e Caracterizações Os métodos avançados podem ser refinamentos ou combinações de processos diretos ou podem implementar outras propostas, identificando-se famílias como da ordenação por intercalação, por particionamento e por distribuição de chaves. Toda ordenação está baseada na permutação dos elementos do vetor; logo, sempre dependerá de trocas. São, no entanto, ditos processos por troca aqueles em que a operação de troca é dominante. A ordenação pode ser feita de 03 maneiras distintas: por troca, por seleção e por inserção. 7

Classificação por Troca - bubble sort Analisaremos agora um método de classificação por troca, conhecido como classificação por troca simples, classificação por bolha ou bubble sort. A idéia básica por trás do bubble sort é percorrer a lista seqüencialmente várias vezes. Cada passagem consistem em comparar cada elemento na lista com seu sucessor e trocar os dois elementos se eles não estiverem na ordem correta. Para uma melhor compreensão examinaremos o seguinte exemplo: 25 57 48 37 12 92 86 33 8

Classificação por Troca - bubble sort x = { 25, 57, 48, 37, 12, 92, 86, 33 } As seguintes comparações são feitas na primeira passagem: x[0] com x[1] (25 com 57) nenhuma troca x[1] com x[2] (57 com 48) troca x[2] com x[3] (57 com 37) troca x[3] com x[4] (57 com 12) troca x[4] com x[5] (57 com 92) nenhuma troca x[5] com x[6] (92 com 86) troca x[6] com x[7] (92 com 33) troca 9

Classificação por Troca - bubble sort Conjunto completo de iterações: iteração 0(lista original) 25 57 48 37 12 92 86 33 iteração 1 25 48 37 12 57 86 33 92 iteração 2 25 37 12 48 57 33 86 92 iteração 3 25 12 37 48 33 57 86 92 iteração 4 12 25 37 33 48 57 86 92 iteração 5 12 25 33 37 48 57 86 92 iteração 6 12 25 33 37 48 57 86 92 iteração 7 12 25 33 37 48 57 86 92 10

Classificação por Troca - bubble sort Exercício Com base no que foi visto, construa um módulo que recebe, como parâmetros, um vetor de reais, com 10 elementos. O algoritmo deve ordenar o vetor por meio da aplicação do bubble sort. 11

Classificação por Troca - bubble sort algoritmo "Bubble Sort" var a, b : inteiro temp : real x : vetor[1..10] de real inicio // Leitura dos dados aleatorio 0,100,3 //gera nºs de 0 a 100, com 03 // casas decimais para a de 1 ate 10 faca leia(x[a]) fimpara // Ordenação para a de 1 ate 10 faca para b de 1 ate 9 faca se x[b] > x[b+1] entao temp <- x[b] x[b] <- x[b+1] x[b+1] <- temp fimse fimpara fimpara // Impressão dos dados //ordenados para a de 1 ate 10 faca escreval(a:3," - ", x[a] :10:3) fimpara fimalgoritmo 12

Classificação por Troca - bubble sort Pode se fazer melhorias no algoritmo anterior? Sim. Quais? Não existe necessidade de verificar o sub vetor ordenado; e ao se verificar que o vetor está ordenado pode-se parar a ordenação. Mas isso fica para AED... 13

Classificação por Seleção - selection sort Outro método também simples de ordenação é a ordenação por seleção. Princípio de funcionamento: 1. Selecione o menor item do vetor (ou o maior). 2. Troque-o com o item que está na primeira posição do vetor. Repita estas duas operações com os n-1 itens restantes, depois com os n-2 itens, até que reste apenas um elemento. 14

Classificação por Seleção - selection sort A ordenação por seleção consiste, em cada etapa, em selecionar o maior (ou o menor) elemento e colocá-lo em sua posição correta dentro da futura lista ordenada. Durante a aplicação do método de seleção a lista com n registros fica decomposta em duas sub listas, uma contendo os itens já ordenados e a outra com os restantes ainda não ordenados. No início a sub lista ordenada é vazia e a outra contém todos os demais. No final do processo a sub lista ordenada apresentará (n- 1) itens e a outra apenas 1. 15

Classificação por Seleção - selection sort As etapas (ou varreduras) como já descrito consistem em buscar o maior (ou menor) elemento da lista não ordenada e colocá-lo na lista ordenada. Para uma melhor compreensão trabalharemos com um exemplo, visando demonstrar o resultado das etapas da ordenação de um vetor de inteiros, consideraremos o ordenamento crescente dos elementos e selecionaremos em cada etapa o maior elemento do subvetor não ordenado. 16

Classificação por Seleção - selection sort Resultado das Etapas Etapa X[1] X[2] X[3] X[4] X[5] 0 5 9 1 4 3 1 {5 3 1 4} {9} 2 {4 3 1} {5 9} 3 {1 3} {4 5 9} 4 {1} {3 4 5 9} 17

Classificação por Seleção - selection sort Exercício Com base no que foi visto, construa um módulo que recebe, como parâmetros, um vetor de reais, com 10 elementos. O algoritmo deve ordenar o vetor por meio da aplicação do selection sort. 18

Classificação por Seleção - selection sort algoritmo "Selection Sort" var vet : vetor[1..10] de real i, cont, posmenor : inteiro temp : real inicio //ler o vetor aleatorio 0,100, 3 para cont de 1 ate 10 faca leia(vet[cont]) fimpara //percorrer o vetor para cont de 1 ate 9 faca //define a posição do menor //como sendo a posição atual posmenor <- cont //percorre o restante do //vetor procurando o menor valor para i de cont+1 ate 10 faca //compara o elemento atual //com o da posição do menor se (vet[i] < vet[posmenor]) entao posmenor <- i //guarda a posição do elemento fimse fimpara //se encontrou elemento menor //troca a posição se (cont <> posmenor) entao temp <- vet[cont] vet[cont] <- vet[posmenor] vet[posmenor] <- temp fimse fimpara // Escrever o vetor ordenado para cont de 1 ate 10 faca escreval(cont,"-", vet[cont]:10 :3) fimpara fimalgoritmo 19

Classificação por Inserção - insertion sort Método preferido dos jogadores de cartas. O jogador vai recebendo cartas uma por uma, e inserindo-as na posição adequada em sua mão, fazendo com que as cartas permaneçam ordenadas durante todo o jogo. ou seja, Em cada passo, a partir de i=2, o i-ésimo item da seqüência fonte é apanhado e transferido para a seqüência destino, sendo inserido no seu lugar apropriado. 20

Classificação por Inserção - insertion sort A proposta da ordenação por inserção é a seguinte: Para cada elemento do vetor faça Inseri-lo na posição que lhe corresponde; Um processo in situ, chamado inserção direta, pode ser assim descrito: Considerar o subvetor ordenado v[1..k] Para j de k+1 até n faça Inserir v[j] na sua posição em v [1..k] 21

Classificação por Inserção - insertion sort Para encontrar o lugar de v[k], basta comparar as chaves de índices [1..k-1] até encontrar uma chave v[k_ins] que seja maior que ele. v[k_ins] será a sucessora de v[k] depois deste ser inserido no subvetor ordenado (i.e., depois de ser localizado). O problema que surge agora é: como arranjar lugar em v[1..k - 1] para o valor v[k]? Bem, como v[k] vai deixar seu lugar, este pode ser ocupado pelo elemento v[k-1], ao se fazer avançar uma posição para frente todo o subvetor v[k_ins..k 1]. 22

Classificação por Inserção - insertion sort Observe no exemplo a seguir o comportamento de um vetor submetido á classificação por inserção direta. Em cada linha é listado um vetor depois de uma passagem completa sobre o mesmo, estando sublinhado o subvetor [1..k- 1] e em negrito o elemento nele inserido por último. Vetor original: 75 25 95 87 64 59 86 40 16 49 passagem vetor resultante 1 25 75 95 87 64 59 86 40 16 49 2 25 75 95 87 64 59 86 40 16 49 3 25 75 87 95 64 59 86 40 16 49 4 25 64 75 87 95 59 86 40 16 49 5 25 59 64 75 87 95 86 40 16 49 6 25 59 64 75 86 87 95 40 16 49 7 25 40 59 64 75 86 87 95 16 49 8 16 25 40 59 64 75 86 87 95 49 9 16 25 40 49 59 64 75 86 87 95 23

Classificação por Inserção - insertion sort Exercício Com base no que foi visto, construa um módulo que recebe, como parâmetros, um vetor de reais, com 10 elementos. O algoritmo deve ordenar o vetor por meio da aplicação do insertion sort. 24

Classificação por Inserção - insertion sort algoritmo insertion_sort" var v : vetor [1..10] de inteiro j,k,i,temp : inteiro inicio aleatorio 1,100 para j de 1 ate 10 faca leia(v[j]) fimpara para j de 1 ate 9 faca k <- j para i de (j+1) ate 10 faca se v[i] < v[k] entao k <- i fimse fimpara se k > j entao temp <- v[j] v[j] <- v[k] v[k] <- temp fimse fimpara para j de 1 ate 10 faca escreval(v[j]) fimpara fimalgoritmo 25