Projeto e Análise. Aula 1: Algoritmos de Ordenação Prof. Carlos

Documentos relacionados
3.3 Ordenação por Heap (Heapsort)

Métodos de Ordenação Parte 1

Métodos de Ordenação Parte 1

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Ordenação por Partição (Quick Sort)

Classificação e Pesquisa de Dados

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

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Algoritmos e Estrutura de Dados

Bubble Sort. Tempo total O(n 2 )

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

Processamento Cosequencial: Ordenação Interna e Externa. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira Cristina D. A.

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

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

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

INF 1010 Estruturas de Dados Avançadas

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

BCC202 - Estrutura de Dados I

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

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

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

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

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

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

22/8/2010 COMPLEXIDADE DE ALGORITMOS CES para os numeradores e 1 para o denominador. Noções de complexidade de algoritmos

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;

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

Algoritmos de Pesquisa e Ordenação em Vectores

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

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

Ordenação Interna. Prof. Jonas Potros

INF 1010 Estruturas de Dados Avançadas

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

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

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

Ordenação em Tempo Linear

Métodos de Ordenação Parte 3

Algoritmos de ordenação Heapsort

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

CES-11. Algoritmos e Estruturas de Dados. Representação. A estrutura heap. Heap é uma árvore binária com duas propriedades:

Análise de Algoritmos Algoritmos de Ordenação

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

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

Algoritmos de Ordenação: Cota Inferior

Análise e Complexidade de Algoritmos

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

Linguagem C: Ordenação

3 Algoritmos propostos

Ordenação de Dados (IV) MergeSort

Estruturas de Dados Algoritmos de Ordenação

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

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

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

Disciplina de Estrutura de Dados. Algorítmos de Classificação; Métodos de Pesquisa; Arquivos.

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

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

INF 1010 Estruturas de Dados Avançadas

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

Algoritmos de ordenação

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

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

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

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

Heapsort ordenação por árvore de seleção

ALGORITMOS DE ORDENAÇÃO

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

Métodos de Classificação

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

Heapsort ordenação por árvore de seleção

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

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

Estruturas de Dados 2

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

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

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

Algoritmos de Ordenação em LISP

Projeto e Análise de Algoritmos

Ordenação e Busca em Arquivos

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

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

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

Ordenação. Prof. Jonas Potros

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

Estrutura de Dados. Diego Silveira Costa Nascimento

Análise de algoritmos

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

Métodos de Ordenação

Algoritmos e Estruturas de Dados 2006/2007

Métodos de Ordenação Parte 4

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

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

Algoritmos. para concursos. Questões comentadas

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

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Algoritmos de Ordenação: Tempo Linear

Transcrição:

Proeto e Análse de Algortmos Aula 1: Algortmos de Ordenação Prof. Carlos de Salles Terças-feras, 8h20 às 11h10

Algortmos de Ordenação Insertsort Mergesort Heapsort Qucksort

Algortmos de Ordenação Dado um vetor v com N elementos, a ordenação consste em organzar todos esses N elementos em uma ordem (não-crescente, não-decrescente etc) Exemplo: v = {1, 9, 8, 5, 3, 7, 4} Depos de ordenado de forma não-decrescente, v fca: v = {1, 3, 4, 5, 7, 8, 9}

Insert Sort Outros nomes: Bubble sort Selecton sort Conste em posconar o menor ou o maor elemento em seu lugar correto N vezes consecutvas

Insert Sort for =1,N do end for =+1,N do end f v[]>v[] end v[],v[] then = v[],v[]

Insert Sort 1 9 8 5 3 7 4

Insert Sort 1 9 8 5 3 7 4

Insert Sort 1 9 8 5 3 7 4

Insert Sort 1 9 8 5 3 7 4

Insert Sort 1 9 8 5 3 7 4

Insert Sort 1 9 8 5 3 7 4

Insert Sort 1 9 8 5 3 7 4

Insert Sort 1 8 9 5 3 7 4

Insert Sort 1 5 9 8 3 7 4

Insert Sort 1 3 9 8 5 7 4

Insert Sort 1 3 9 8 5 7 4

