Classificação e Pesquisa de Dados

Slides:



Advertisements
Apresentações semelhantes
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Advertisements

AULA 8 Profa. Sandra de Amo GBC053 – BCC
Exercícios PAA- Grafos
UNIVERSIDADE LUTERANA DO BRASIL COMUNIDADE EVANGÉLICA LUTERANA SÃO PAULO Reconhecida pela Portaria Ministerial nº 681 de 07/12/89 – DOU de 11/12/89 Campus.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Bulk Loading – Algoritmo AULA 12 - COMPLEMENTO Profa. Sandra de Amo GBC053 – BCC Sandra de Amo.
Indices estruturados por B-TREE
Série de Exercícios.
Instituto de Computação - UFF Detecção de Terminação Algoritmos Distribuídos Professora: Lúcia Drummond.
Árvore Binária de Busca
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Algoritmos Distribuídos Professora: Lúcia Drummond
Árvores.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.

Arquivos Seqüenciais Inhaúma Neves Ferraz
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
SEMINÁRIO DE ALGORITMOS
Árvore Geradora de Peso Mínimo
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Classificação (Ordenação) de dados
Árvores Balanceadas (AVL)
Métodos de Classificação por Seleção: HeapSort
Método de Ordenação: InsertionSort
Métodos de Classificação por Seleção
Listas Encadeadas.
Revisão da Linguagem C.
Indexação de Arquivos Página de rosto.
Campus de Caraguatatuba
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Análise Semântica e Representação Intermédia
Heaps de Fibonacci Lino Alves.
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Exercícios PAA- Grafos
INF 1010 Estruturas de Dados Avançadas
Salas de Matemática.
Árvore de Pesquisa Memória Secundária Engenharia de Computação - UFG.
Algorítmos e estrutura de dados III
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Conceitos de Lógica Digital
Introdução e Busca Cega
Rotação Simples e Dupla Katia Guimarães
Katia S. Guimarães Heaps Katia S. Guimarães
Katia S. Guimarães Heapsort Katia S. Guimarães
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
Fundamentos de Programação
Ordenação de Dados (III)
Ceça Moraes – Introdução à Programação SI1
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.
Árvore Binária de Busca
Análise de Complexidade do Algoritmo de Dijkstra
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos.
DCC 001 Programação de Computadores 2º Semestre de 2011
CLASSIFICAÇÃO DE DADOS
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Heaps Katia S. Guimarães
Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.
USP – ICMC – SSC SSC0300 2º Semestre 2015
Classificação (Ordenação) de dados. Roteiro Contextualização e definições sobre Classificação Métodos de Classificação de Dados.
Ordenação: Terminologia
Transcrição da apresentação:

Classificação e Pesquisa de Dados Aulas 7 e 8 Classificação de dados por Seleção: Seleção Direta e Heapsort UFRGS INF01124

Classificação por Seleção Caracteriza-se por identificar, a cada iteração, a chave de menor (maior) valor na porção do vetor ainda não ordenada e colocá-la em sua posição definitiva Principais Algoritmos Seleção Direta Heapsort

Princípio de classificação Seleção Direta Princípio de classificação A seleção da menor chave é feita por pesquisa seqüencial A menor chave encontrada é permutada com a que ocupa a posição inicial do vetor, que fica reduzido de um elemento O processo de seleção é repetido para o restante do vetor, até que todas as chaves alcancem suas posições definitivas

Exercício Suponha que se deseja classificar o seguinte vetor utilizando o método da seleção direta: 9 25 10 18 5 7 15 3 Simule as iterações necessárias para a classificação.

Classificação por Seleção Direta Exemplo Iteração Vetor Chave Permutação Vetor ordenado Selecionada até a posição 1 9 25 10 18 5 7 15 3 3 9 e 3 2 3 25 10 18 5 7 15 9 5 25 e 5 1 3 3 5 10 18 25 7 15 9 7 10 e 7 2 4 3 5 7 18 25 10 15 9 9 18 e 9 3 5 3 5 7 9 25 10 15 18 10 25 e 10 4 6 3 5 7 9 10 25 15 18 15 25 e 15 5 7 3 5 7 9 10 15 25 18 18 25 e 18 6 8 3 5 7 9 10 15 18 25 8

Classificação por Seleção Direta Procedimento Proc seleção direta ( c, n ) ; begin for i  1 to n - 1 do min  i ; /* posição do mínimo inicial */ for j  i + 1 to n do if c [ j ] < c [ min ] then min  j ; /* posição do novo mínimo */ /* troca */ ch  c [ i ] ; c [ i ]  c [ min ] ; c [ min ]  ch end

Classificação por Seleção Direta Análise de Desempenho Número de comparações efetuadas 1ª iteração: compara o 1º elemento com os n-1 demais: n-1 2ª iteração: compara o 2º elemento com os n-2 demais: n-2 3ª iteração: compara o 3º elemento com os n-3 demais: n-3 … (n-1)ª iteração: compara o (n-1)º elemento com o último: 1 Total de comparações = (n - 1) + (n - 2) + … + 1 = ( n2 - n ) / 2 = O ( n2 )

