Algoritmos de Ordenação em LISP

Documentos relacionados
Bubble Sort. Tempo total O(n 2 )

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

Algoritmo de Dijkstra em LISP

Análise e Complexidade de Algoritmos

Projeto e Análise de Algoritmos

ALGORITMOS DE ORDENAÇÃO

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Ordenação e Pesquisa

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

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

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

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

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

Resolução de 8-Puzzle com A* em LISP

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

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

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2009/2010

Estrutura de Dados. Diego Silveira Costa Nascimento

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

Algoritmos de Ordenação

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos

Algoritmos de ordenação

Algoritmo MergeSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

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

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

Ordenação de Dados (IV) MergeSort

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

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

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

Ordenação de Vectores

Capacitação em Linguagem C Parte 2

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

BCC202 - Estrutura de Dados I

Algoritmos de Ordenação

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

Algoritmos de Ordenação: MergeSort

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

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

Métodos de Ordenação

6. Pesquisa e Ordenação

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

Pedro Ribeiro 2014/2015

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

Análise empírica de algoritmos de ordenaçã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

Técnicas de Desenho de Algoritmos

Métodos de Ordenação Parte 2

Ordenação. Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho BCC402 Aula 04 Algoritmos e Programação Avançada

Linguagem C: Ordenação

Estruturas de Dados Algoritmos de Ordenação

CIC 110 Análise e Projeto de Algoritmos I

Algoritmos de Ordenação

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

Ordenação em Tempo Linear

Algoritmos de Ordenação: QuickSort

Análise e Complexidade de 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

Análise e Síntese de Algoritmos

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

Algoritmos e Estruturas de Dados: Ordenação

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

Algoritmos e Estruturas de Dados. Décima sexta aula: Quicksort

Métodos de Ordenação Parte 3

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

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

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

ESTRUTURA DE DADOS I AULA I

INF 1007 Programação II

Análise de Complexidade para algoritmos iterativos e recursivos

5. Algoritmos de Ordenação

Algoritmos de Ordenação

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

Inteligência Artificial

Estruturas de Dados Aula 14: Recursão

Estruturas de Dados Aula 14: Recursão 19/05/2011

Solução de Recorrências

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

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

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Projeto e Análise de Algoritmos

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

Carlos Eduardo Batista. Centro de Informática - UFPB

Algoritmos de Pesquisa e Ordenação em Vectores

AULA 19 AULA 20. Ordenação: algoritmo Quicksort. Resumo. Melhores momentos

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim

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

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

Especificação do trabalho T2

Introdução à Programação Funcional. Conteúdo

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

Introdução à Programação Funcional

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

Estrutura de Dados Conceitos Iniciais

Transcrição:

Algoritmos de Ordenação em LISP Léo Willian Kölln 8 de Agosto de 2006 Curso de Ciências da Computação Programação Funcional - INE5363 INE - Departamento de Informática e Estatística CTC - Centro Tecnológico UFSC - Universidade Federal de Santa Catarina 1

