Estruturas de Dados 2

Tamanho: px
Começar a partir da página:

Download "Estruturas de Dados 2"

Transcrição

1 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83

2 Projeto de Algoritmos por Divisão e Conquista Introdução Busca Recursiva Ordenação: InsertionSort, MergeSort, HeapSort e QuickSort Resumo IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 2/83

3 Introdução Dividir e Conquistar é uma técnica de projeto de algoritmos que consiste em resolver um problema a partir da solução de sub-problemas menores do mesmo tipo. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 3/83

4 Introdução Dividir e Conquistar é uma técnica de projeto de algoritmos que consiste em resolver um problema a partir da solução de sub-problemas menores do mesmo tipo. Se os sub-problemas obtidos após a divisão ainda são muito grandes para a solução direta, aplica-se novamente a divisão, até ter problemas pequenos o suficiente para terem solução trivial ou direta. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 4/83

5 Introdução Após o processo de divisão em sub-problemas menores, e sua conquista, basta combinar os resultados dos sub-problemas menores, para obter a solução para o problema como um todo. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 5/83

6 Passos para divisão e conquista : 1. Divisão: propor uma forma de dividir o problema original em sub-problemas iguais, porém menores (recursivamente); 2. Conquista: ao se obter sub-problemas pequenos o suficiente, resolvê-los diretamente; 3. Combinação: combinar as soluções de forma a obter a solução ao problema original. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 6/83

7 Vantagens Solução direta do ponto de vista da recursividade; Elegância; Usualmente produz algoritmos eficientes (complexidade logarítmica!!!) Desvantagem Recursão!!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 7/83

8 Como aplicar? Processo Indutivo ao projeto de algoritmos(recursão) Aplicável sempre que for possível obter subproblemas menores independentes entre si Procurar uma divisão igualitária de um problema em diversos sub-problemas... Deve ser possível (e de preferência simples e rápido) combinar os resultados dos sub-problemas... IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 8/83

9 Justificativa Esta técnica pode ser empregada em diversas situações comuns porém importantes: Somar N números; Encontrar um elemento em um vetor ordenado; IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 9/83

10 Exemplo da aplicação da técnica: Como somar N números, a 1, a 2,..., a n? Se n é 1, a soma é o próprio a 1. Se n>1, podemos dividir o problema em dois subproblemas menores: 1.Somar os números de a 1 até a n/2 ; 2.Somar os número de a n/2 até a n ; 3.Somar os resultados!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 10/83

11 Exemplo da aplicação da técnica: Como somar N números, a 1, a 2,..., a n? Eficiência???? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 11/83

12 Exemplo da aplicação da técnica: Como somar N números, a 1, a 2,..., a n? Eficiência???? O(n)...(Melhor que uma abordagem exaustiva????) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 12/83

13 Exemplo da aplicação da técnica: Como somar N números, a 1, a 2,..., a n? Eficiência???? O(n)...(Melhor que uma abordagem exaustiva????) Claramente NÃO!!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 13/83

14 Exemplo da aplicação da técnica: Como somar N números, a 1, a 2,..., a n? Eficiência???? O(n)...(Melhor que uma abordagem exaustiva????) Claramente NÃO!!!! Portanto, aplicar Divisão e Conquista não garante, por si só, a obtenção de algoritmos eficientes! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 14/83

15 OUTRO exemplo: Buscar um elemento! Como encontrar o elemento em um vetor de tamanho N: a 1, a 2,..., a n? Se n é 1, e o elemento a 1 é o procurado, achou, senão não achou! Se n>1, podemos dividir o problema em dois subproblemas menores: 1.Encontrar o elemento no vetor de a 1 até a n/2 2.Encontrar o elemento no vetor de a n/2 até a n IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 15/83

16 Mas esta técnica não consegue gerar resultados melhores que a Força Bruta??? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 16/83

17 Mas esta técnica não consegue gerar resultados melhores que a Força Bruta??? Pode sim... IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 17/83

18 Mas esta técnica não consegue gerar resultados melhores que a Força Bruta??? Pode sim... Basta aplicá-la adequadamente...! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 18/83

19 Mas esta técnica não consegue gerar resultados melhores que a Força Bruta??? Pode sim... Basta aplicá-la adequadamente...! Exemplo de uso adequado: Busca Binária. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 19/83

20 Busca Binária: Dividir e Conquistar Encontrar um determinado elemento (chave) em um vetor ordenado de tamanho N: a 1, a 2,..., a n?: Verificar se a chave está na posição a x = a n/2 : Se estiver, encontrou! Se não estiver, realizar a busca binária nos vetores: a 1 até a x-1,se chave < a x, ou em a x+1 até a n se chave > a x. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 20/83

21 Busca Binária: Exemplo: Encontrar o número 12 na lista: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 21/83

22 Busca Binária: Exemplo: Encontrar o número 12 na lista: (está na posição X=n/2?)Ñ! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 22/83

23 Busca Binária: Exemplo: Encontrar o número 12 na lista: (está na posição X=n/2?)Ñ! (está na posição X=n/2?)S! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 23/83

24 Busca Binária: Tá, mas e daí???? Dividir e Conquistar Bem, a eficiência deste algoritmo é Θ(lg n)... Muito mais eficiente que a abordagem Força Bruta......pena que o vetor precisa estar ordenado......mas podemos aplicar a técnica de Divisão e Conquista para ordenar vetores também!!!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 24/83

