O documento discute a construção de heaps. Explica que as folhas de um heap estão nos índices de n/2 a n-1 e que podemos construir o heap de baixo para cima, considerando cada elemento nessa região como um heap de 1 elemento e depois aplicando refazHeapMax para construir o resto do heap de forma incremental.
O documento descreve heaps, que são estruturas de dados definidas como árvores binárias quase completas onde cada nó satisfaz certas propriedades em relação aos seus filhos. São definidos heaps máximos, onde cada nó tem valor maior ou igual aos filhos, e heaps mínimos, onde cada nó tem valor menor ou igual aos filhos. Visualizações de heaps máximos e mínimos são apresentadas para ilustrar como a estrutura atende às definições.
O documento descreve a estrutura de dados Skip List, incluindo seus conceitos, operações como pesquisa, inserção e remoção, e espaço necessário. Skip List pode ser usada como alternativa às árvores balanceadas com complexidade de tempo comparável para a maioria das operações.
O documento discute estimativas de erro em modelos de aprendizagem de máquina. Explica que o erro esperado no conjunto de teste tende a ser maior que no conjunto de treino, devido ao ajuste do modelo aos dados de treino. Também aborda medidas como viés e variância para avaliar estimadores, e como o erro quadrático médio equilibra ambos para medir o desvio total esperado entre a estimativa e o valor real.
O documento discute a avaliação de desempenho de classificadores treinados. Explica que é necessário testar o modelo em um conjunto de dados independente para medir seu desempenho em dados novos. Também apresenta métricas como taxa de erro e curva de aprendizagem para avaliar quantitativamente o modelo.
O documento descreve o algoritmo de máquina de vetor de suporte (SVM), explicando como ele busca encontrar o hiperplano separador de margem máxima entre os dados de treinamento de duas classes. O SVM define fronteiras lineares ótimas para dados linearmente separáveis, maximizando a distância entre o hiperplano separador e os exemplos de treinamento mais próximos, chamados de vetores de suporte. O problema é formulado como um problema de otimização para encontrar os parâmetros ω e b que maximizam essa distância de separação.
O documento descreve as redes neurais e o perceptron. Ele explica que as redes neurais se inspiram nos neurônios biológicos e como o perceptron funciona como a unidade básica de uma rede neural, recebendo sinais de entrada e aplicando uma função de ativação. Também discute possíveis funções de ativação como a função degrau e sigmóide e como os pesos das conexões, incluindo o viés, determinam se um perceptron é ativado ou não.
O documento descreve heaps, que são estruturas de dados definidas como árvores binárias quase completas onde cada nó satisfaz certas propriedades em relação aos seus filhos. São definidos heaps máximos, onde cada nó tem valor maior ou igual aos filhos, e heaps mínimos, onde cada nó tem valor menor ou igual aos filhos. Visualizações de heaps máximos e mínimos são apresentadas para ilustrar como a estrutura atende às definições.
O documento descreve a estrutura de dados Skip List, incluindo seus conceitos, operações como pesquisa, inserção e remoção, e espaço necessário. Skip List pode ser usada como alternativa às árvores balanceadas com complexidade de tempo comparável para a maioria das operações.
O documento discute estimativas de erro em modelos de aprendizagem de máquina. Explica que o erro esperado no conjunto de teste tende a ser maior que no conjunto de treino, devido ao ajuste do modelo aos dados de treino. Também aborda medidas como viés e variância para avaliar estimadores, e como o erro quadrático médio equilibra ambos para medir o desvio total esperado entre a estimativa e o valor real.
O documento discute a avaliação de desempenho de classificadores treinados. Explica que é necessário testar o modelo em um conjunto de dados independente para medir seu desempenho em dados novos. Também apresenta métricas como taxa de erro e curva de aprendizagem para avaliar quantitativamente o modelo.
O documento descreve o algoritmo de máquina de vetor de suporte (SVM), explicando como ele busca encontrar o hiperplano separador de margem máxima entre os dados de treinamento de duas classes. O SVM define fronteiras lineares ótimas para dados linearmente separáveis, maximizando a distância entre o hiperplano separador e os exemplos de treinamento mais próximos, chamados de vetores de suporte. O problema é formulado como um problema de otimização para encontrar os parâmetros ω e b que maximizam essa distância de separação.
O documento descreve as redes neurais e o perceptron. Ele explica que as redes neurais se inspiram nos neurônios biológicos e como o perceptron funciona como a unidade básica de uma rede neural, recebendo sinais de entrada e aplicando uma função de ativação. Também discute possíveis funções de ativação como a função degrau e sigmóide e como os pesos das conexões, incluindo o viés, determinam se um perceptron é ativado ou não.
O documento discute árvores de decisão e florestas aleatórias. Ele explica que árvores de decisão são uma das formas mais simples de aprendizado de máquina, representando uma sequência de regras "se...então" para classificar ou prever saídas com base em atributos de entrada. O documento também descreve características como nós internos representando testes de atributos e folhas especificando saídas, e discute expressividade e variações de árvores de decisão.
O documento discute aprendizado supervisionado bayesiano. Ele introduz o aprendizado bayesiano como um método probabilístico e descreve que o aprendizado supervisionado tem como objetivo classificação ou regressão para mapear entradas em saídas com base em exemplos.
O documento descreve a regra de Bayes e redes Bayesianas. Ele fornece um exemplo detalhado sobre como calcular a probabilidade de uma mulher ter câncer de mama dado um resultado positivo em um mamograma usando a regra de Bayes. Ele também define brevemente o que são redes Bayesianas, que representam dependências probabilísticas entre variáveis aleatórias através de um grafo direcionado acíclico.
O documento discute o tratamento de incerteza em inteligência artificial. Aborda como a probabilidade e a teoria da decisão podem ser usadas para tomar decisões racionais quando os resultados são incertos, levando em conta a probabilidade de cada resultado e sua utilidade segundo as preferências de quem decide.
O documento discute representação do conhecimento através de ontologias, incluindo taxonomias e herança. Ontologias organizam o conhecimento em categorias hierárquicas e permitem raciocinar sobre objetos classificados. Categorias podem ser representadas como predicados ou objetos. A herança permite que propriedades sejam herdadas por subcategorias.
O documento descreve o funcionamento do algoritmo de backward chaining em programação lógica, começando com uma explicação geral do processo de raciocínio de trás para frente a partir de um objetivo. Em seguida, apresenta formalmente o algoritmo de backward chaining, explicando cada parte do processo de forma recursiva para encontrar substituições que satisfaçam a query dada uma base de conhecimento. Por fim, exemplifica o algoritmo em uma base de conhecimento sobre venda de armas.
O documento descreve os passos para executar resolução e encadeamento para frente em lógica de primeira ordem. Primeiro, as expressões lógicas devem ser convertidas para forma clausal sem quantificadores. Em seguida, as variáveis devem ser substituídas durante a resolução usando o processo de unificação. Por fim, a resolução é executada para derivar novas conclusões.
O documento descreve as bases de dados em lógica de primeira ordem, como interagir com elas fazendo buscas (queries) por meio de sentenças lógicas em LPO, e como qualquer query que possa ser inferida logicamente pela base de dados será respondida afirmativamente. As bases de dados contêm axiomas com informações básicas e teoremas derivados dos axiomas, e o documento discute técnicas como forward chaining, backward chaining e resolução para realizar inferência nas bases de dados.
O documento descreve uma aula sobre lógica de primeira ordem. Apresenta os elementos básicos da lógica de primeira ordem, incluindo termos, predicados e a gramática formal para construir sentenças. Também explica como modelos e interpretações funcionam na lógica de primeira ordem, diferentemente da lógica proposicional.
O documento discute inferência em lógica proposicional, incluindo tipos de provas como verificação de modelos e aplicação de regras de inferência. Ele explica como aplicar regras de inferência como modus ponens e modus tollens para derivar novas sentenças a partir de premissas, formando uma prova.
O documento descreve um algoritmo de busca retroativa para resolver problemas de satisfação de restrições, utilizando forward checking e heurísticas como valores restantes mínimos, grau e valor menos restritivo. O algoritmo é demonstrado passo a passo em um exemplo de coloração de grafos, definindo variáveis, valores e propagando escolhas.
O documento descreve problemas de satisfação de restrições (CSPs), definidos por um conjunto de variáveis, domínios de valores para cada variável, e restrições sobre combinações de valores de variáveis. Apresenta exemplos de agendamento de aulas e coloração de mapas como CSPs, definindo suas variáveis, domínios e restrições.
O documento discute algoritmos genéticos e representação de cromossomos. Ele explica que os cromossomos podem ser representados de várias formas, incluindo binária, valores inteiros e reais. A representação binária é a mais simples, onde o cromossomo consiste de uma sequência de bits. A mutação e o cruzamento ocorrem durante o algoritmo genético para gerar novas soluções.
O documento descreve os princípios da computação evolutiva e algoritmos genéticos. Ele define computação evolutiva como técnicas que simulam a evolução natural, usando seleção, mutação e reprodução. O documento então explica o processo de seleção, mutação e reprodução em algoritmos genéticos e fornece detalhes sobre sua terminologia e funcionamento.
O documento descreve buscas informadas e heurísticas de busca. Ele discute estratégias como melhor primeiro, gulosa e A*, que usam heurísticas para guiar a busca em direção a soluções mais promissoras. O documento também discute problemas que podem ocorrer dependendo da heurística escolhida.
O documento discute busca como uma abordagem para solução de problemas em inteligência artificial. Explica que os problemas podem ser reduzidos a uma busca em um grafo, onde cada nó representa um estado do mundo e as arestas representam ações que levam de um estado a outro. A solução é um caminho no grafo que leva de um estado inicial a um estado final desejado. Exemplos de tipos de problemas incluem determinísticos e não determinísticos.
O documento discute arquivos e exceções em Java. Primeiramente, explica que dados de configuração precisam ser salvos em arquivos para serem preservados entre execuções do programa. Em seguida, descreve como objetos da classe File representam caminhos para arquivos e diretórios, e que escrever dados em arquivos requer objetos FileWriter. Por fim, discute que métodos que manipulam arquivos podem lançar exceções IOException, as quais precisam ser capturadas ou declaradas no método.
Este documento discute métodos abstratos e classes abstratas em Java. Explica que métodos abstratos não têm implementação definida na classe abstrata, mas sim nas subclasses, que são obrigadas a implementá-los. Também explica que a existência de pelo menos um método abstrato torna a classe abstrata, impedindo sua instanciação direta. A classe Casa é usada como exemplo de classe abstrata, já que no sistema modelo existem apenas casas quadradas e retangulares.
As três frases são:
1) O documento discute listas ligadas como uma alternativa a arranjos para alocar dinamicamente espaço na memória para novos itens.
2) Listas ligadas permitem adicionar itens de forma simples, sem necessidade de alocar um novo arranjo maior e copiar o conteúdo do anterior.
3) Cada nó de uma lista ligada contém um valor e um ponteiro para o próximo nó, permitindo navegar pela lista de forma flexível.
O documento discute árvores de decisão e florestas aleatórias. Ele explica que árvores de decisão são uma das formas mais simples de aprendizado de máquina, representando uma sequência de regras "se...então" para classificar ou prever saídas com base em atributos de entrada. O documento também descreve características como nós internos representando testes de atributos e folhas especificando saídas, e discute expressividade e variações de árvores de decisão.
O documento discute aprendizado supervisionado bayesiano. Ele introduz o aprendizado bayesiano como um método probabilístico e descreve que o aprendizado supervisionado tem como objetivo classificação ou regressão para mapear entradas em saídas com base em exemplos.
O documento descreve a regra de Bayes e redes Bayesianas. Ele fornece um exemplo detalhado sobre como calcular a probabilidade de uma mulher ter câncer de mama dado um resultado positivo em um mamograma usando a regra de Bayes. Ele também define brevemente o que são redes Bayesianas, que representam dependências probabilísticas entre variáveis aleatórias através de um grafo direcionado acíclico.
O documento discute o tratamento de incerteza em inteligência artificial. Aborda como a probabilidade e a teoria da decisão podem ser usadas para tomar decisões racionais quando os resultados são incertos, levando em conta a probabilidade de cada resultado e sua utilidade segundo as preferências de quem decide.
O documento discute representação do conhecimento através de ontologias, incluindo taxonomias e herança. Ontologias organizam o conhecimento em categorias hierárquicas e permitem raciocinar sobre objetos classificados. Categorias podem ser representadas como predicados ou objetos. A herança permite que propriedades sejam herdadas por subcategorias.
O documento descreve o funcionamento do algoritmo de backward chaining em programação lógica, começando com uma explicação geral do processo de raciocínio de trás para frente a partir de um objetivo. Em seguida, apresenta formalmente o algoritmo de backward chaining, explicando cada parte do processo de forma recursiva para encontrar substituições que satisfaçam a query dada uma base de conhecimento. Por fim, exemplifica o algoritmo em uma base de conhecimento sobre venda de armas.
O documento descreve os passos para executar resolução e encadeamento para frente em lógica de primeira ordem. Primeiro, as expressões lógicas devem ser convertidas para forma clausal sem quantificadores. Em seguida, as variáveis devem ser substituídas durante a resolução usando o processo de unificação. Por fim, a resolução é executada para derivar novas conclusões.
O documento descreve as bases de dados em lógica de primeira ordem, como interagir com elas fazendo buscas (queries) por meio de sentenças lógicas em LPO, e como qualquer query que possa ser inferida logicamente pela base de dados será respondida afirmativamente. As bases de dados contêm axiomas com informações básicas e teoremas derivados dos axiomas, e o documento discute técnicas como forward chaining, backward chaining e resolução para realizar inferência nas bases de dados.
O documento descreve uma aula sobre lógica de primeira ordem. Apresenta os elementos básicos da lógica de primeira ordem, incluindo termos, predicados e a gramática formal para construir sentenças. Também explica como modelos e interpretações funcionam na lógica de primeira ordem, diferentemente da lógica proposicional.
O documento discute inferência em lógica proposicional, incluindo tipos de provas como verificação de modelos e aplicação de regras de inferência. Ele explica como aplicar regras de inferência como modus ponens e modus tollens para derivar novas sentenças a partir de premissas, formando uma prova.
O documento descreve um algoritmo de busca retroativa para resolver problemas de satisfação de restrições, utilizando forward checking e heurísticas como valores restantes mínimos, grau e valor menos restritivo. O algoritmo é demonstrado passo a passo em um exemplo de coloração de grafos, definindo variáveis, valores e propagando escolhas.
O documento descreve problemas de satisfação de restrições (CSPs), definidos por um conjunto de variáveis, domínios de valores para cada variável, e restrições sobre combinações de valores de variáveis. Apresenta exemplos de agendamento de aulas e coloração de mapas como CSPs, definindo suas variáveis, domínios e restrições.
O documento discute algoritmos genéticos e representação de cromossomos. Ele explica que os cromossomos podem ser representados de várias formas, incluindo binária, valores inteiros e reais. A representação binária é a mais simples, onde o cromossomo consiste de uma sequência de bits. A mutação e o cruzamento ocorrem durante o algoritmo genético para gerar novas soluções.
O documento descreve os princípios da computação evolutiva e algoritmos genéticos. Ele define computação evolutiva como técnicas que simulam a evolução natural, usando seleção, mutação e reprodução. O documento então explica o processo de seleção, mutação e reprodução em algoritmos genéticos e fornece detalhes sobre sua terminologia e funcionamento.
O documento descreve buscas informadas e heurísticas de busca. Ele discute estratégias como melhor primeiro, gulosa e A*, que usam heurísticas para guiar a busca em direção a soluções mais promissoras. O documento também discute problemas que podem ocorrer dependendo da heurística escolhida.
O documento discute busca como uma abordagem para solução de problemas em inteligência artificial. Explica que os problemas podem ser reduzidos a uma busca em um grafo, onde cada nó representa um estado do mundo e as arestas representam ações que levam de um estado a outro. A solução é um caminho no grafo que leva de um estado inicial a um estado final desejado. Exemplos de tipos de problemas incluem determinísticos e não determinísticos.
O documento discute arquivos e exceções em Java. Primeiramente, explica que dados de configuração precisam ser salvos em arquivos para serem preservados entre execuções do programa. Em seguida, descreve como objetos da classe File representam caminhos para arquivos e diretórios, e que escrever dados em arquivos requer objetos FileWriter. Por fim, discute que métodos que manipulam arquivos podem lançar exceções IOException, as quais precisam ser capturadas ou declaradas no método.
Este documento discute métodos abstratos e classes abstratas em Java. Explica que métodos abstratos não têm implementação definida na classe abstrata, mas sim nas subclasses, que são obrigadas a implementá-los. Também explica que a existência de pelo menos um método abstrato torna a classe abstrata, impedindo sua instanciação direta. A classe Casa é usada como exemplo de classe abstrata, já que no sistema modelo existem apenas casas quadradas e retangulares.
As três frases são:
1) O documento discute listas ligadas como uma alternativa a arranjos para alocar dinamicamente espaço na memória para novos itens.
2) Listas ligadas permitem adicionar itens de forma simples, sem necessidade de alocar um novo arranjo maior e copiar o conteúdo do anterior.
3) Cada nó de uma lista ligada contém um valor e um ponteiro para o próximo nó, permitindo navegar pela lista de forma flexível.
O Que é Um Ménage à Trois?
A sociedade contemporânea está passando por grandes mudanças comportamentais no âmbito da sexualidade humana, tendo inversão de valores indescritíveis, que assusta as famílias tradicionais instituídas na Palavra de Deus.
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoMateusTavares54
Quer aprender inglês e espanhol de um jeito divertido? Aqui você encontra atividades legais para imprimir e usar. É só imprimir e começar a brincar enquanto aprende!
Atividade letra da música - Espalhe Amor, Anavitória.Mary Alvarenga
A música 'Espalhe Amor', interpretada pela cantora Anavitória é uma celebração do amor e de sua capacidade de transformar e conectar as pessoas. A letra sugere uma reflexão sobre como o amor, quando verdadeiramente compartilhado, pode ultrapassar barreiras alcançando outros corações e provocando mudanças positivas.
(ACH2002) Introdução à Análise de Algoritmos - Aula 17
1. Aula 17 – Heaps e Heapsort
Norton Trevisan Roman
norton@usp.br
18 de outubro de 2018
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 1 / 17
2. Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
16
1
4
2
10
3
14
4
7
5
9
6
3
7
2
8
8
9
1
10
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
3. Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
4
2
10
3
14
4
7
5
9
6
3
7
2
8
8
9
1
10
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
4. Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
4
4
7
5
9
6
3
7
2
8
8
9
1
10
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
5. Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
4
4
7
5
9
6
3
7
2
8
8
9
1
10
E repetimos o procedimento enquanto houver
viola¸c˜ao da propriedade
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
6. Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
E repetimos o procedimento enquanto houver
viola¸c˜ao da propriedade
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
7. Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
E repetimos o procedimento enquanto houver
viola¸c˜ao da propriedade
Empurrando assim o elemento problem´atico para baixo no
heap, at´e seu devido lugar
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
8. Heaps
Mantendo a Propriedade do Heap
Vimos tamb´em o procedimento
void refazHeapMax(int A[], int i, int
compHeap)
que fazia essa manuten¸c˜ao no heap em O(log n)
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
9. Heaps
Mantendo a Propriedade do Heap
Vimos tamb´em o procedimento
void refazHeapMax(int A[], int i, int
compHeap)
que fazia essa manuten¸c˜ao no heap em O(log n)
Como ent˜ao constru´ımos um heap?
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
10. Heaps
Mantendo a Propriedade do Heap
Vimos tamb´em o procedimento
void refazHeapMax(int A[], int i, int
compHeap)
que fazia essa manuten¸c˜ao no heap em O(log n)
Como ent˜ao constru´ımos um heap?
Uma maneira ´e usar nosso refazHeapMax para
converter um arranjo A[1..n] em um heap m´aximo
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
11. Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
12. Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
13. Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Mesmo? Suponha o arranjo A[0..n − 1]
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
14. Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Mesmo? Suponha o arranjo A[0..n − 1]
Imagine que A[ n/2 ] . . . A[n − 1] n˜ao contenham apenas
folhas
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
15. Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Mesmo? Suponha o arranjo A[0..n − 1]
Imagine que A[ n/2 ] . . . A[n − 1] n˜ao contenham apenas
folhas
Isso significa que existe (pelo menos) um elemento
A[k], n/2 ≤ k ≤ n − 1 que n˜ao ´e folha
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
16. Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
17. Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
18. Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Como k ≥ n/2 , ent˜ao esse elemento estaria em
k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
19. Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Como k ≥ n/2 , ent˜ao esse elemento estaria em
k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2
Ou seja, k ≥ n + 1 ou em k ≥ n + 2. Fora, portanto, do
arranjo
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
20. Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Como k ≥ n/2 , ent˜ao esse elemento estaria em
k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2
Ou seja, k ≥ n + 1 ou em k ≥ n + 2. Fora, portanto, do
arranjo
Ent˜ao sim, as folhas ficam nos n´os que v˜ao de n/2 + 1 a n
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
21. Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
22. Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Podemos ent˜ao considerar cada elemento A[k],
n/2 ≤ k ≤ n − 1 como um heap
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
23. Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Podemos ent˜ao considerar cada elemento A[k],
n/2 ≤ k ≤ n − 1 como um heap
E a partir desses, construir o resto do heap, numa estrat´egia
bottom-up
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
24. Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Podemos ent˜ao considerar cada elemento A[k],
n/2 ≤ k ≤ n − 1 como um heap
E a partir desses, construir o resto do heap, numa estrat´egia
bottom-up
Como?
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
25. Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
26. Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
27. Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Como se tiv´essemos adicionado um elemento ao heap, em
seu in´ıcio, e agora tiv´essemos que manter sua propriedade
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
28. Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Como se tiv´essemos adicionado um elemento ao heap, em
seu in´ıcio, e agora tiv´essemos que manter sua propriedade
Repetimos ent˜ao a partir da posi¸c˜ao n/2 − 2 etc,
at´e a posi¸c˜ao 0
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
29. Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Como se tiv´essemos adicionado um elemento ao heap, em
seu in´ıcio, e agora tiv´essemos que manter sua propriedade
Repetimos ent˜ao a partir da posi¸c˜ao n/2 − 2 etc,
at´e a posi¸c˜ao 0
Ou seja, um a um adicionamos os demais elementos
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
30. Heaps
Construindo o Heap
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1; i >= 0; i--)
refazHeapMax(A, i, compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
31. Heaps
Construindo o Heap
Para cada elemento, da
metade at´e a primeira posi¸c˜ao
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1; i >= 0; i--)
refazHeapMax(A, i, compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
32. Heaps
Construindo o Heap
Garanto a propriedade do
heap a partir desse elemento
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1; i >= 0; i--)
refazHeapMax(A, i, compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
33. Heaps
Construindo o Heap
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
34. Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
35. Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
36. Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
37. Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
38. Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
39. Heaps
Construindo o Heap
4
0
1
1
3
2
14
3
16
4
9
5
10
6
2
7
8
8
7
9
4 1 3 14 16 9 10 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
40. Heaps
Construindo o Heap
4
0
1
1
3
2
14
3
16
4
9
5
10
6
2
7
8
8
7
9
4 1 3 14 16 9 10 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
41. Heaps
Construindo o Heap
4
0
1
1
10
2
14
3
16
4
9
5
3
6
2
7
8
8
7
9
4 1 10 14 16 9 3 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
42. Heaps
Construindo o Heap
4
0
1
1
10
2
14
3
16
4
9
5
3
6
2
7
8
8
7
9
4 1 10 14 16 9 3 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
43. Heaps
Construindo o Heap
4
0
16
1
10
2
14
3
7
4
9
5
3
6
2
7
8
8
1
9
4 16 10 14 7 9 3 2 8 1
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
44. Heaps
Construindo o Heap
4
0
16
1
10
2
14
3
7
4
9
5
3
6
2
7
8
8
1
9
4 16 10 14 7 9 3 2 8 1
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
45. Heaps
Construindo o Heap
16
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
1
9
16 14 10 8 7 9 3 2 4 1
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
46. Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
47. Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
48. Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
49. Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
50. Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Mas isso pode melhorar...
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
51. Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Mas isso pode melhorar...
De fato, pode-se demonstrar que um limite mais
apertado seria O(n)
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
52. Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Mas isso pode melhorar...
De fato, pode-se demonstrar que um limite mais
apertado seria O(n)
Ver em Cormen et al. “Introduction to Algorithms”. 2a ed.
MIT Press, 2001. Pp. 133-135.
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
54. Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
55. Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
56. Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
57. Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
58. Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Seja S um conjunto de n ≥ 2 valores, organizados na forma
de um heap m´aximo
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
59. Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Seja S um conjunto de n ≥ 2 valores, organizados na forma
de um heap m´aximo
Sendo S um heap m´aximo, o maior elemento est´a em S1.
Trocamos esse elemento por Sn, restaurando o heap em
S − Sn. Por hip´otese de indu¸c˜ao, sei ordenar a sequˆencia
S − Sn, e assim obtemos S ordenado
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
60. Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Seja S um conjunto de n ≥ 2 valores, organizados na forma
de um heap m´aximo
Sendo S um heap m´aximo, o maior elemento est´a em S1.
Trocamos esse elemento por Sn, restaurando o heap em
S − Sn. Por hip´otese de indu¸c˜ao, sei ordenar a sequˆencia
S − Sn, e assim obtemos S ordenado
(HeapSort)
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
61. HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
62. HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Selecionamos e posicionamos o maior (ou menor) elemento
do conjunto
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
63. HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Selecionamos e posicionamos o maior (ou menor) elemento
do conjunto
Aplicamos a hip´otese de indu¸c˜ao para ordenar os elementos
restantes
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
64. HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Selecionamos e posicionamos o maior (ou menor) elemento
do conjunto
Aplicamos a hip´otese de indu¸c˜ao para ordenar os elementos
restantes
A diferen¸ca ´e que no HeapSort utilizamos um heap
para selecionar o maior (ou menor) elemento de
forma eficiente
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
65. HeapSort
C´odigo
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
66. HeapSort
C´odigo
Transforma o ar-
ranjo em um heap
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
67. HeapSort
C´odigo
Coloca o maior
elemento ao final do
arranjo a ser ordenado
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
68. HeapSort
C´odigo
Verifica se a mudan¸ca
feita n˜ao violou
a propriedade no
heap restante, de
n − 1 elementos
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
69. HeapSort
C´odigo
Repete a opera¸c˜ao
para o heap de n − 1
elementos (T(n − 1))
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
70. HeapSort
C´odigo
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
113. HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
114. HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
115. HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
+(n − 1)
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
116. HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
+(n − 1)×O(log n)
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
117. HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
+(n − 1)×O(log n)
O(n log n) portanto
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
118. Referˆencias
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Slides dos professores Delano Beder e Marcos Chain
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 17 / 17