Heapsort Utiliza uma estrutura de dados (heap) para organizar informação durante a execução do algoritmo Heap: vetor que pode ser visto como uma árvore binária totalmente preenchida em todos os níveis exceto, possivelmente, o último O último nível é preenchido da esquerda para a direita até um certo ponto O vetor A que representa um heap possui dois atributos: tamanho (length[A]) e número de elementos no vetor (heap_size[A])

Heap 16 9 3 10 2 4 1 8 7 14 Operações de consulta sobre um nodo i Um heap visto como uma árvore binária ou como um array unidimensional 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 16 9 3 10 2 4 1 8 7 14 16 14 10 8 7 9 3 2 4 1 Operações de consulta sobre um nodo i Pai(i) Esquerda(i) Direita(i) return(i/2) return(2*i) return(2*i + 1)

Propriedade do Heap O valor de um nodo é sempre menor ou igual ao valor de seu nodo pai A[Pai(i)]  A[i],  i  heap_size[A] O elemento de maior valor encontra-se armazenado na raiz da árvore

Definições A altura de um nodo em uma árvore corresponde ao número de arestas no caminho descendente mais longo daquele nodo até um nodo folha A altura de um heap de n elementos é (log2n) – baseado em uma árvore binária completa As operações básicas sobre heaps executam em tempo no máximo proporcional a altura da árvore e, portanto, O(log2n) Porque a notação O, ao invés de , foi utilizada na expressão acima?

Procedimentos sobre Heaps Heapify Garante a manutenção da propriedade do Heap. Executa em O(log2n) Build-Heap Produz um heap a partir de um vetor não ordenado. Executa em O(n) Heapsort Procedimento de ordenação local. Executa em O(nlog2n) Extract-Max e Insert Permitem utilizar um heap para implementar uma fila de prioridades. Ambos executam em O(log2n)

Procedimento Heapify Reorganiza heaps Supõe que as árvores binárias correspondentes a Esquerda(i) e Direita(i) são heaps, mas A[i] pode ser menor que seus filhos Exemplo: 16 9 3 10 2 1 8 7 14 4 5 6 i 16 9 3 10 2 1 8 7 14 4 5 6 i 16 9 3 10 2 1 8 7 14 4 5 6

Procedimento Heapify Proc heapify ( A, i ) begin e  Esquerda(i); d  Direita(i); maior  i; if (e  heap_size[A] and A[e] > A[maior]) then maior  e; /* filho da esquerda é maior */ if (d  heap_size[A] and A[d] > A[maior]) then maior  d; /* filho da direita é maior */ if (maior  i) then exchange(A[i]  A[maior]); heapify(A, maior); end Custo: O(log2n) – cada troca tem custo (1) e ocorrem no máximo log2n trocas

Procedimento Build-Heap Utiliza o procedimento Heapify de forma bottom-up para transformar um vetor A[1..n] em um heap com n elementos A[(n/2+1)] a A[n] correspondem às folhas da árvore e portanto são heaps de um elemento Basta chamar Heapify para os demais elementos do vetor A Proc build-heap ( A ) begin heap_size[A]  length[A]; for i  length[A]/2 downto 1 do heapify(A, i); end

Exercícios 1. Utilize o procedimento Build-Heap para construir um heap a partir do vetor 4 1 3 2 16 9 10 14 8 7 2. Por que no laço do procedimento Build-Heap fazemos o valor da variável “i” variar de length[A]/2 até 1 ao invés de de 1 até length[A]/2?

Procedimento Heapsort Constrói um heap a partir de um vetor de entrada Como o maior elemento está localizado na raiz (A[1]), este pode ser colocado em sua posição final, trocando-o pelo elemento A[n] Reduz o tamanho do heap de uma unidade, chama Heapify(A,1) e repete o passo anterior até que o heap tenha tamanho = 2

Procedimento Heapsort Proc heapsort (A) begin build_heap(A); for i  length[A] downto 2 do exchange(A[i]  A[1]); heap_size[A]  heap_size[A] –1; heapify(A,1); end Custo: O(nlog2n) – build_heap custa O(n) e cada uma das n-1 chamadas a heapify custa O(log2n)

Uso de Heap Fila de Prioridades – estrutura de dados para manutenção de um conjunto com S elementos, cada um valor de chave, e que suporta as seguintes operações: Insere_Heap(S,x): Insere o elemento x no conjunto S Máximo(S): Retorna o elemento de S com maior valor de chave Extrai_Max(S): Remove de S e retorna o elemento com o maior valor de chave

Procedimento Insere_Heap Proc insere_heap (A, chave) begin heap_size[A]  heap_size[A] +1; i  heap_size[A]; while (i > 1 and A[Pai(i)] < chave) do A[i]  A[Pai(i)]; i  Pai(i); end A[i]  chave; Custo: O(log2n)

Procedimento Extrai_Max Proc extrai_max (A) begin if (heap_size[A] < 1) then error (“heap underflow”); max  A[1]; A[1]  A[heap_size[A]]; heap_size[A]  heap_size[A] –1; heapify(A,1); return (max); end Custo: O(log2n)