25 Ordenação com Divisão e Conquista: Problema: Ordenar um vetor de tamanho N: a 1, a 2,..., a n Um vetor de um elemento já está ordenado! Um vetor de tamanho n pode ser ordenado pela intercalação de dois sub-vetores: 1.Um vetor de a 1 até a n/2 2.Outro vetor de a n/2 até a n IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 25/83

26 Ordenação com Divisão e Conquista: Problema: Ordenar um vetor de tamanho N: a 1, a 2,..., a n Um vetor de um elemento já está ordenado! Um vetor de tamanho n pode ser ordenado pela intercalação de dois sub-vetores: 1.Um vetor de a 1 até a n/2 2.Outro vetor de a n/2 até a n Esta maneira de ordenar dá origem ao algoritmo recursivo de ordenação MergeSort!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 26/83

27 Ordenação com Divisão e Conquista: Problema: Ordenar um vetor de tamanho N: a 1, a 2,..., a n Um vetor de um elemento já está ordenado! Um vetor de tamanho n pode ser ordenado pela intercalação de dois sub-vetores: 1.Um vetor de a 1 até a n/2 2.Outro vetor de a n/2 até a n Esta maneira de ordenar dá origem ao algoritmo recursivo de ordenação MergeSort!!! Isto é projetar um algoritmo por divisão e conquista!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 27/83

28 MergeSort: Se a função intercala for eficiente=o(n) Detalhe: para conseguir implementar a intercalação de forma eficiente, é necessário um vetor auxiliar, o que aumenta a memória necessária para o algoritmo...não é uma ordenação in-place,como a Ordenação por Seleção T(n) = 2T(n/2) + O(n) Logo, Mergesort é Θ(n lg n) (Master) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 28/83

29 MergeSort(A, e, d): : Pseudo-Código IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 29/83

30 Intercala(A, e, d): Pseudo-Código IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 30/83

31 Aplicando Dividir e Conquistar de outra forma: Seja S um conjunto de n 2 inteiros e x um elemento qualquer de S. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 31/83

32 Aplicando Dividir e Conquistar de outra forma: Seja S um conjunto de n 2 inteiros e x um elemento qualquer de S. Sejam S1 e S2 os subconjuntos de {S x} dos elementos menores ou iguais a x e maiores que x, respectivamente. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 32/83

33 Aplicando Dividir e Conquistar de outra forma: Seja S um conjunto de n 2 inteiros e x um elemento qualquer de S. Sejam S1 e S2 os subconjuntos de {S x} dos elementos menores ou iguais a x e maiores que x, respectivamente. Ambos S1 e S2 possuem menos de n elementos. Por hipótese de indução, sabemos ordenar os conjuntos S1 e S2. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 33/83

34 Aplicando Dividir e Conquistar de outra forma: Seja S um conjunto de n 2 inteiros e x um elemento qualquer de S. Sejam S1 e S2 os subconjuntos de {S x} dos elementos menores ou iguais a x e maiores que x, respectivamente. Ambos S1 e S2 possuem menos de n elementos. Por hipótese de indução, sabemos ordenar os conjuntos S1 e S2. Podemos obter S ordenado concatenando S1 ordenado, x e S2 ordenado. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 34/83

35 Aplicando Dividir e Conquistar de outra forma: Seja S um conjunto de n 2 inteiros e x um elemento qualquer de S. Sejam S1 e S2 os subconjuntos de {S x} dos elementos menores ou iguais a x e maiores que x, respectivamente. Ambos S1 e S2 possuem menos de n elementos. Por hipótese de indução, sabemos ordenar os conjuntos S1 e S2. Podemos obter S ordenado concatenando S1 ordenado, x e S2 ordenado. Esta abordagem dá origem ao algoritmo QuickSort!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 35/83

36 Em contraste ao Mergesort, no Quicksort é a operação de divisão que é mais custosa: depois de escolhermos o pivô(x), temos que separar os elementos do vetor maiores que o x dos menores ou iguais a x. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 36/83

37 Em contraste ao Mergesort, no Quicksort é a operação de divisão que é mais custosa: depois de escolhermos o pivô(x), temos que separar os elementos do vetor maiores que o x dos menores ou iguais a x. Conseguimos fazer essa divisão com (n) operações: basta varrer o vetor com dois apontadores, um varrendo da direita para a esquerda e outro da esquerda para a direita, em busca de elementos situados na parte errada do vetor, e trocar um par de elementos de lugar quando encontrado. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 37/83

38 Em contraste ao Mergesort, no Quicksort é a operação de divisão que é mais custosa: depois de escolhermos o pivô(x), temos que separar os elementos do vetor maiores que o x dos menores ou iguais a x. Conseguimos fazer essa divisão com (n) operações: basta varrer o vetor com dois apontadores, um varrendo da direita para a esquerda e outro da esquerda para a direita, em busca de elementos situados na parte errada do vetor, e trocar um par de elementos de lugar quando encontrado. Após essa etapa basta ordenarmos os dois trechos do vetor recursivamente para obtermos o vetor ordenado, ou seja, a conquista é imediata. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 38/83

