O documento descreve o que é uma heap, como é sua estrutura e operações básicas de inserção e remoção. Uma heap é uma árvore binária balanceada que oferece acesso rápido ao item com a maior chave. Inserção e remoção ocorrem em tempo O(log n) através de movimentação de nós para cima ou para baixo na árvore.
O documento resume as principais estruturas de dados e algoritmos de ordenação e pesquisa, comparando seus tempos de execução no melhor, pior e médio caso e indicando quando cada um é mais apropriado de acordo com características dos dados e necessidades.
A Heap é uma estrutura de dados eficiente para implementar filas de prioridade, oferecendo acesso rápido ao maior item e remoção/inserção em tempo O(logN). Uma Heap é implementada como um vetor que representa uma árvore binária completa, com a raiz no índice zero e o último item no índice n-1, onde cada nó tem uma chave menor que seus pais e maior que seus filhos.
O documento descreve as estruturas de dados do tipo lista, especificamente listas simplesmente encadeadas. Explica que cada elemento da lista contém um item de dados e um elo para o próximo elemento. Apresenta também classes em Java para implementar pilhas e filas como listas encadeadas, com métodos para inserção e remoção de elementos.
O documento descreve o funcionamento de uma tabela hash, incluindo como realizar inserções, buscas e remoções de elementos de forma eficiente. A tabela hash mapeia chaves para posições de um vetor usando uma função hash, permitindo buscas em tempo constante. Colisões podem ocorrer quando chaves diferentes geram a mesma posição, mas o documento não trata desse caso.
1) O documento apresenta uma introdução sobre ordenação em JQuery e AJAX, incluindo métodos de ordenação como seleção, inserção e bolha. 2) São descritos conceitos como ordenação interna, externa e local, além de análises de eficiência dos algoritmos. 3) Métodos simples como seleção, inserção e bolha são comparados a métodos eficientes como quicksort e mergesort.
O documento apresenta vários algoritmos de ordenação e pesquisa de vetores, incluindo ordenação por troca, seleção, inserção e partição, bem como pesquisa sequencial e binária. Explica os conceitos-chave de ordenação e pesquisa e fornece pseudocódigo e código em C para cada algoritmo.
O documento descreve listas ligadas e como representá-las em C. Listas ligadas armazenam itens de dados em locais de memória não contíguos, ligados por ponteiros. Isso permite inserções e remoções sem deslocar outros itens, diferente de vetores. Operações como inserir, remover e buscar itens em listas ligadas são explicadas.
O documento descreve listas circulares e duplamente encadeadas, e apresenta o problema de Josephus, no qual soldados em um círculo são mortos a cada M posições até restar apenas um sobrevivente.
O documento resume as principais estruturas de dados e algoritmos de ordenação e pesquisa, comparando seus tempos de execução no melhor, pior e médio caso e indicando quando cada um é mais apropriado de acordo com características dos dados e necessidades.
A Heap é uma estrutura de dados eficiente para implementar filas de prioridade, oferecendo acesso rápido ao maior item e remoção/inserção em tempo O(logN). Uma Heap é implementada como um vetor que representa uma árvore binária completa, com a raiz no índice zero e o último item no índice n-1, onde cada nó tem uma chave menor que seus pais e maior que seus filhos.
O documento descreve as estruturas de dados do tipo lista, especificamente listas simplesmente encadeadas. Explica que cada elemento da lista contém um item de dados e um elo para o próximo elemento. Apresenta também classes em Java para implementar pilhas e filas como listas encadeadas, com métodos para inserção e remoção de elementos.
O documento descreve o funcionamento de uma tabela hash, incluindo como realizar inserções, buscas e remoções de elementos de forma eficiente. A tabela hash mapeia chaves para posições de um vetor usando uma função hash, permitindo buscas em tempo constante. Colisões podem ocorrer quando chaves diferentes geram a mesma posição, mas o documento não trata desse caso.
1) O documento apresenta uma introdução sobre ordenação em JQuery e AJAX, incluindo métodos de ordenação como seleção, inserção e bolha. 2) São descritos conceitos como ordenação interna, externa e local, além de análises de eficiência dos algoritmos. 3) Métodos simples como seleção, inserção e bolha são comparados a métodos eficientes como quicksort e mergesort.
O documento apresenta vários algoritmos de ordenação e pesquisa de vetores, incluindo ordenação por troca, seleção, inserção e partição, bem como pesquisa sequencial e binária. Explica os conceitos-chave de ordenação e pesquisa e fornece pseudocódigo e código em C para cada algoritmo.
O documento descreve listas ligadas e como representá-las em C. Listas ligadas armazenam itens de dados em locais de memória não contíguos, ligados por ponteiros. Isso permite inserções e remoções sem deslocar outros itens, diferente de vetores. Operações como inserir, remover e buscar itens em listas ligadas são explicadas.
O documento descreve listas circulares e duplamente encadeadas, e apresenta o problema de Josephus, no qual soldados em um círculo são mortos a cada M posições até restar apenas um sobrevivente.
O documento discute vários algoritmos de ordenação, incluindo ordenação por seleção, ordenação por inserção, Shellsort, Quicksort e MergeSort. Aborda conceitos básicos de ordenação como comparações de chaves, estabilidade e classificação de métodos de ordenação interna e externa.
O documento descreve o funcionamento de filas, listas lineares que adotam a política FIFO. As filas permitem inserções no final e remoções no início. Elas podem ser implementadas usando vetores de forma circular, incrementando os índices de modo a "andar" no vetor.
O documento descreve como implementar uma fila usando uma lista simplesmente encadeada. Ele define estruturas de dados para os nós da lista e para a fila, e fornece funções para criar, inserir, remover, verificar se está vazia, imprimir e liberar a fila.
O documento descreve as listas encadeadas e como representá-las em C. As listas encadeadas representam uma sequência de objetos na memória ligados por ponteiros. Cada elemento da lista contém um campo de dados e um ponteiro para o próximo elemento, permitindo acesso flexível aos itens.
O documento apresenta uma discussão sobre implementação de pilhas e filas dinâmicas utilizando listas encadeadas. É explicado como utilizar a estrutura de lista encadeada para representar pilhas e filas de forma dinâmica, codificando as operações necessárias como empilhar, desempilhar, enfileirar e desenfileirar.
O documento descreve uma lista duplamente encadeada, onde cada elemento possui referências para o elemento anterior e próximo. A classe Nó armazena o item e as referências prox e ant. A classe ListaDE contém métodos como inserir, remover, pesquisar itens. O método apaga posiciona os nós anterior, atual e próximo do item a remover e atualiza as referências apropriadamente dependendo da posição do item.
O documento descreve como implementar uma fila usando uma lista encadeada simples. Uma estrutura Fila contém ponteiros para o início e fim da lista, e métodos são fornecidos para inserir e remover itens da fila.
O documento descreve como implementar uma fila circular usando um vetor. Uma fila é uma estrutura de dados que usa a política FIFO, com inserções no final e remoções no início. Uma fila circular permite reutilizar o espaço do vetor de forma eficiente ao incrementar os índices de forma circular.
A pilha é uma estrutura de dados que segue o princípio LIFO (último a entrar, primeiro a sair). Os elementos são inseridos no topo da pilha e removidos apenas do topo. O documento descreve como implementar uma pilha usando vetor ou lista encadeada e as operações básicas de empilhar, desempilhar, verificar se está vazia e liberar a estrutura.
A pilha é uma estrutura de dados simples onde os elementos são inseridos e removidos sempre do topo. O documento descreve as operações básicas de empilhar (push) e desempilhar (pop) e apresenta implementações de pilhas usando vetores e listas encadeadas.
1) O R é um programa estatístico de código aberto que permite análise de dados através de pacotes. 2) Os usuários podem criar e compartilhar pacotes e funções no site do R. 3) O R usa objetos como vetores, matrizes e data frames para armazenar e manipular dados.
O documento apresenta uma aula sobre pilhas ministrada pelo professor Sérgio Souza Costa. A aula discute o conceito de pilha, as operações básicas de empilhar e desempilhar elementos, e apresenta uma implementação de pilha usando vetores em C com funções como criaPilha(), empilha(), desempilha() e topo().
Este documento apresenta os conceitos e implementação de listas duplamente encadeadas usando a linguagem C. Apresenta as vantagens sobre listas encadeadas simples, como acessar elementos adjacentes e percorrer a lista em ordem reversa. Detalha a estrutura dos nós da lista e operações básicas como criação, inserção e remoção de elementos. Instrui os alunos a implementarem os algoritmos nas atividades práticas.
O documento descreve conceitos de pilhas e filas em Java. Ele apresenta:
1) As definições de pilha e fila, incluindo os princípios LIFO e FIFO.
2) As principais operações de pilhas e filas como push, pop, enqueue e dequeue.
3) Implementações de pilhas e filas usando arranjos em Java e suas complexidades de tempo e espaço.
O documento apresenta os conceitos e implementação de pilhas como estrutura de dados. Aborda o funcionamento básico de pilhas com LIFO, exemplos de aplicações, implementação com vetor e lista encadeada em Java. Inclui exercícios sobre criação de pilha para armazenar contatos e conversão de notações matemáticas usando pilhas.
O documento discute estruturas de dados, definindo-as como métodos particulares de implementar tipos abstratos de dados. Apresenta listas como uma estrutura de dados linear na qual os elementos preservam uma ordem sequencial, e descreve listas ordenadas como listas cujos elementos estão ordenados de acordo com um critério pré-estabelecido. Detalha a implementação de listas sequenciais e ordenadas sequenciais usando arrays.
O documento discute pilhas e filas, que são listas lineares especiais com disciplina restrita de organização e acesso aos seus nós. Apresenta as operações básicas de pilhas (LIFO) e filas (FIFO) e duas formas de implementação: por contiguidade física usando arranjos e por encadeamento usando ponteiros.
1) A alocação seqüencial é o método mais simples de armazenar itens de uma lista linear em locais seqüenciais na memória.
2) Isso é conveniente para pilhas, onde o próximo item é adicionado no topo, mas pode ser ineficiente para filas se o final ultrapassar o início.
3) Quando há múltiplas listas, o espaço pode ser melhor aproveitado permitindo que as bases das listas se movam, mas isso torna os endereços relativos.
Este documento descreve e compara vários algoritmos de ordenação, incluindo seleção direta, bolha, inserção e quicksort. Fornece pseudocódigos destes algoritmos em Pascal e explica como cada um funciona através de exemplos. Além disso, discute as vantagens e desvantagens de cada método de ordenação.
1. O documento descreve o desenvolvimento de algoritmos de ordenação em C#.
2. Cinco algoritmos são implementados: bubble sort, selection sort, insertion sort, merge sort e quick sort.
3. Testes unitários foram criados para cada algoritmo para validar sua funcionalidade e desempenho.
Banco de Dados MySQL + NetBeans Java + Interface GraficaDivani Barbosa
O documento fornece instruções sobre como configurar uma interface gráfica Java com NetBeans para exibir e manipular dados armazenados em um banco de dados MySQL usando XAMPP como servidor local. Ele descreve como criar o banco de dados e tabelas, conectar a aplicação Java ao banco de dados, e desenvolver classes para gerenciar conexões, objetos e operações CRUD.
O documento discute a implementação de árvores binárias em Java. Resume que árvores binárias são estruturas de dados hierárquicas onde cada nó tem no máximo dois filhos, e discute métodos como inserção, busca, remoção e sucessor de nós na árvore.
O documento discute vários algoritmos de ordenação, incluindo ordenação por seleção, ordenação por inserção, Shellsort, Quicksort e MergeSort. Aborda conceitos básicos de ordenação como comparações de chaves, estabilidade e classificação de métodos de ordenação interna e externa.
O documento descreve o funcionamento de filas, listas lineares que adotam a política FIFO. As filas permitem inserções no final e remoções no início. Elas podem ser implementadas usando vetores de forma circular, incrementando os índices de modo a "andar" no vetor.
O documento descreve como implementar uma fila usando uma lista simplesmente encadeada. Ele define estruturas de dados para os nós da lista e para a fila, e fornece funções para criar, inserir, remover, verificar se está vazia, imprimir e liberar a fila.
O documento descreve as listas encadeadas e como representá-las em C. As listas encadeadas representam uma sequência de objetos na memória ligados por ponteiros. Cada elemento da lista contém um campo de dados e um ponteiro para o próximo elemento, permitindo acesso flexível aos itens.
O documento apresenta uma discussão sobre implementação de pilhas e filas dinâmicas utilizando listas encadeadas. É explicado como utilizar a estrutura de lista encadeada para representar pilhas e filas de forma dinâmica, codificando as operações necessárias como empilhar, desempilhar, enfileirar e desenfileirar.
O documento descreve uma lista duplamente encadeada, onde cada elemento possui referências para o elemento anterior e próximo. A classe Nó armazena o item e as referências prox e ant. A classe ListaDE contém métodos como inserir, remover, pesquisar itens. O método apaga posiciona os nós anterior, atual e próximo do item a remover e atualiza as referências apropriadamente dependendo da posição do item.
O documento descreve como implementar uma fila usando uma lista encadeada simples. Uma estrutura Fila contém ponteiros para o início e fim da lista, e métodos são fornecidos para inserir e remover itens da fila.
O documento descreve como implementar uma fila circular usando um vetor. Uma fila é uma estrutura de dados que usa a política FIFO, com inserções no final e remoções no início. Uma fila circular permite reutilizar o espaço do vetor de forma eficiente ao incrementar os índices de forma circular.
A pilha é uma estrutura de dados que segue o princípio LIFO (último a entrar, primeiro a sair). Os elementos são inseridos no topo da pilha e removidos apenas do topo. O documento descreve como implementar uma pilha usando vetor ou lista encadeada e as operações básicas de empilhar, desempilhar, verificar se está vazia e liberar a estrutura.
A pilha é uma estrutura de dados simples onde os elementos são inseridos e removidos sempre do topo. O documento descreve as operações básicas de empilhar (push) e desempilhar (pop) e apresenta implementações de pilhas usando vetores e listas encadeadas.
1) O R é um programa estatístico de código aberto que permite análise de dados através de pacotes. 2) Os usuários podem criar e compartilhar pacotes e funções no site do R. 3) O R usa objetos como vetores, matrizes e data frames para armazenar e manipular dados.
O documento apresenta uma aula sobre pilhas ministrada pelo professor Sérgio Souza Costa. A aula discute o conceito de pilha, as operações básicas de empilhar e desempilhar elementos, e apresenta uma implementação de pilha usando vetores em C com funções como criaPilha(), empilha(), desempilha() e topo().
Este documento apresenta os conceitos e implementação de listas duplamente encadeadas usando a linguagem C. Apresenta as vantagens sobre listas encadeadas simples, como acessar elementos adjacentes e percorrer a lista em ordem reversa. Detalha a estrutura dos nós da lista e operações básicas como criação, inserção e remoção de elementos. Instrui os alunos a implementarem os algoritmos nas atividades práticas.
O documento descreve conceitos de pilhas e filas em Java. Ele apresenta:
1) As definições de pilha e fila, incluindo os princípios LIFO e FIFO.
2) As principais operações de pilhas e filas como push, pop, enqueue e dequeue.
3) Implementações de pilhas e filas usando arranjos em Java e suas complexidades de tempo e espaço.
O documento apresenta os conceitos e implementação de pilhas como estrutura de dados. Aborda o funcionamento básico de pilhas com LIFO, exemplos de aplicações, implementação com vetor e lista encadeada em Java. Inclui exercícios sobre criação de pilha para armazenar contatos e conversão de notações matemáticas usando pilhas.
O documento discute estruturas de dados, definindo-as como métodos particulares de implementar tipos abstratos de dados. Apresenta listas como uma estrutura de dados linear na qual os elementos preservam uma ordem sequencial, e descreve listas ordenadas como listas cujos elementos estão ordenados de acordo com um critério pré-estabelecido. Detalha a implementação de listas sequenciais e ordenadas sequenciais usando arrays.
O documento discute pilhas e filas, que são listas lineares especiais com disciplina restrita de organização e acesso aos seus nós. Apresenta as operações básicas de pilhas (LIFO) e filas (FIFO) e duas formas de implementação: por contiguidade física usando arranjos e por encadeamento usando ponteiros.
1) A alocação seqüencial é o método mais simples de armazenar itens de uma lista linear em locais seqüenciais na memória.
2) Isso é conveniente para pilhas, onde o próximo item é adicionado no topo, mas pode ser ineficiente para filas se o final ultrapassar o início.
3) Quando há múltiplas listas, o espaço pode ser melhor aproveitado permitindo que as bases das listas se movam, mas isso torna os endereços relativos.
Este documento descreve e compara vários algoritmos de ordenação, incluindo seleção direta, bolha, inserção e quicksort. Fornece pseudocódigos destes algoritmos em Pascal e explica como cada um funciona através de exemplos. Além disso, discute as vantagens e desvantagens de cada método de ordenação.
1. O documento descreve o desenvolvimento de algoritmos de ordenação em C#.
2. Cinco algoritmos são implementados: bubble sort, selection sort, insertion sort, merge sort e quick sort.
3. Testes unitários foram criados para cada algoritmo para validar sua funcionalidade e desempenho.
Banco de Dados MySQL + NetBeans Java + Interface GraficaDivani Barbosa
O documento fornece instruções sobre como configurar uma interface gráfica Java com NetBeans para exibir e manipular dados armazenados em um banco de dados MySQL usando XAMPP como servidor local. Ele descreve como criar o banco de dados e tabelas, conectar a aplicação Java ao banco de dados, e desenvolver classes para gerenciar conexões, objetos e operações CRUD.
O documento discute a implementação de árvores binárias em Java. Resume que árvores binárias são estruturas de dados hierárquicas onde cada nó tem no máximo dois filhos, e discute métodos como inserção, busca, remoção e sucessor de nós na árvore.
O documento discute árvores como estruturas de dados, definindo conceitos como raiz, nós, altura e folhas. Explica aplicações de árvores como indexação em bancos de dados e sistemas de arquivos. Também descreve árvores binárias e operações nelas como percorrer, inserir e remover nós.
O documento discute tabelas de espalhamento e tratamento de colisões. Resume as principais formas de lidar com colisões em tabelas hash: endereçamento aberto e encadeamento separado. Explica como cada método funciona ao inserir e buscar elementos na tabela.
Este documento descreve o uso de pilhas como listas encadeadas para implementar uma calculadora de notação pós-fixa ou polonesa reversa (NPR). Apresenta uma classe PilhaSE que implementa uma pilha como lista encadeada e mostra como usar esta pilha para avaliar expressões matemáticas escritas em notação pós-fixa, empilhando e desempilhando operandos e realizando operações de acordo com os operadores encontrados. Por fim, sugere atividades como melhorar a calculadora e criar um programa para converter notação infixa em
O documento descreve as principais características de uma lista simplesmente encadeada. Uma lista simplesmente encadeada é uma estrutura de dados onde cada elemento contém um item de dados e um ponteiro para o próximo elemento. A classe Nós armazena o item e o ponteiro para o próximo nó. A lista pode crescer dinamicamente à medida que novos nós são adicionados e podem ser removidos em qualquer posição.
Fila de prioridade, pilha e fila são estruturas de dados. Uma fila de prioridade ordena itens por chave, com o de menor chave na frente. Itens são inseridos na posição ordenada e o de maior chave é removido.
O documento descreve o funcionamento de filas circulares. Uma fila circular permite que elementos sejam inseridos e removidos de forma que a remoção de um elemento não altera a posição dos demais, diferentemente de uma fila linear onde todos os elementos precisam ser deslocados. A implementação utiliza um vetor circular onde os índices de início e fim são controlados de forma cíclica.
O documento discute filas como uma estrutura de dados, definindo filas como uma estrutura FIFO onde os itens são inseridos no final e removidos do início. Ele fornece exemplos de implementação de filas em Java com métodos como push(), pop(), front(), size() e empty()/full().
O documento descreve o funcionamento de pilhas, incluindo suas operações básicas de empilhar (push) e desempilhar (pop). As pilhas armazenam itens de acordo com o princípio LIFO, onde o último item inserido é o primeiro a ser removido. O documento também fornece exemplos de implementação de pilhas em Java com métodos como push, pop, top e verificações de tamanho e estado da pilha.
O documento discute estruturas de dados, especificamente registros (ou estruturas) em Java. Ele apresenta exemplos de como declarar uma estrutura para armazenar dados de funcionários com nome, departamento e salário e como criar, ler e imprimir objetos dessa estrutura.
O documento apresenta uma classe Vetor e discute como transformá-la em uma classe VetorStr para armazenar strings. Ele também fornece exemplos de como ler dados do usuário, armazená-los no vetor, buscar itens, remover itens e ordenar o vetor usando o algoritmo QuickSort.
1) O documento discute vários algoritmos de ordenação como BubbleSort, SelectionSort, InsertionSort, MergeSort e QuickSort.
2) O MergeSort é explicado em detalhe, funcionando através da divisão do problema em subproblemas menores e intercalando as partes ordenadas.
3) O QuickSort também é descrito, selecionando um pivô e particionando o vetor em elementos menores e maiores que o pivô.
O documento discute algoritmos de ordenação de dados, incluindo BubbleSort, Selection Sort e Insertion Sort. Explica como cada algoritmo funciona através de exemplos passo a passo e analisa suas complexidades de tempo.
O documento discute recursividade e como resolver problemas de forma recursiva. Explica que uma função recursiva é aquela que se chama a si mesma e que a recursividade envolve dividir um problema em subproblemas menores do mesmo tipo até chegar a um caso trivial. Fornece como exemplo a função fatorial definida recursivamente.
O documento descreve a estrutura de dados vetor em Java, incluindo como criar, inserir, exibir, pesquisar e remover itens de um vetor. É apresentada uma classe Vetor que encapsula as operações em vetores e um programa principal que usa essa classe para demonstrar seus métodos.
O documento apresenta uma introdução sobre a linguagem Java, definindo-a como uma linguagem de programação de alto nível, interpretada e orientada a objetos. Também apresenta alguns comandos básicos do NetBeans IDE e conceitos fundamentais como variáveis, tipos de dados, declaração, atribuição e operadores matemáticos.
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
2. Comparação das Estruturas de Armazenamento
vistas que oferecem acesso rápido ao item de
dados com a maior chave
2arvore binária
balanceada
arvore binária
degenerada
arvore binária
degenerada
(pior caso)
Estrutura Inserção Eliminação Acesso ao
item com
maior chave
Vetor Ordenado (aula 2 – parte 2) O(n) O(n) O(1)
Fila de Prioridade (aula 8 – parte 2) O(n) O(1) O(1)
Arvore Binária (pior caso) O(n) O(n) O(n)
Arvore Binária (balanceada) O(log n) O(log n) O(log n)
3. 3
Estrutura Inserção Eliminação Acesso ao
item com
maior chave
Vetor Ordenado (aula 2 – parte 2) O(n) O(n) O(1)
Fila de Prioridade (aula 8 – parte 2) O(n) O(1) O(1)
Arvore Binária (pior caso) O(n) O(n) O(n)
Arvore Binária (balanceada) O(log n) O(log n) O(log n)
HeapSort O(log n) O(log n) O(1)
Comparação das Estruturas de Armazenamento
Vistas que oferecem acesso rápido ao item de
dados com a maior chave
4. 4
Heaps
Uma Heap é uma estrutura de dados do tipo árvore
binária balanceada. Sendo assim, ela oferece inserção e
eliminação num tempo O(log n).
Ela é o tipo de estrutura ideal para aplicações que
necessitam de acesso rápido ao item de dados com a menor
e maior chave.
Comparada com uma Fila de Prioridades, a Heap não é tão
rápida na eliminação, porém, é muito mais rápido para
inserção.
É o método ideal para implementar filas de prioridades
onde velocidade seja importante e haja muita inserções.
Estrutura de Armazenamento de Dados de
Propósito Especial
5. Uma Heap é uma arvore binária com as seguintes
características:
1. É completo. Isso significa que ele fica
completamente preenchido, lendo da esquerda
para direita cada linha, embora a última linha não
precise estar cheia.
Exemplo:
Arvore binária completa Arvore binária incompleta
6. Vetor
da Heap Heap
2. É implementado como vetor. Usa-se vetor para
armazenamento do conteúdo, ao invés de
referencias para conectar os Nós.
O vetor é armazenado na memória, a Heap é
apenas uma representação conceitual.
7. Vetor
da Heap Heap
O fato de que a Heap é uma Arvore Binária Completa
implica na inexistência de buracos no vetor usado para
representa-la. Cada célula esta preenchida de 0 a n-1.
8. 3. Cada Nó de uma Heap satisfaz a condição de
Heap, que estabelece que a chave de todo Nó é
maior ou igual que as chaves de seus filhos.
9. 9
Fracamente ordenado:
Uma Heap é fracamente ordenado em comparação a
uma arvore binária de busca (que usa algoritmo
simples).
Em uma Heap percorrer os Nós em ordem é difícil
porque o principio de organização (condição de Heap)
não é tão forte.
Só se pode afirmar que em
todo caminho da raiz até a
folha os Nós estão
ordenados em ordem
descendente.
Como Heaps são
fracamente ordenados,
algumas operações são
difíceis ou impossíveis.
10. 10
Uma Heap não permite uma busca conveniente para uma
chave especifica. Isso porque não há informação suficiente
para decidir qual dos dois filhos de um Nó selecionar para
descer num nível mais baixo durante a busca.
Portanto um Nó com uma chave especificada não pode ser
eliminado num tempo O(log n), porque não há maneira de
encontra-lo.
A organização de uma
Heap esta próxima de um
estado de aleatoriedade.
Entretanto, a ordem é
suficiente apenas para
permitir remoção rápida
do Nó máximo e inserção
rápida de novos Nós.
11. 11
Remoção significa remover um Nó com a chave
máxima. Esse Nó é sempre a raiz e ela esta no índice
zero do vetor da Heap, portanto remove-lo é fácil.
Remoção
O problema é que restara um “buraco” que tem de ser
preenchido. Para isso usa-se os seguintes passos:
1. Remova a raiz
2. Mova o ultimo Nó para raiz
vHeap[0] = vHeap[n-1];
n--;
3. Passe para baixo o ultimo Nó até que ele fique abaixo de
um Nó maior e acima de um Nó menor.
13. 13
3.e)
A cada posição do Nó destino o algoritmo de passagem
para baixo verifica qual o filho maior. Ele então troca o Nó
destino com o filho maior. Se ele tentasse trocar com o
filho menor, esse filho se tornaria pai de um filho maior, o
que viola a condição da Heap.
Move para baixo:
ERRADO CORRETO
14. 14
A inserção usa passagem para cima, ao invés de para
baixo. Inicialmente o Nó a ser inserido é colocado na
primeira posição aberta no final do vetor.
Inserção
vHeap[n] = novo;
n++;
Logo após, caso se faça necessário para se manter a
condição de Heap, o novo Nó será passado para cima até
que fique abaixo de um Nó com uma chave maior e acima
de um Nó com uma chave menor.
16. 16
e)
O algoritmo de passagem para cima é mais simples que
para baixo, pois há somente uma comparação (dois filhos
não precisam ser comparados).
Move para cima:
17. 17
Resumo
A Heap é a implementação eficiente de uma fila de
prioridades;
Uma Heap oferece acesso rápido ao maior item
(sempre está na raiz)
Uma Heap oferece remoção do maior e inserção de
itens em tempo O(logN)
A Heap não suporta travessia ordenada de dados,
localizar ou eliminar item com chave especifica.
A Heap é implementada como um vetor
representando uma arvore binária completa. A raiz
esta no índice zero e o ultimo item no item n-1.
Cada nó tem uma chave menor que seus pais e
maior que seus filhos
18. 18
Aplicações
Escalonamento de tarefas em computadores onde
alguns programas e atividades devem ser
executados antes que outros, e, portanto, recebem
uma prioridade mais alta.
19. 19
Sistemas de Armas (cruzador de uma esquadra)
Em um cruzador de guerra diversas ameaças, como
aviões, misseis, submarinos, etc.) devem ser
detectadas e priorizadas.
Por exemplo: Um míssil que esteja a uma distancia
curta do cruzador recebe uma prioridade mais alta
que um avião a longa distancia)