Métodos de Classificação

Documentos relacionados
Memória secundária. Memória secundária

Métodos de Ordenação

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

6. Pesquisa e Ordenação

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

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

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

BCC202 - Estrutura de Dados I

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

SCC Capítulo 4 Métodos de Ordenação

Ordenação de Dados (III) HeapSort

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

Introdução Métodos de Busca Parte 1

Filas Exemplo de Aplicação

Basicamente, os tipos de algoritmos de ordenação podem ser resumidos a: Por seleção: seleciona o menor elemento, o segundo menor e assim por diante

Método de ordenação - objetivos:

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

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

Pesquisa Linear. Adriano J. Holanda 15/3/2016

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

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 e Estruturas de Dados II. Ordenação

Análise e Comparação de Algoritmos Implementados em Java

Algoritmos de ordenação Ordenação rápida ( Quicksort )

O mais leve e o mais pesado Algoritmos de Ordenação

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

2. Ordenação por Seleção

Universidade Federal do Espírito Santo

Capítulo 14. Ordenação e pesquisa. Bubblesort. Alguns algoritmos de ordenação e pesquisa Medição do tempo de execução de um programa

Algoritmos de Pesquisa e Ordenação em Vectores

BCC202 - Estrutura de Dados I

Análise de Algoritmos

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

Algoritmos Paralelos - ordenação

Intercalação de vários arquivos. Estrutura de Dados II Prof Jairo Francisco de Souza

Algoritmos de pesquisa

Algoritmos de Ordenação e Pesquisa. Marco Antonio Moreira de Carvalho Algoritmos e Estrutura de Dados

Algoritmos 2 - Introdução

Classificação e Pesquisa de Dados. Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos

Complexidade de Algoritmos. Edson Prestes

Algoritmia e Programação APROG. Vetores. Algoritmia e Java. Nelson Freire (ISEP DEI-APROG 2012/13) 1/32

ALGORITMOS em linguagem C

Estrutura de indexação de arquivos

Algoritmos de Classificação de Tabelas - Sorting

QuickSort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

I. Correção de Algoritmos Não-Recursivos

Aula 05 Ordenação parcial

Computadores = cérebros eletrônicos?

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO PRÉ AULA PRÉ AULA 02/11/2015

ANÁLISE SOBRE ALGUNS MÉTODOS DE ORDENAÇÃO DE LISTAS: SELEÇÃO, INSERÇÃO E SHELLSORT

Introdução à Programação. Vanessa Braganholo

Matrizes esparsas: definição

Lógica de Programação Completo

Introdução à Programação

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Simulador didático de testes de algoritmos de ordenação

Aula 21 Ordenação externa

Lista Série de linhas da folha de cálculo que contém dados relacionados, como por exemplo, uma base de dados.

Linguagem C vetores multidimensionais

Complexidade de Algoritmos

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

Algoritmos de pesquisa

Lista Encadeada (Linked List)

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

Aula 10: Tratabilidade

Este conceito é bastante simples e será útil e conveniente nos itens seguintes, na definição das estruturas básicas de controle de execução.

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

INF 1620 P3-29/06/04 Questão 1 Nome:

Programação de Computadores I 2016 Prof. Marcos UNESP/FEG/DMA

Meg Silva Gestora de Processos Contato: / Blog: Uberlândia - MG

Árvore AVL A seguir estudaremos árvore AVL e árvore 234. Os slides que versão sobre as árvores retro aludidas foram baseados nos slides gerados pela

32 Matemática. Programação anual de conteúdos

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 1 8: Figura 1 9: Figura 1 10:

Análise e Projeto de Algoritmos

BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade

Prof. Benito Piropo Da-Rin. Arquitetura, Organização e Hardware de Computadores - Prof. B. Piropo

Busca. Pesquisa sequencial

Ordenação e Pesquisa de Dados. Aula 07 Insertion Sort e Bubble Sort

SUBGERÊNCIA DE GESTÃO EDUCACIONAL PLANO DE CURSO

RESOLUÇÕES DA 2ª FASE

Livro Projeto de Algoritmos Nívio Ziviani Capítulo 4

4ª Série de Exercícios Variáveis Compostas Homogêneas 1. Faça um algoritmo que leia, via teclado, 10 valores do tipo inteiro e os guarde na memória.

7. Introdução à Complexidade de Algoritmos

Transcrição:

Métodos de Classificação 261

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 diretamente por sua aplicação na adequação das listas (tabelas) à consulta. 262

263 Objetivos e Caracterizações Além disso, o desenvolvimento de métodos e processos de ordenação também se constitui em um campo de pesquisa onde ocorre a 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. 264

265 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. 266

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

É possível que dois registros num arquivo tenham a mesma chave. Uma técnica de classificação é chamada estável se, para todos os registros i e j, k[i] seja igual a k[j]; se r[i] precede r[j] no arquivo original, r[i] precederá r[j] no arquivo classificado. Ou seja, uma classificação estável mantém os registros com a mesma chave na mesma ordem relativa em que estavam antes da classificação. Exemplo: se uma lista alfabética de nomes de funcionários de uma empresa é ordenada pelo campo salário, então um método estável produz uma lista em que os funcionários com mesmo salário aparecem em ordem alfabética. 268

269 Objetivos e Caracterizações Classificação dos métodos de ordenação, quanto à localização das chaves a serem ordenadas. 1. Ordenação Interna Número de registros a serem ordenados é pequeno o bastante para que todo o processo se desenvolva na memória interna. 2. Ordenação Externa Arquivo a ser ordenado não cabe na memória principal e, por isso, tem que ser armazenado em fita ou disco (memória secundária).

Objetivos e Caracterizações Principais Diferenças entre os Dois Métodos Na ordenação interna, qualquer registro pode ser imediatamente acessado. Os dados são organizados na forma de vetores, onde cada dado e "visível". Exemplo: 2 5 7 1 9 4 8 0 Na ordenação externa, os registros são acessados sequencialmente ou em grandes blocos. Os dados são organizados em arquivos, onde em cada arquivo apenas o dado de cima e visível. 270

271 Objetivos e Caracterizações Classificação dos Métodos de Ordenação 1. Ordenação Interna (a) Métodos Simples ou Diretos i. Ordenação por Troca (Permutação) ou Bubblesort / Shakersort ii. Ordenação por Seleção iii. Ordenação por Inserção (b) Métodos Eficientes ou Avançados i. Ordenação por particionamento ou Quicksort ii. Ordenação por inserção através de incrementos decrescentes ou Shellsort

Objetivos e Caracterizações Classificação dos Métodos de Ordenação 1. Ordenação Interna (b) Métodos Eficientes ou Avançados (continuação) iii. Ordenação por intercalação ou Mergesort iv. Ordenação de árvores ou Heapsort 2. Ordenação Externa (a) Mergesort 272

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

Classificação por Troca - bubble sort A idéia básica por trás do bubble sort é percorrer a lista de chaves sequencialmente 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 exemplo a seguir. 274

Classificação por Troca - bubble sort 25 57 48 37 12 92 86 33 Na primeira passagem as seguintes comparações são feitas: 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 275

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 276

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

278 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;

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

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

281 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²)

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, na linguagem C, que implemente este método. 282

283 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;

284 } 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);

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

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) tem a mesma complexidade que o bubble sort. 286