39 Quicksort(A,e,d) - Pseudo-Código: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 39/83

40 Quicksort(A,e,d) - Pseudo-Código(cont): IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 40/83

41 Quicksort- Idéia Base 1. Selecionar um elemento para ser o pivô 2. Rearranjar a lista de modo que todos os elementos nas posições a esquerda do pivô sejam menores ou iguais a ele, e aqueles a direita do pivô sejam maiores que ele. 3. Permutar o pivô com o último elemento da primeira sub-lista(menores ou iguais). Agora o pivô está em sua posição final. 4. Ordenar as duas sub-listas. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 41/83

42 QuickSort Exemplo partition partition partition partition partition IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 42/83

43 Quicksort Análise da Complexidade Quantas comparações e quantas trocas o algoritmo Quicksort executa no pior caso? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 43/83

44 Quicksort Análise da Complexidade Quantas comparações e quantas trocas o algoritmo Quicksort executa no pior caso? Certamente a operação de divisão tem complexidade (n), mas o tamanho dos dois subproblemas depende do pivô escolhido. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 44/83

45 Quicksort Análise da Complexidade Quantas comparações e quantas trocas o algoritmo Quicksort executa no pior caso? Certamente a operação de divisão tem complexidade (n), mas o tamanho dos dois subproblemas depende do pivô escolhido. No pior caso, cada divisão sucessiva do Quicksort separa um único elemento dos demais, recaindo na recorrência: T(n) = 0, se n = 1 T(n) = T(n 1) + n, se n > 1, IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 45/83

46 Quicksort Análise da Complexidade Quantas comparações e quantas trocas o algoritmo Quicksort executa no pior caso? Certamente a operação de divisão tem complexidade (n), mas o tamanho dos dois subproblemas depende do pivô escolhido. No pior caso, cada divisão sucessiva do Quicksort separa um único elemento dos demais, recaindo na recorrência: T(n) = 0, se n = 1 T(n) = T(n 1) + n, se n > 1, Portanto, (n2 ) comparações e trocas são executadas no pior caso!!!!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 46/83

47 Mas o Quicksort não era o algoritmo de ordenação mais eficiente???? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 47/83

48 Mas o Quicksort não era o algoritmo de ordenação mais eficiente???? Então, o algoritmo Quicksort é assintoticamente menos eficiente que o Mergesort no pior caso. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 48/83

49 Mas o Quicksort não era o algoritmo de ordenação mais eficiente???? Então, o algoritmo Quicksort é assintoticamente menos eficiente que o Mergesort no pior caso. Entretanto, no caso médio, o Quicksort efetua (n log n) comparações e trocas. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 49/83

50 Mas o Quicksort não era o algoritmo de ordenação mais eficiente???? Então, o algoritmo Quicksort é assintoticamente menos eficiente que o Mergesort no pior caso. Entretanto, no caso médio, o Quicksort efetua (n log n) comparações e trocas. Assim, na prática, o Quicksort é bastante eficiente, com uma vantagem adicional em relação ao Mergesort: é in place, isto é, não utiliza um vetor auxiliar. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 50/83

51 Considerando que o pior caso não ocorre com freqüência, pois usualmente, pegando um pivô aleatório, é muito difícil escolher sempre um pivô que divida o vetor de tamanho n em dois vetores, um dos menores e outro dos maiores que o pivô, com tamanhos (n-1) e 1... IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 51/83

52 Considerando que o pior caso não ocorre com freqüência, pois usualmente, pegando um pivô aleatório, é muito difícil escolher sempre um pivô que divida o vetor de tamanho n em dois vetores, um dos menores e outro dos maiores que o pivô, com tamanhos (n-1) e 1... Desta forma, supondo uma divisão do vetor de tamanho n em dois sub-vetores (n/2), e considerando o tempo de separação entre os maiores e os menores que o pivô sendo O(n)... IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 52/83

53 Considerando que o pior caso não ocorre com freqüência, pois usualmente, pegando um pivô aleatório, é muito difícil escolher sempre um pivô que divida o vetor de tamanho n em dois vetores, um dos menores e outro dos maiores que o pivô, com tamanhos (n-1) e 1... Desta forma, supondo uma divisão do vetor de tamanho n em dois sub-vetores (n/2), e considerando o tempo de separação entre os maiores e os menores que o pivô sendo O(n)... O tempo médio T(n)=2T(n/2)+O(n) = O(n lg n) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 53/83

54 Ordenação: Mas não há um algoritmo que seja eficiente em todos os casos, e in place ao mesmo tempo? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 54/83

55 Ordenação: Mas não há um algoritmo que seja eficiente em todos os casos, e in place ao mesmo tempo? Vocês tinham que perguntar????? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 55/83

56 Ordenação: Mas não há um algoritmo que seja eficiente em todos os casos, e in place ao mesmo tempo? Vocês tinham que perguntar????? Este algoritmo chama-se HeapSort. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 56/83

57 Ordenação: Mas não há um algoritmo que seja eficiente em todos os casos, e in place ao mesmo tempo? Vocês tinham que perguntar????? Este algoritmo chama-se HeapSort. E é baseado numa estrutura de dados inteligente denominada Heap... implementa uma fila de prioridades... Podermos utilizá-la para fazer uma ordenação inplace e Θ(n lg n)!!!! (Mas o Quicksort ainda é mais rápido!!!!) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 57/83

