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

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

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

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

Teoria da Computação Aula 8 Noções de Complexidade

Métodos de Ordenação Parte 4

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

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

Teoria da Computação Aula 9 Noções de Complexidade

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

ALGORITMOS DE ORDENAÇÃO

Projeto e Análise de Algoritmos

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

BCC202 - Estrutura de Dados I

Introdução à Ciência da Computação II

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

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

Ordenação. Prof. Jonas Potros

Projeto e Análise de Algoritmos

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

Algoritmos de Ordenação

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Universidade Federal de Alfenas

Algoritmos e Estruturas de Dados

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

Algoritmos de Ordenação: Tempo Linear

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO EM TEMPO LINEAR

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

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

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

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

A IMPORTÂNCIA DE THREADS NO DESEMPENHO DE APLICAÇÕES

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

Métodos de Ordenação

BCC202 - Estrutura de Dados I

Hashing Endereçamento Direto Tabelas Hash

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

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

Ordenação em Tempo Linear

Estruturas de Dados 2

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

2 Versão 1: Funcionalidade Básica e Interface Web

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

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

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

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

Algoritmos e Estrutura de Dados

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

BCC202 - Estrutura de Dados I

Especificação do Trabalho Prático

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Linguagem C vetores multidimensionais

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Estruturas de Dados 2

2º/3º Ciência da Computação (CC)

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

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

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

DESENVOLVIMENTO DE UM SOFTWARE DE GERAÇÃO E VISUALIZAÇÃO DE NANOESTRUTURAS

SCC-201 Introdução à Ciência de Computação II

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

Segunda Parte do Trabalho Prático (Parte II) Valor: 70%

Programação Orientada a Objetos

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

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

AULA 13. Algoritmos p.526/582

Primeira Parte do Trabalho Prático (Parte I) Valor: 30% Descrição do arquivo de dados

Complexidade de Algoritmos

Análise e Complexidade de Algoritmos

Reunião de boas vindas

VISEDU-CG: Aplicação Didática para Visualizar Material Educacional, Módulo de Computação Gráfica

Mineração de Dados em Biologia Molecular

FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1

Classes, Herança e Interfaces

Análise de algoritmos

Porque usar um montador? Formato de uma linha de código fonte:

Quinto Trabalho Prático. Este trabalho tem como objetivo indexar arquivos de dados usando um índice árvore-b.

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

Comportamento assintótico

INF 1007 Programação II

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;

Quarto Trabalho Prático. Este trabalho tem como objetivo indexar arquivos de dados usando um índice simples ou linear. Descrição de páginas de disco

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

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

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

Diário de Bordo Projeto Tabla Periódica Digital Interativa

Comparando, Distribuindo e Ordenando

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

Pra início de conversa... O que é um algoritmo? Exemplos de algoritmos. Como podemos descrever algoritmos? Como podemos descrever algoritmos?

15/03/2018. Professor Ariel da Silva Dias Algoritmo e Contagem de Instruções. Prof. Ariel da Silva Dias -

5. Algoritmos de Ordenação

Complexidade de Tempo e Espaço

IGED: Um Ambiente para Ensino de Estruturas de Dados com Análise Automática de Complexidade de Algoritmos

CIC 110 Análise e Projeto de Algoritmos I

Victor Hugo Andrade Soares monitor João Vitor dos Santos Tristão Primeiro Trabalho Prático

Teoria dos Grafos Aula 7

Transcrição:

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA Simulador didático de testes de algoritmos de ordenação Nomes: Bruno Silva Guedes (159033) Matheus de Carvalho Proença (160184) Turma: C Professor: José Valdeni de Lima INF 01124 Classificação e Pesquisa de Dados Porto Alegre, Julho de 2008

1. Resumo O aprendizado e a compreensão de como funcionam os algoritmos básicos de classificação de dados é fundamental para o estudante da área da Computação. Este projeto oferece a futuros alunos uma ferramenta que auxilie e facilite este aprendizado. O projeto consiste na criação e elaboração de um software que permite ao aluno analisar e comparar o funcionamento e o desempenho de oito algoritmos clássicos de ordenamento. 2. Introdução O projeto implementado em nosso trabalho é um software, de fácil uso e com várias ferramentas, que permite ao aluno modelar e analisar o comportamento de algoritmos de ordenação em diversas situações. A idéia é que o usuário possa manipular, por exemplo, a quantidade de dados a ser ordenado e o intervalo das chaves (supondo que sejam valores inteiros). Além disso, o usuário deverá comparar os diversos algoritmos de classificação por desempenho em relação a tempo, número de comparações, número de trocas, etc. Implementamos os seguintes algoritmos de ordenação: Bubble Sort, Selection Sort, Insertion Sort, Heap Sort, Merge Sort, Quick Sort, Counting Sort e Radix Sort. Note que podemos dividir os algoritmos em 3 classes, conforme sua complexidade temporal: - Algoritmos de tempo de execução O(n²) Bubble, Selection e Insertion - Algoritmos de tempo de execução O(lg n) Heap, Merge e Quick - Algoritmos de tempo de execução O(n) Counting e Radix. Exibiremos gráficos mostrando diversas características dos algoritmos de ordenação dependendo do número de chaves (número de comparações, número de trocas, tempo de execução, etc).