1 Bubble Sort O Bubble Sort, ou ordenação por utuação (literalmente "por bolha", é um algoritmo de ordenação dos mais simples. A idéia é percorrer o vetor diversas vezes, a cada passagem fazendo utuar para o topo o menor elemento da seqüência. Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo. A complexidade desse algoritmo é de Ordem quadrática (n 2. Por isso, ele não é recomendado para programas que precisem de velocidade e operem com quantidade elevada de dados. O algoritmo pode ser descrito em pseudocódigo como segue abaixo. A é um Vetor de elementos que podem ser comparados e n é o tamanho desse vetor. 1.1 Pseudocódigo function bubblesort (A : list[1..n] { var int i, j; for i from n downto 1 { for j from 1 to i-1 { if (A[j] > A[j+1] swap(a[j], A[j+1] 1.2 Implementação do Bubble Sort em LISP ; Função para Trocar dados de posição em um Array (defun LKSwap (lista i j (setq tmp (aref lista i (setf (aref lista i (aref lista j (setf (aref lista j tmp ; Implementação do Bubble Sort em LISP (defun LKBubbleSort (lista (do ((i (length lista (- i 1 ((= i 0 (do ((j 0 (+ j 1 ((= j (- i 1 (if (> (aref lista j (aref lista (+ j 1 (LKSwap lista j (+ j 1 1

2 Merge Sort O Merge Sort, ou ordenação por mistura, é um exemplo de algoritmo de ordenação do tipo dividir-para-conquistar. Sua idéia básica é que é muito fácil criar uma seqüência ordenada a partir de duas outras também ordenadas. Para isso, ele divide a seqüência original em pares de dados, ordena-as; depois as agrupa em seqüências de quatro elementos, e assim por diante, até ter toda a seqüência dividida em apenas duas partes. Os três passos úteis dos algoritmos dividir-para-conquistar, ou "divide and conquer", que se aplicam ao merge sort são: 1. Dividir: Dividir os dados em subseqüências pequenas 2. Conquistar: Classicar as duas metades recursivamente aplicando o merge sort 3. Combinar: Juntar as duas metades em um único conjunto já classicado 2.1 Pseudocódigo function mergesort(m var list left, right if length(m = 1 return m else middle = length(m / 2 for each x in m up to middle add x to left for each x in m after middle add x to right left = mergesort(left right = mergesort(right result = merge(left, right return result 2.2 Implementação do Merge Sort em LISP ; Função recursiva do Algoritmo (defun mergesort (lista (if (minimo lista lista (juntalistas (mergesort (MetadeEsquerda lista ; Metade da esquerda (mergesort (metadedireita lista ; Metade da direita ; Define de a lista já é mínima ou não (defun minimo (lista 2

(or (eq (length lista 0 (eq (length lista 1 ; Função para a metade Direita (defun metadedireita (lista (last lista (ceiling (/ (length lista 2 ; Função para a metade Esquerda (defun MetadeEsquerda (lista (ldiff lista (metadedireita lista ; Função para junção das Listas (defun juntalistas (lista1 lista2 (merge 'list lista1 lista2 #'< 3 Quick Sort O algoritmo Quick Sort é um método de ordenação muito rápido e eciente, inventado por C.A.R. Hoare em 1960, quando visitou a Universidade de Moscou como estudante. Foi publicado em 1962 após uma série de renamentos. Sua premissa básica é dividir o problema de ordenar n itens em dois problemas menores. Em seguida, os problemas menores são ordenados de forma independente e os resultados são combinados para produzir a solução do problema todo. 3.1 Pseudocódigo function quicksort(q var list less, pivotlist, greater if length(q = 1 return q select a pivot value pivot from q for each x in q except the pivot element if x < pivot then add x to less if x = pivot then add x to greater add pivot to pivotlist return concatenate(quicksort(less, pivotlist, quicksort(greater 3.2 Implementação do Quick Sort em LISP ; Função de Quick-Sort (defun quicksort (lista (let* 3

( (listadupla nil (esquerda nil (direita nil (esquerdaordenada nil (direitaordenada nil (cond ((null lista nil (t (setq listadupla (partition (car lista (cdr lista (setq esquerda (car listadupla (setq direita (cdr listadupla (setq esquerdaordenada (qs esquerda (setq direitaordenada (qs direita (append esquerdaordenada (cons (car lista direitaordenada Referências [1] Wikipedia, Bubble Sort - http://en.wikipedia.org/wiki/bubble_sort [2] Wikipedia, Merge Sort - http://en.wikipedia.org/wiki/merge_sort [3] Wikipedia, Quick Sort - http://en.wikipedia.org/wiki/quicksort [4] Jason Harrison, Sorting Algorithms - http://www.cs.ubc.ca/spider/harrison/java/sorting-demo.html [5] Paulo Feolo, Projeto de Algoritmos - http://www.ime.usp.br/ pf/algoritmos/aulas/quick.html [6] Sorting Algorithms - http://c2.com/cgi/wiki?sortingalgorithms [7] NIST, Sort - http://www.nist.gov/dads/html/sort.html [8] Eugene Jitomirsky, The QuickSort Algorithm - http://www.mycsresource.net/articles/programming/sorting_algos/quicksort 4