58 Ordenação por Heap(HeapSort): Tarefa: Implementar a estrutura de dados Heap para podermos utilizá-la para fazer uma ordenação in-place e Θ(n lg n)!!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 58/83

59 Ordenação por Heap(HeapSort): Tarefa: Implementar a estrutura de dados Heap para podermos utilizá-la para fazer uma ordenação in-place e Θ(n lg n)!!!! Mas o que é um Heap??? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 59/83

60 Ordenação por Heap(HeapSort): Tarefa: Implementar a estrutura de dados Heap para podermos utilizá-la para fazer uma ordenação in-place e Θ(n lg n)!!!! Mas o que é um Heap??? É uma simulação de uma árvore binária completa utilizando um vetor!!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 60/83

61 Heap: Vetor que apresenta as seguintes características: Vetor A de tamanho N (lenght(a) = nº de nodos da árvore) A[1] = raiz da árvore binária (primeira posição do vetor) Para calcular a posição de qualquer nodo, utilizamos as funções PARENT, LEFT E RIGHT: PARENT(i) return i/2 LEFT(i) return 2i RIGHT(i) return 2i + 1 IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 61/83

62 Heap: (Cormen) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 62/83

63 Heap: Característica que distingue um Heap de uma árvore binária : A[PARENT(i)] A[i] (Max-Heap) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 63/83

64 Como utilizar um Heap para Ordenar???? O Heap permite que o elemento máximo do conjunto seja determinado e corretamente posicionado no vetor em tempo constante, trocando o primeiro elemento do heap com o último. O trecho restante do vetor (do índice 1 ao n 1), que pode ter deixado de ter a estrutura de heap, volte a tê-la com número de trocas de elementos proporcional à altura da árvore. O algoritmo Heapsort consiste então da construção de um heap com os elementos a serem ordenados, seguida de sucessivas trocas do primeiro com o último elemento e rearranjos do heap. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 64/83

65 HeapSort(A, n) - Pseudo-Código: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 65/83

66 AjustaHeap(A, i, n) - Pseudo-Código: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 66/83

67 Exemplo do Funcionamento de AjustaHeap(A,2,10): IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 67/83

68 Exemplo do Funcionamento de AjustaHeap(A,2,10): IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 68/83

69 Exemplo do Funcionamento de AjustaHeap(A,2,10): IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 69/83

70 Complexidade do HeapSort: Quantas comparações e quantas trocas são executadas no pior caso na etapa de ordenação do algoritmo Heapsort? No pior caso, a função AjustaHeap efetua (h) comparações e trocas, onde h é a altura do heap que contém os elementos que resta ordenar. Como o heap representa uma árvore binária completa, então h Θ(log i ), onde i é o número de elementos do heap. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 70/83

71 Complexidade do HeapSort: Logo, a complexidade da etapa de ordenação do Heapsort é: Portanto, no pior caso, a etapa de ordenação efetua O(n log n) comparações e trocas! Mas e a construção do Heap???? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 71/83

72 ConstroiHeap()\ Se o trecho de 1 a i do vetor tem estrutura de Heap, é fácil adicionar a folha i + 1 ao Heap e em seguida rearranjá-lo,garantindo que o trecho de 1 a i + 1 tem estrutura de Heap. Esta é a abordagem top-down para construção do Heap. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 72/83

73 ConstroiHeap(A, n) Pseudo-Código (Top-Down): IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 73/83

74 ConstroiHeap(A, n) (Top-Down): Quantas comparações e quantas trocas são executadas no pior caso na construção do heap pela abordagem top-down? O rearranjo do heap na iteração i efetua (h) comparações e trocas no pior caso, onde h é a altura da árvore representada pelo trecho do Heap de 1 a i. Logo, h Θ(log i ). Portanto, o número de comparações e trocas efetuadas construção do Heap por esta abordagem é: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 74/83

75 Então, o algoritmo Heapsort efetua ao todo Θ (n log n) comparações e trocas no pior caso. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 75/83

76 Então, o algoritmo Heapsort efetua ao todo Θ (n log n) comparações e trocas no pior caso. (Bem...sendo mais preciso, executa 2 n log n comparações e trocas...) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 76/83

77 Então, o algoritmo Heapsort efetua ao todo Θ (n log n) comparações e trocas no pior caso. (Bem...sendo mais preciso, executa 2 n log n comparações e trocas...) Mas existe maneira mais eficiente de construir um Heap? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 77/83

78 Suponha que o trecho de i a n do vetor é tal que, para todo j, i j n, a subárvore de raiz j representada por esse trecho do vetor tem estrutura de heap. Note que, em particular, o trecho de n/2 + 1 a n do vetor satisfaz a propriedade, pois inclui apenas folhas da árvore binária de n elementos. Podemos então executar AjustaHeap(A, i 1, n), garantindo assim que o trecho de i 1 a n satisfaz a propriedade. Esta é a abordagem bottom-up para construção do Heap. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 78/83

79 ConstroiHeap(A, n) Pseudo-Código Alternativo...: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 79/83

80 ConstroiHeap(A, 6) Exemplo: A=[2,9,7,6,5,8] IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 80/83