3. Implementação Primeiramente, implementamos os oito algoritmos de classificação na linguagem C++. Para verificação de erros e pela linguagem, era mais fácil implementar os algoritmos em C++ primeiro e convertê-los para Java em seguida. Para elaborar os oito algoritmos, fizemos uso do conhecimento adquirido ao longo das aulas e com auxílio de livros e de sites da Internet. Bubble Sort, Selection Sort, Insertion Sort, Counting Sort e Quick Sort possuem implementação trivial. Não tivemos nenhum problema com eles. Com o Radix Sort, era preciso utilizar um método estável para classificar o vetor segundo um dígito qualquer do número. Para isso, usamos Selection Sort. Para retornar o dígito de um número, foi preciso desenvolver uma função que retornasse um dígito d de um certo número n. Essa função teve que ser desenvolvida do zero, e nos custou algum tempo até que a acertassemos. O Merge Sort e o Heap Sort apresentavam problemas devido à recursão. Foi demorado para obter um algoritmo consistente, isto é, que funcionasse em todos os casos. Para obter a solução ideal, tivemos que recorrer a alguns livros e sites das Referências do projeto. A conversão dos algoritmos de C++ para Java não é difícil. O que foi difícil foi criar uma classe em Java que interpretasse os valores recebidos dos arquivos de classificação para os gráficos que queriamos plotar. Para isso, foi necessário criar uma classe que abstraísse ao máximo a implementação dos gráficos. Ela acabou sendo usada tanto para a análise de ordenação quanto para o relatório. Também houve dificuldades em manipular as janelas graficamente com Java, por que os gráficos eram gerados em janelas separadas pelo JFreeChart. Conseguimos manipular a geração das janelas e fazer com que o fechamento de uma não encerrasse o programa. A interface gráfica foi de fácil aplicação, graças aos poderosos recursos do NetBeans IDE 6.1. Por causa dessa ferramenta, foi possível implementar inúmeras funcionalidades extras ao nosso programa.

4. Utilizando o Programa 4.1. Especificações Algumas limitações são naturalmente impostas ao programa, principalmente no que se refere ao tempo de execução dos algoritmos de ordenação. As seguintes especificações são fixadas: BUBBLE SORT e RADIX SORT Resolução máxima: 50 Número máximo de chaves: 5000 INSERTION SORT e SELECTION SORT Resolução máxima: 100 Número máximo de chaves: 5000 QUICK SORT, MERGE SORT, HEAP SORT e COUNTING SORT Resolução máxima: 1000 Número máximo de chaves: 50000 Nota-se que, apesar do algoritmo Radix Sort ter um desempenho teoricamente igual a O(n), ele depende do desempenho do vetor de ordenação a cada passada. Na prática, ele tem desempenho pior que o Bubble Sort, por ser um Selection Sort multiplicado por uma constante (igual ao número de dígitos do maior elemento). 4.2. Modo de Análise (adaptado da Ajuda do programa) A análise de ordenação permite ao usuário comparar, de forma gráfica, a performance dos diversos algoritmos de classificação ao longo do tempo, por número de trocas ou por número de comparações. O usuário deve selecionar os algoritmos de ordenação desejados na caixa de seleção. Ele também pode escolher o número de chaves desejadas e o intervalo no qual estas chaves variam (sempre números inteiros positivos). No campo Resolução, deve ser informado quantas vezes o programa deve calcular os pares ordenados correspondentes a cada algoritmo. Para algoritmos de ordem O(n²) como o Bubble Sort, se este número for muito grande, o programa poderá demorar para executar estes cálculos.

Para os casos dos gráficos "ideais" (O(n²), O(n lg n) e O(n)), o gráfico pode ser multiplicado por uma constante para que seja possível visualizar a aproximação dos gráficos ideais com os gráficos dos algoritmos. Para isso, é possível informar no campo correspondente do gráfico ideal uma constante POSITIVA diferente de 1 (tal como 2 para duplicar a amplitude do gráfico ou 0.5 para reduzir a amplitude à metade). Por fim, há ainda a opção Exibir, que define qual será o eixo das ordenadas (o eixo das abscissas é fixo como sendo o número de chaves). As opções são tempo de execução, número de trocas e número de comparações. 4.3. Relatório (adaptado da Ajuda do programa) O relatório serve para obter dados relativos a uma análise textual do desempenho dos algoritmos. Para executar a análise por relatório, basta selecionar os métodos de organização desejados e também quais grandezas deverão ser exibidas. Esta simulação pode demorar vários minutos, pois são executadas medidas com até dez mil chaves. Os resultados serão exibidos na Janela de Relatório. O último relatório pode ser acessado a partir de Ferramentas -> Exibir último relatório (ou pelo atalho F3). 5. Material do Software Todo o material do software está disponível no seguinte endereço: www.inf.ufrgs.br/~bsguedes/simulador/ Neste endereço, estão disponíveis: 5.1. Dados do Grupo 5.2. Documentação 5.3. Executável do Software 5.4. Slides do PowerPoint 5.5. Código Fonte 5.6. Ferramentas de Desenvolvimento 5.7. Referências Bibliográficas

6. Referências Bibliográficas Livros consultados: Azeredo, P.A. Métodos de Classificação de Dados e análise de suas complexidades. Rio de Janeiro, Campus, 1996. Santos, C.L.; Azeredo, P.A. Tabelas: organização e pesquisa. Porto Alegre, Sagra-Luzzatto, 2001. Horstmann, C.S. Big Java 2nd edition. Hoboken, John Wiley & Sons, 2006. Drozdek, A. Estruturas de Dados e Algoritmos em C++. São Paulo, Thomson Learning, 2002. Websites: JFreeChart: www.jfree.org/jfreechart/ Docs Java API: http://java.sun.com/j2se/1.5.0/docs/api/ Wikipedia Merge Sort: http://en.wikipedia.org/wiki/merge_sort Wikipedia Heap Sort: http://en.wikipedia.org/wiki/heapsort