Estruturas de Dados 2
|
|
|
- Stefany Padilha Caetano
- 9 Há anos
- Visualizações:
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 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
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 [email protected] 10/2008 Material
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
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: [email protected]
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 [email protected] 10/2008 Material baseado em
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
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
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
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)
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
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,
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
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 [email protected] 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
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
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
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
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
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
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
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
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
Algoritmos de Ordenação. Profº Carlos Alberto T. Batista
Algoritmos de Ordenação Profº Carlos Alberto T. Batista E-mail: [email protected] [email protected] Por que ordenar os dados? Encontrar elementos em uma lista torna-se algo simples e
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
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
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
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
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
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 [email protected] 10/2008 Material
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:
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
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
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
Projeto e Análise de Algoritmos
Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais [email protected] 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter
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
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 [email protected] http://www.luizleao.com Conteúdo Programático 3.1 - Definição 3.2 - Dividir para conquistar 3.3 - Problema da
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.
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
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
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 [email protected] 10/2008 Material
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:
É 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
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
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á
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
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
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
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/ [email protected]
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
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
Análise de Algoritmos Algoritmos de Ordenação
Análise de Algoritmos Algoritmos de Ordenação Nelson Cruz Sampaio Neto [email protected] Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação 5 de abril de 2016
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
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
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
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
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]
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 [email protected] 10/2008 Material
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
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
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
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 [email protected] 10/2008 Material
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
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
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
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
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
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
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
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
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
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
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;
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