81 ConstroiHeap Complexidade: Quantas comparações e quantas trocas são executadas no pior caso na construção do Heap pela abordagem bottom-up? O(n lo g n)! Mas é possível provar matematicamente que este pior caso é O(n)... utilizando o conhecimento sobre a altura de cada sub-árvore aonde se executa o AjustaHeap(). Ainda assim, o algoritmo HeapSort() continua sendo Θ(n log n) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 81/83

82 Parte Prática: Implementar os algoritmos MergeSort, QuickSort e HeapSort apresentados, rodar uma batelada de testes para medir os tempos de execução e a quantidade de comparações executada por cada algoritmo, comparando os resultados! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 82/83

83 - Conclusão: Estes slides são baseados no material disponibilizado pelos profs. Cid Carvalho de Souza e Cândida Nunes da Silva, da UNICAMP. Qualquer incorretude é, entretanto, de inteira responsabilidade do prof. João Alberto Fabro, da UTFPR. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 83/83

84 Prós: Dividir e Conquistar - Prós e Contras: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 84/83

85 Contras: Dividir e Conquistar - Prós e Contras: IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 85/83

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Algoritmos de Ordenação em Tempo Linear IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/38 Algoritmos de Ordenação em Tempo Linear Limite Assintótico

Leia mais

Algoritmos de Ordenação: QuickSort

Algoritmos de Ordenação: QuickSort Algoritmos de Ordenação: QuickSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Algoritmos Divisão e Conquista Construção incremental Resolver o problema para um sub-conjunto dos elementos de entrada; Então, adicionar

Leia mais

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

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort. Tópico 5 Algoritmos de Ordenação Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort. 1 Problema Computacional: Ordenação Problema computacional que surge em diversas situações. Definição:

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: reifortes@iceb.ufop.br

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material baseado em

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Recorrências IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/31 Recorrências Análise da Eficiência de Algoritmos: Velocidade de Execução; Análise

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Introdução à Ciência de Computação II Baseados nos Slides do Prof. Dr. Thiago A. S. Pardo Análise de algoritmos Existem basicamente 2 formas de estimar o tempo de execução de programas

Leia mais

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

AED2 - Aula 11 Problema da separação e quicksort AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos

Leia mais

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

Ordenação: MergeSort. Prof. Túlio Toffolo  BCC202 Aula 14 Algoritmos e Estruturas de Dados I Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande

Leia mais

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

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6 Análise e Síntese de Algoritmos Revisão CLRS, Cap. 4, 6 Contexto Revisão Algoritmos e complexidade Notação Fundamentos: somatórios, logaritmos, etc. Exemplos de algoritmos Ordenação Procura Selecção 2007/2008

Leia mais

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

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 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ópicos Introdução Ordenação por bolha (bubble sort)

Leia mais

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

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( ) Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista (2.1-2.2) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material desenvolvido por Andréa Iabrudi

Leia mais

ALGORITMOS DE ORDENAÇÃO

ALGORITMOS DE ORDENAÇÃO ALGORITMOS DE ORDENAÇÃO Prof. André Backes Conceitos básicos 2 Ordenação Ato de colocar um conjunto de dados em uma determinada ordem predefinida Fora de ordem 5, 2, 1, 3, 4 Ordenado 1, 2, 3, 4, 5 OU 5,

Leia mais

Ordenação de Dados (III) HeapSort

Ordenação de Dados (III) HeapSort UFSC-CTC-INE INE53 - Estruturas de Dados Ordenação de Dados (III) Prof. Ronaldo S. Mello 00/ HeapSort HeapSort também é um método de seleção ordena através de sucessivas seleções do elemento correto a

Leia mais

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

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação   IECE - ITA ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA MÉTODOS MAIS EFICIENTES QUE O(N 2 ) Método Quicksort Método

Leia mais

Métodos de Ordenação Parte 3

Métodos de Ordenação Parte 3 Estrutura de Dados II Métodos de Ordenação Parte 3 Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais do Prof. Robson Lins Classificação em Memória Primária

Leia mais

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

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort Mergesort Aula 0 Divisão e Conquista- MergeSort Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Mergesort é um algoritmo de ordenação recursivo Ele recursivamente ordena as duas

Leia mais

Algoritmos de ordenação Quicksort

Algoritmos de ordenação Quicksort Algoritmos de ordenação Quicksort Sumário Introdução Descrição do quicksort Desempenho do quicksort Pior caso Melhor caso Particionamento balanceado Versão aleatória do quicksort Análise do quicksort Pior

Leia mais

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

Aula 19: Métodos eficientes de ordenação Algoritmos e Estruturas de Dados I Aula 19: Métodos eficientes de ordenação (Merge sort e Quick sort) Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 1Q-2019 1 Intercalando 2 vetores ordenados 2 Intercalando

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Heapsort Conteúdo Introdução A estrutura de dados heap Definição Manutenção da propriedade de heap A construção de um heap O algoritmo heapsort Exercícios Referências Introdução Heapsort

Leia mais

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência Busca Binária Aula 05 Equações com Recorrência Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Idéia: Divisão e Conquista Busca_Binária(A[l...r],k) 1:if r < lthen 2: index = 1

Leia mais

Algoritimos e Estruturas de Dados III CIC210

