Métodos de Classificação

Documentos relacionados
Métodos de Classificação

Introdução a Algoritmos Parte 09

Exercícios Aula Prática VII

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

Classificação por Particionamento

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

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

BCC202 - Estrutura de Dados I

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

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;

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

Projeto e Análise de Algoritmos

Métodos de Ordenação Parte I

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

ALGORITMOS DE ORDENAÇÃO

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

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

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

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

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

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

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

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

BCC202 - Estrutura de Dados I

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

Estruturas de Dados Algoritmos de Ordenação

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

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

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

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

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

Linguagem C: Algoritmos de Ordenação

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Linguagem C: Ordenação

Algoritmos de Ordenação

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

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

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

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

Carlos Eduardo Batista. Centro de Informática - UFPB

ESTRUTURA DE DADOS ORDENANDO LISTAS

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

Métodos de Ordenação

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

Classificação por Intercalação

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

Arquivos Seqüenciais: Intercalação

Ordenação. Prof. Jonas Potros

Módulo 16 - Ordenação

ESTRUTURA DE DADOS ORDENANDO LISTAS

Ordenação por Intercalação Métodos de Ordenação Parte 4

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

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

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

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

5. Algoritmos de Ordenação

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Ordenação - Motivação

void subdivide (LISTA_ENC *pl, LISTA_ENC *pl1, LISTA_ENC *pl2) { int cont, k=1; for (cont=tam(*pl)/2;cont;cont--) {

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

Métodos de Ordenação Parte 4

Aula 18 Algoritmos básicos de busca e classificação

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

CIC 110 Análise e Projeto de Algoritmos I

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

Filas Exemplo de Aplicação

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

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

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

Métodos de Ordenação

Universidade da Madeira. 1. Recursão. 3. Busca. Profa. Dra. Laura Rodríguez Estruturas de dados e algoritmos 2

Programação de Computadores II. Cap. 16 Ordenação

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

Programação de Computadores Ordenação de Arranjos

Métodos de Ordenação

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

BCC202 - Estrutura de Dados I

1. Proponha algoritmos para: a. Calcular a altura dos nós de uma árvore binária dada, armazenando o valor da altura no nó.

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

Algoritmos de ordenação: Bucketsort, Radixsort e Seleção

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência

6. Pesquisa e Ordenação

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

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

UNIVERSIDADE DA BEIRA INTERIOR

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

ESTRUTURA DE DADOS LISTAS LINEARES

Análise de complexidade

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Análise de Algoritmos Estrutura de Dados II

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Algoritmos de Ordenação: QuickSort

Complexidade de Algoritmos

Transcrição:

395 Métodos de Classificação

396 Objetivos e Caracterizações 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 programa. O interesse na ordenação se justifica assim diretamente por sua aplicação na adequação das listas (tabelas) à consulta.

397 Objetivos e Caracterizações 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..

A operação de classificação ou 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. 398

399 Objetivos e Caracterizações A complexidade dos algoritmos serve igualmente para classificar os processos de ordenação. 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, que apresentam, no entanto, complexidade O(n²).

Objetivos e Caracterizações Nesses processos o normal é acontecer um grande número de operações de comparação e de troca de valores. Já os processos avançados, são aqueles de formulação baseada em expedientes não tão óbvios, com algoritmos, portanto, mais elaborados, que alcançam desempenho de ordem O(n log n). Nesses métodos as operações tendem a ser mais complexas, porém há menos trocas, o que explica seu melhor desempenho. 400

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. 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. 401

Classificação por Troca 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. Analisaremos agora um método de classificação por troca, conhecido como classificação por troca simples, classificação por bolha ou bubble sort. 402

Classificação por Troca - 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 403

Classificação por Troca - bubble sort 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 404

Classificação por Troca - bubble sort Conjunto completo de iterações: iteração 25 57 48 37 12 92 86 33 0(lista original) 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 405

Classificação por Troca - bubble sort Com base no que foi visto, construa uma função, em C, que recebe um vetor de inteiros e o número de elementos neste vetor. Esta função deve ordenar o vetor implementando o bubble sort. 406

407 void bubble_sort (int *v, int n) { int i, j; for (i=0; i<n-1; i++) for (j=0; j<n-1; j++) if (v[j]>v[j+1]) { int temp; temp = v[j]; v[j] = v[j+1]; v[j+1] = temp; } }

408 Classificação por Troca - bubble sort Qual a complexidade do algoritmo anterior? O(n²) Pode se fazer melhorias no algoritmo anterior? Caso possa, quais? Sim. 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.

Classificação por Troca - bubble sort Implemente o algoritmo com as melhorias discutidas. Depois analise a complexidade do mesmo. 409

410 void bubble_sort (int *v, int n) { int i, j, ah_troca=1; for (i=0; i<n-1 && ah_troca; i++) { ah_troca = 0; for (j=0; j<n-i-1; j++) if (v[j]>v[j+1]) { } } } int temp; temp = v[j]; v[j] = v[j+1]; v[j+1] = temp; ah_troca = 1; Qual a complexidade do algoritmo? O(n²)

411 Classificação por Troca - bubble sort Existem outras formas de aprimorar o bubble sort. Uma delas é fazer com que as passagens sucessivas percorram o vetor em sentidos opostos, de modo que os elementos de menor magnitude se desloquem mais rapidamente para o início da lista da mesma forma que os de maior magnitude se desloquem para o final. Implementaremos agora, como exercício, uma função que implemente este método.

412 void shaker_sort (int *v, int n) { int esq = 0, dir = n-1, i, trocou; do { trocou = 0; for (i=esq; i<dir; i++) if (v[i]>v[i+1]) { } dir--; int temp; temp = v[i]; v[i] = v[i+1]; v[i+1] = temp; trocou = 1;

413 } if (trocou) { } trocou = 0; for (i=dir; i>esq; i--) if (v[i]<v[i-1]) { } int temp; temp = v[i]; v[i] = v[i-1]; v[i-1] = temp; trocou = 1; esq++; }while(esq<dir && trocou);

414 Classificação por Troca - shaker sort Esta variante é conhecida como troca alternada ou shaker sort, devido a propiciar, por assim dizer, acomodação por agitação das chaves. O ganho obtido se deve a que: a) vão se formando dois subvetores ordenados que podem sair do processo de comparação e trocas; b) para vetores pouco desordenados, também as chaves menores são logo posicionadas, detectando-se em seguida o fim do processo.

Classificação por Troca - shaker sort De qualquer forma, o ganho é apenas em relação ao número de comparações: as trocas a serem efetuadas são sempre lado a lado, e todos os elementos terão que se movimentar no mesmo número de casas que no método bubble sort. Como as comparações são menos onerosas que as trocas, estas continuam a ditar o desempenho: o método shaker sort, no melhor caso (vetor ordenado) e no pior caso (vetor invertido) a mesma complexidade que o bubble sort. 415