Insert Sort 1 3 9 8 5 7 4

Insert Sort 1 3 8 9 5 7 4

Insert Sort 1 3 5 9 8 7 4

Insert Sort 1 3 5 9 8 7 4

Insert Sort 1 3 4 9 8 7 5

Insert Sort 1 3 4 8 9 7 5

Insert Sort 1 3 4 7 9 8 5

Insert Sort 1 3 4 5 9 8 7

Insert Sort 1 3 4 5 8 9 7

Insert Sort 1 3 4 5 7 9 8

Insert Sort 1 3 4 5 7 8 9

Insert Sort 1 3 4 5 7 8 9 Número de operações: (N-1) + (N-2) + (N-3) + + 3 + 2 + 1 N*(N-1) 2

Insert Sort Idea: Se o vetor á estver ordenado em alguma nteração, sera nteressante detectar sso e parar o algortmo. Como detecto se um vetor está ordenado? ordenado = true for =1,N do f v[]>v[+1] then ordenado = false end end

Insert Sort (melhora) for =N,2,-1 do trocas = false for =1,-1 do f v[]>v[+1] then v[],v[+1] = v[ [+1],v[] trocas = true end end f not trocas then break end end

Insert Sort (melhora) 1 9 8 5 3 7 4

Insert Sort (melhora) 1 9 8 5 3 7 4

Insert Sort (melhora) 1 8 9 5 3 7 4

Insert Sort (melhora) 1 8 5 9 3 7 4

Insert Sort (melhora) 1 8 5 3 9 7 4

Insert Sort (melhora) 1 8 5 3 7 9 4

Insert Sort (melhora) 1 8 5 3 7 4 9

Insert Sort (melhora) 1 8 5 3 7 4 9

Insert Sort (melhora) 1 5 8 3 7 4 9

Insert Sort (melhora) 1 5 3 8 7 4 9

Insert Sort (melhora) 1 5 3 7 8 4 9

Insert Sort (melhora) 1 5 3 7 4 8 9

Insert Sort (melhora) 1 5 3 7 4 8 9

Insert Sort (melhora) 1 3 5 7 4 8 9

Insert Sort (melhora) 1 3 5 7 4 8 9

Insert Sort (melhora) 1 3 5 4 7 8 9

Insert Sort (melhora) 1 3 5 4 7 8 9

Insert Sort (melhora) 1 3 5 4 7 8 9

Insert Sort (melhora) 1 3 4 5 7 8 9

Insert Sort (melhora) 1 3 4 5 7 8 9

Insert Sort (melhora) 1 3 4 5 7 8 9

Mergesort Ordena ncalmente sub-vetores de tamanho 1 ou 2 e recursvamente dobra esse tamanho até ordenar o vetor total de tamanho N Basea-se no merge de dos vetores ordenados

Merge de dos vetores ordenados Dados dos vetores V1 e V2, á ordenados, o merge cra um outro vetor V ordenado com os elementos de V1 e V2 local,,k = 1,1,1 for k=1,#v1+#v2 do f >#v2 then v[k]=v1[] ]; =+1 else f >#v1 then v[k]= =v2[]; =+1 else f v1[]<=v2[] then v[k]=v1[]; =+1 else v[k]=v2[]; =+1 end end

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 V= 1 3 k

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 V= 1 3 5 k

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 V= 1 3 5 7 k

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1 3 5 7 7

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1 3 5 7 7 8

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1 3 5 7 7 8 11

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1 3 5 7 7 8 11 13

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1 3 5 7 7 8 11 13 18

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1 3 5 7 7 8 11 13 18 20

Merge de dos vetores V1= 1 3 7 18 20 V2= 5 7 8 11 13 k V= 1 3 5 7 7 8 11 13 18 20

Mergesort 1 9 8 5 3 7 4

Mergesort 1 9 8 5 3 7 4 1 9 8 5 3 7 4

Mergesort 1 9 8 5 3 7 4 1 9 8 5 3 7 4 1 9 8 5

Mergesort 1 9 8 5 3 7 4 1 9 8 5 3 7 4 1 9 5 8

Mergesort 1 9 8 5 3 7 4 1 5 8 9 3 7 4

Mergesort 1 9 8 5 3 7 4 1 5 8 9 3 7 4

Mergesort 1 9 8 5 3 7 4 1 5 8 9 3 7 4 3 7 4

Mergesort 1 9 8 5 3 7 4 1 5 8 9 3 7 4 3 7 4

Mergesort 1 9 8 5 3 7 4 1 5 8 9 3 4 7

Mergesort 1 3 4 5 7 8 9

Mergesort - operações 1 9 8 5 3 7 4 1 9 8 5 1 9 8 5 3 7 4 3 7 4

Mergesort - operações 1 9 8 5 3 7 4 1 9 8 5 1 9 8 5 3 7 4 3 7 4 log 2 N níves N operações em cada nível Total de operações: N * log 2 N

Heapsort Ordenação baseada na estrutura de dados heap A heap é um vetor que pode ser vsto como uma árvore bnára completa Cada nó da árvore equvale a um valor no vetor

Prmtvas da Heap length(v) número de elementos no vetor V heap-sze(v) número de elementos da heap armazenados no vetor V

Vetor Heap prmtvas de árvore parent() return /2 left() return 2 rght() return 2+1

Heap comoo um vetor 1 9 8 5 3 7 4 1 9 8 5 3 7 4

Propredade da Heap Para cada nó que não sea a raz, então: V[ parent() ] >= V[] Exemplo: 9 5 8 1 3 7 4

Prmtva Heapfy Função para manter a propredade da heap functon heapfy(v, ) l = left() r = rght() f l<=heap-sze(v) and V[l] ]>V[] then largest = l else largest = end f r<=heap-sze(v) and V[r] ]>V[largest] then largest=r end f largest!= then V[], V[largest] = V[ [largest], V[] heapfy(v, largest) end end

Construndoo uma Heap Prmtva que constró uma heap a partr de um vetor de N elementos functon buld_heap(v) heap-sze(v) = length(v) -- #V for =length(v)/ /2,1,-1 do heapfy(v,) end end

Construndoo uma Heap 1 9 8 5 3 7 4 1 9 8 heapfy 5 3 7 4

Construndoo uma Heap 1 9 8 5 3 7 4 1 heapfy 9 8 5 3 7 4

Construndoo uma Heap 1 9 8 5 3 7 4 9 1 heapfy 8 5 3 7 4

Construndoo uma Heap 9 1 8 5 3 7 4 9 heapfy 1 8 5 3 7 4

Construndoo uma Heap 9 5 8 1 3 7 4 9 5 8 heapfy 1 3 7 4

Construndoo uma Heap 9 5 8 1 3 7 4 9 5 8 1 3 7 4

Heapsort functon heapsort(v) for =length(v),,2,-1 do V[1], V[] = V[], V[1] heap-sze(v V) = heap-sze(v)- 1 heapfy(v,1) end end

Heapsort 9 5 8 1 3 7 4 9 5 1 3 8 7 4

Heapsort 4 5 8 1 3 7 9 4 heapfy 5 1 3 8 7 9

Heapsort 8 5 4 1 3 7 9 8 5 1 3 4 7 9 heapfy

Heapsort 8 5 7 1 3 4 9 8 5 1 3 7 4 9 heapfy

Heapsort 8 5 7 1 3 4 9 8 5 7 1 3 4 9

Heapsort 4 5 7 1 3 8 9 4 heapfy 5 7 1 3 8 9

Heapsort 7 5 4 1 3 8 9 7 5 4 heapfy 1 3 8 9

Heapsort 7 5 4 1 3 8 9 7 5 1 3 4 8 9

Heapsort 3 5 4 1 7 8 9 3 heapfy 5 1 7 4 8 9

Heapsort 5 3 4 1 7 8 9 5 heapfy 3 4 1 7 8 9

Heapsort 5 3 4 1 7 8 9 5 3 4 1 7 8 9

Heapsort 1 3 4 5 7 8 9 1 heapfy 3 4 5 7 8 9

Heapsort 4 3 1 5 7 8 9 4 3 1 heapfy 5 7 8 9

Heapsort 4 3 1 5 7 8 9 3 4 1 5 7 8 9

Heapsort 1 3 4 5 7 8 9 3 5 7 1 heapfy 4 8 9

Heapsort 3 1 4 5 7 8 9 heapfy 1 3 4 5 7 8 9

Heapsort 3 1 4 5 7 8 9 1 3 4 5 7 8 9

Heapsort 1 3 4 5 7 8 9 3 5 7 1 heapfy 4 8 9

Heapsort 1 3 4 5 7 8 9 1 3 4 5 7 8 9

Operações do Heapsort 1 3 4 5 7 8 9 1 3 4 log 2 N 5 7 8 9 N-1 ( vara de 1 a N-1) (heapfy depende da altura da heap)

Operações do Heapsort 1 3 4 5 7 8 9 Total de operações: (N-1) * log 2 N 3 1 4 log 2 N 5 7 8 9 N-1 ( vara de 1 a N-1) (heapfy depende da altura da heap)

Qucksort Ordena o vetor partconando recursvamente A cada teração, localza a posção fnal de um elemento aleatóro (pvô) e subdvde o vetor em duas partes para pr rossegur a ordenação

Partção Localza a posção fnal do pvô (um elemento aleatóro do vetor) e dvde o vetor em duas partes, garantndo: Todos os elementos à esquerda do pvô são menores ou guas a ele Todos os elementos à dreta do pvô são maores que ele

Partção functon partton(v, left, rght) pvot = V[left] = left-1 = rght+1 whle true do repeat =-1 untl V[]<=pvot repeat =+1 unt tl V[]>=pvot f < then V[], V[] = V[], V[] else return end end end

Qucksort functon qucksort(v, left, rght) f left<rght then mddle = partton(v, left, rght) qucksort(v, left, mddle) qucksort(v, mddle+1, rght) end end

Qucksort - qucksort(1,7) 5 9 8 1 3 7 4 1 2 3 4 5 6 7

Qucksort - partton(1,7) 5 9 8 1 3 7 4

Qucksort - partton(1,7) 5 9 8 1 3 7 4 untl V[ []<=5?

Qucksort - partton(1,7) 5 9 8 1 3 7 4 untl V[] ]>=5?

Qucksort - partton(1,7) 4 9 8 1 3 7 5 V[], V[] = V[], V[]

Qucksort - partton(1,7) 4 9 8 1 3 7 5 untl V[ []<=5?

Qucksort - partton(1,7) 4 9 8 1 3 7 5 untl V[ []<=5?

Qucksort - partton(1,7) 4 9 8 1 3 7 5 untl V[ []>=5?

Qucksort - partton(1,7) 4 3 8 1 9 7 5 V[], V[] = V[], V[]

Qucksort - partton(1,7) 4 3 8 1 9 7 5 untl V[ []<=5?

Qucksort - partton(1,7) 4 3 8 1 9 7 5 untl V[ []>=5?

Qucksort - partton(1,7) 4 3 1 8 9 7 5 V[], V[] = V[], V[]

Qucksort - partton(1,7) 4 3 1 8 9 7 5 untl V[ []<=5?

Qucksort - partton(1,7) 4 3 1 8 9 7 5 untl V[ []>=5?

Qucksort - qucksort(1,7) 4 3 1 8 9 7 5 mddle 4 3 1 qucksort(1,3) 8 9 7 5 qucksort(4,7)

Qucksort - qucksort(1,3) 4 3 1 1 2 3

Qucksort - partton(1,3) 4 3 1

Qucksort - partton(1,3) 4 3 1 untl V[ []<=4?

Qucksort - partton(1,3) 4 3 1 untl V[ []>=4?

Qucksort - partton(1,3) 1 3 4 V[], V[] = V[], V[]

Qucksort - partton(1,3) 1 3 4 untl V[ []<=4?

Qucksort - partton(1,3) 1 3 4 untl V[ []>=4?

Qucksort - partton(1,3) 1 3 4 untl V[ []>=4?

Qucksort - partton(1,3) 1 3 4 mddle