Algoritimos e Estruturas de Dados III CIC210 Algoritimos e Estruturas de Dados III CIC210 Divisão e Conquista Haroldo Gambini Santos Concurso Universidade Federal de Ouro Preto - UFOP 3 de setembro de 2009 Haroldo Gambini Santos Divisão e Conquista

Leia mais

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Divisão e Conquista Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 27 Divisão e Conquista É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Consiste em 3 passos: Dividir

Leia mais

Algoritmos de ordenação Heapsort

Algoritmos de ordenação Heapsort Algoritmos de ordenação Heapsort Sumário Introdução A estrutura de dados heap Definição Manutenção da propriedade de heap A construção de um heap O algoritmo heapsort Introdução Características do heapsort

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP Manber, Introduction to Algorithms (989) Livro de abril de 08 Conteúdo programático

Leia mais

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

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Heapsort Prof. Flávio Rogério Uber Autor: Prof. Marco Aurélio Lopes Barbosa (UEM/DIN) Conteúdo Introdução A estrutura de dados heap Definição Manutenção da propriedade de heap A construção

Leia mais

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

HeapSort. Estrutura de Dados II Jairo Francisco de Souza HeapSort Estrutura de Dados II Jairo Francisco de Souza HeapSort Algoritmo criado por John Williams (1964) Complexidade O(NlogN) no pior e médio caso Mesmo tendo a mesma complexidade no caso médio que

Leia mais

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

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista Algoritmos de Ordenação Profº Carlos Alberto T. Batista E-mail: carlos.batista@facape.br carlos36_batista@yahoo.com.br Por que ordenar os dados? Encontrar elementos em uma lista torna-se algo simples e

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca

Leia mais

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

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira SCC-60 Introdução à Ciência da Computação II Ordenação e Complexidade Parte 3 Lucas Antiqueira Ordenação: Utiliza uma estrutura de dados chamada heap para ordenar. Um heap é um vetor (array) que representa

Leia mais

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

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras. Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica

Leia mais

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Norton T. Roman Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Construção incremental Ex: Consiste em, inicialmente, resolver

Leia mais

Análise de Complexidade para algoritmos iterativos e recursivos

Análise de Complexidade para algoritmos iterativos e recursivos Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa Análise de Complexidade para algoritmos iterativos e recursivos Algoritmos iterativos - complexidade expressa através de somatórios. Algoritmos

Leia mais

Algoritmos de Ordenação: Cota Inferior

Algoritmos de Ordenação: Cota Inferior Algoritmos de Ordenação: Cota Inferior ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/34 Introdução Técnica de Projeto de Algoritmos utilizada para Problemas de Otimização; Idéia:

Leia mais

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

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior ALGORITMO DE ORDENAÇÃO HEAPSORT Alyson Pereira Barbosa Erisvaldo

Leia mais

5. Algoritmos de Ordenação

5. Algoritmos de Ordenação Introdução à Computação II 5952011 5. Algoritmos de Ordenação Prof. Renato Tinós Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 5.1. Ordenação por Inserção 5.2. Ordenação por Seleção

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação Introdução à Ciência da Computação Prof. Edison Ishikawa Objetivo Apresentar diferentes algoritmos de ordenação de dados Mostrar como analisar os algoritmos em termos de tempo de

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Força Bruta IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/36 Técnica de Projeto de Algoritmos por Força

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter

Leia mais

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

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande ALGORITMOS VISTOS ANTERIORMENTE

Leia mais

Métodos de Ordenação Parte 4

Métodos de Ordenação Parte 4 Métodos de Ordenação Parte 4 Introdução à Ciência de Computação II Prof. Diego Raphael Amancio Baseado no material do Prof. Rudinei Goularte e Prof. Thiago A. S. Pardo 1 Ordenação por Intercalação Revisando...

Leia mais

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

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 3.1 - Definição 3.2 - Dividir para conquistar 3.3 - Problema da

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Recorrências Conteúdo Introdução O método mestre Referências Introdução O tempo de execução de um algoritmo recursivo pode frequentemente ser descrito por uma equação de recorrência.

Leia mais

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

Ordenação por Seleção Métodos de Ordenação Parte 3 Ordenação por Seleção Métodos de Ordenação Parte SCC-6 Introdução à Ciência da Computação II Rosane Minghim Idéia básica: os elementos são selecionados e dispostos em suas posições corretas Seleção direta

Leia mais

Métodos de Ordenação

Métodos de Ordenação Métodos de Ordenação Parte 3 SCC-601 Introdução à Ciência da Computação II Rosane Minghim 2010/2011 Baseado no material dos Professores Rudinei Goularte e Thiago Pardo 1 Ordenação por Seleção Idéia básica:

Leia mais

Métodos de Ordenação

Métodos de Ordenação Métodos de Ordenação Conceitos básicos sobre ordenação Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem específica. Objetivo da ordenação: facilitar a recuperação posterior

Leia mais

ANÁLISE DE ALGORITMOS

ANÁLISE DE ALGORITMOS ANÁLISE DE ALGORITMOS Paulo Feofiloff Instituto de Matemática e Estatística Universidade de São Paulo agosto 2009 Introdução P. Feofiloff (IME-USP) Análise de Algoritmos agosto 2009 2 / 102 Introdução

Leia mais

Algoritmos de Ordenação: Tempo Linear

Algoritmos de Ordenação: Tempo Linear Algoritmos de Ordenação: Tempo Linear ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

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

Análise empírica de algoritmos de ordenação Análise empírica de algoritmos de ordenação Mario E. Matiusso Jr. (11028407) Bacharelado em Ciências da Computação Universidade Federal do ABC (UFABC) Santo André, SP Brasil mario3001[a]ig.com.br Resumo:

Leia mais

Análise de Algoritmos

Análise de Algoritmos Algoritmos p. 1/28 Análise de Algoritmos Parte destes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 2/28 Análise de Algoritmos CLRS 7 Essas transparências

Leia mais

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número

Leia mais

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma

Leia mais

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

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO Algoritmos de Ordenação Cota inferior Professora: Fátima L. S. Nunes 1 1 1 Algoritmos de Ordenação Algoritmos de ordenação que já conhecemos: 2 2 2 Algoritmos de Ordenação Algoritmos de ordenação que já

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP 18 de agosto de 2017 Conteúdo programático Introdução (4 horas/aula) Notação

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA ESTRUTURAS DE DADOS E ALGORITMOS 1 HEAP BINÁRIA Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande HEAP BINÁRIA É uma árvore binária satisfazendo duas propriedades:

Leia mais

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

Bucketsort. CLRS sec 8.4. Algoritmos p. 1 Bucketsort CLRS sec 8.4 Algoritmos p. 1 Bucket Sort Recebe um inteiro n e um vetor A[1..n] onde cada elemento é um número no intervalo [0, 1). Algoritmos p. 2 Bucket Sort Recebe um inteiro n e um vetor

Leia mais

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT)

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT) Aula 2 Divisão e conquista Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT) Exemplo 2: Par de pontos mais próximos (sec 33.4 do CLRS) Essas transparências

Leia mais

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

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II Ordenação: Heapsort Algoritmos e Estruturas de Dados II Introdução Possui o mesmo princípio de funcionamento da ordenação por seleção Selecione o menor item do vetor Troque-o pelo item da primeira posição

Leia mais

Solução de Recorrências

Solução de Recorrências CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Solução de Recorrências Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br

Leia mais

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

QuickSort. Estrutura de Dados II Jairo Francisco de Souza QuickSort Estrutura de Dados II Jairo Francisco de Souza Particionamento Mecanismo principal dentro do algoritmo do QuickSort Para particionar um determinado conjunto de dados, separamos de um lado todos

Leia mais

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral QuickSort 1 Quicksort A[p q] A[q+1 r] Ordena um vetor A[p r] Divisão Particiona um vetor A em 2 subvetores A[p..q] e A[q+1..r], de tal modo que cada elemento de A[p..q] seja menor ou igual a cada elemento

Leia mais

Análise de Algoritmos Algoritmos de Ordenação

Análise de Algoritmos Algoritmos de Ordenação Análise de Algoritmos Algoritmos de Ordenação Nelson Cruz Sampaio Neto nelsonneto@ufpa.br Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação 5 de abril de 2016

Leia mais

Análise de Algoritmos

Análise de Algoritmos Análise de Algoritmos Estes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 1 Introdução CLRS 2.2 e 3.1 AU 3.3, 3.4 e 3.6 Essas transparências foram

Leia mais

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

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec Universidade Federal do ABC Avaliação: Prova 02 Disciplina: BC1424 - Algoritmos e Estruturas de Dados I Turma: Noturno Professor: Jesús P. Mena-Chalco Data: 03/05/2016 Nome completo: RA: Instruções para

Leia mais

Extra- Algoritmos de Ordenação

Extra- Algoritmos de Ordenação Extra- Algoritmos de Ordenação 1 Introdução Ordenar: processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. A ordenação visa facilitar a recuperação posterior de itens do

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Ordenação é uma das operações mais usuais em listas lineares Consequentemente, uma implementação ineficiente pode afetar diretamente o desempenho geral da aplicação! Por ser um problema bem estudado, existem

Leia mais

Análise de Algoritmos

Análise de Algoritmos Análise de Algoritmos CLRS 2.3, 3.2, 4.1 e 4.2 Essas transparências foram adaptadas das transparências do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 1 Número de inversões Problema:

Leia mais

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

Ordenação: QuickSort. Prof. Túlio Toffolo  BCC202 Aula 15 Algoritmos e Estruturas de Dados I Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação

Leia mais

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

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 032/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

Leia mais

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 (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 (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i0 && x[f]

Leia mais

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013 Filas de prioridade Marcelo K. Albertini de Dezembro de / Filas de prioridade O que é uma fila de prioridade? Estrutura de dados que generaliza a ideia de ordenação. Coleções de elementos: inserir e remover

Leia mais

Análise de Algoritmos

Análise de Algoritmos Algoritmos p. 1/25 Análise de Algoritmos Parte destes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 2/25 Ordenação em tempo linear CLRS cap 8 Algoritmos

Leia mais

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014 Filas de prioridade Marcelo K. Albertini de Novembro de / Filas de prioridade O que é uma fila de prioridade? Estrutura de dados que generaliza a ideia de ordenação. Coleções de elementos: inserir e remover

Leia mais

Estruturas de Dados Algoritmos de Ordenação

Estruturas de Dados Algoritmos de Ordenação Estruturas de Dados Prof. Eduardo Alchieri (introdução) Considere uma sequência arbitrária S = {s1, s2, s3,...sn} composta por n 0 elementos retirados do conjunto universo U O objetivo da ordenação é arrumar

Leia mais

Algoritmos de Ordenação: HeapSort

Algoritmos de Ordenação: HeapSort Algoritmos de Ordenação: HeapSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

Introdução Paradigmas

Introdução Paradigmas Introdução Paradigmas Recursividade Algoritmos tentativa e erro Divisão e conquista Programação dinâmica Algoritmos gulosos Algoritmos aproximados 1 Introdução O projeto de algoritmos requer abordagens

Leia mais

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

Ordenação de Dados. Ordenação de Dados UFSC-CTC-INE INE38 - Estruturas de Dados Ordenação de Dados Prof. Ronaldo S. Mello 00/ Ordenação de Dados Processo bastante utilizado na computação de uma estrutura de dados Dados ordenados garantem uma

Leia mais

Algoritmos e Estrutura de dados II. Fila de Prioridade e Heaps

Algoritmos e Estrutura de dados II. Fila de Prioridade e Heaps Algoritmos e Estrutura de dados II Fila de Prioridade e Heaps 1 Heap Sort...mas antes Agenda Implementação de uma Fila de Prioridade usando um HEAP Propriedade do Heap e exemplos adcionar min/max Remover

Leia mais

Algoritmos de Ordenação: MergeSort

Algoritmos de Ordenação: MergeSort Algoritmos de Ordenação: MergeSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

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

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática Estrutura de Dados Algoritmos de Ordenação Prof. Othon M. N. Batista Mestre em Informática Roteiro Introdução Ordenação por Inserção Insertion Sort Ordenação por Seleção Selection Sort Ordenação por Bolha

Leia mais

3. Conteúdo de um vértice v é conteúdo dos filhos de v.

3. Conteúdo de um vértice v é conteúdo dos filhos de v. Árvore Hierárquica Em inglês é chamada de Heap. Representar: conjunto C de elementos com relação. Operações: Ins x,c (inserir x em C e ExMax C (extrair o máximo do conjunto). Chamado também de Fila de

Leia mais

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

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

Leia mais

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)

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) 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) FEUP - MIEEC Prog 2-2006/2007 Introdução Algoritmo: conjunto

Leia mais

Ordenação Interna. Prof. Jonas Potros

Ordenação Interna. Prof. Jonas Potros Ordenação Interna Prof. Jonas Potros Heap A estrutura de dados heap é um objeto arranjo que pode ser visto como uma árvore binária completa. A árvore está completamente preenchida em todos os níveis, exceto

Leia mais

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

Ordenação por Intercalação Métodos de Ordenação Parte 4 Ordenação por Intercalação Métodos de Ordenação Parte 4 SCC-601 Introdução à Ciência da Computação II Rosane Minghim 2010 Revisando... Também chamado merge-sort Idéia básica: dividir para conquistar Um

Leia mais

Projeto de Algoritmos por Divisão e Conquista

Projeto de Algoritmos por Divisão e Conquista Projeto de Algoritmos por Divisão e Conquista Profa. Sheila Morais de Almeida DAINF-UTFPR-PG junho - 2018 Sheila Almeida (DAINF-UTFPR-PG) Divisão e Conquista junho - 2018 1 / 70 Este material é preparado

Leia mais

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo ( Análise de Problemas Recursivos Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Lembrando de Recursividade Procedimento que chama a si mesmo Recursividade permite

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP Manber, Introduction to Algorithms (1989) Livro 06 de abril de 2018 Conteúdo

Leia mais

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

Ordenação: HeapSort. Prof. Túlio Toffolo   BCC202 Aula 17 Algoritmos e Estruturas de Dados I 2014-01 Aula 16 Fila de Prioridade / HeapSort Adaptado por Reinaldo Fortes para o curso de 2014-01 Arquivo original: Aula 17: HeapSort Ordenação: HeapSort Prof. Túlio Toffolo http://www.toffolo.com.br

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos O que é um algoritmo? Sequência bem definida e finita de cálculos que, para um dado valor de entrada, retorna uma saída desejada/esperada. Na computação: Uma descrição de como

Leia mais

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

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Aula 13: Ordenação - Heapsort Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de abandonar

Leia mais

SCC Capítulo 3 Análise de Algoritmos - Parte 2

SCC Capítulo 3 Análise de Algoritmos - Parte 2 SCC-501 - Capítulo 3 Análise de Algoritmos - Parte 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Análise Empírica de Algoritmos IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/13 Análise da Eficiência de Algoritmos: Velocidade de Execução;

Leia mais

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

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Hebert Coelho e Nádia Félix Ordenação É a operação de rearranjar os dados em uma determinada ordem. Problema da ordenação - Definição formal

Leia mais

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

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1 MÉTODOS DE ORDENAÇÃO Introdução à Programação SI1 2 Conteúdo Conceitos básicos Classificação por troca Classificação por inserção Classificação por seleção 3 Conceitos Básicos Ordenar: processo de rearranjar

Leia mais