Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


aed 09, Notas de aula de Algoritmos

Aula de Algoritmo e Estrutura de Dados do Professor Patrick Pedreira.

Tipologia: Notas de aula

Antes de 2010

Compartilhado em 01/03/2010

ygor-dos-santos-luz-3
ygor-dos-santos-luz-3 🇧🇷

4.7

(3)

55 documentos

1 / 14

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
Algoritmos e Estruturas de Dados
Prof. Patrick Pedreira
Estruturas de dados
Estruturas de dados
dinâmicas
dinâmicas
Estruturas de dados dinâmicas
Estruturas de dados dinâmicas
Fila
É um tipo especial de lista, caracterizada pela
forma como seus elementos são inseridos e
removidos.
Numa fila, os primeiros elementos inseridos são os
primeiros a
serem removidos.
FIFO (First In, First Out)
Exemplo:
Imaginemos uma fila de ônibus. Inicialmente, não
temos ninguém na fila. Depois, chega uma pessoa
à fila, que ficará na primeira posição. A próxima
pessoa ficará atrás da primeira (em segundo) e
assim sucessivamente. Quando o ônibus chegar,
obrigatoriamente a primeira pessoa da fila deverá
entrar, seguida da segunda pessoa da
fila
e assim
por diante. Portanto, a primeira pessoa a entrar na
fila também será a primeira a sair dela.
Consideramos que os elementos são inseridos no
final da fila e removidos a partir do início.
Estruturas de dados dinâmicas
Estruturas de dados dinâmicas
As operações sobre as filas são similares às
definidas para listas:
1. Iniciação
2. Enfileiramento
3. Desenfileiramento
4. Tamanho
5. Término
Estruturas de dados dinâmicas
Estruturas de dados dinâmicas
Iniciação da fila
Precisamos manter os ponteiros para o início e o final da fila, já
que a entrada e a saída de elementos se dão por essas vias.
Consideraremos o mesmo exemplo dos livros vistos nas aulas
anteriores
Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Pré-visualização parcial do texto

Baixe aed 09 e outras Notas de aula em PDF para Algoritmos, somente na Docsity!

Algoritmos e Estruturas de Dados

Prof. Patrick Pedreira

Estruturas de dados Estruturas de dados

dinâmicasdinâmicas

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Fila  É um tipo especial de lista, caracterizada pela forma como seus elementos são inseridos e removidos.  Numa fila, os primeiros elementos inseridos são os primeiros a serem removidos.  FIFO (First In, First Out)  Exemplo:  Imaginemos uma fila de ônibus. Inicialmente, não temos ninguém na fila. Depois, chega uma pessoa à fila, que ficará na primeira posição. A próxima pessoa ficará atrás da primeira (em segundo) e assim sucessivamente. Quando o ônibus chegar, obrigatoriamente a primeira pessoa da fila deverá entrar, seguida da segunda pessoa da fila e assim por diante. Portanto, a primeira pessoa a entrar na fila também será a primeira a sair dela.  Consideramos que os elementos são inseridos no final da fila e removidos a partir do início.

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 As operações sobre as filas são similares às

definidas para listas:

1. Iniciação

2. Enfileiramento

3. Desenfileiramento

4. Tamanho

5. Término

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Iniciação da fila

 Precisamos manter os ponteiros para o início e o final da fila, já que a entrada e a saída de elementos se dão por essas vias.  Consideraremos o mesmo exemplo dos livros vistos nas aulas anteriores

 Enfileiramento de um elemento na fila

 Quando enfileiramos um elementos, não precisamos buscar uma posição específica.  Todo elemento é inserido no final da fila

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Desenfileiramento (remoção) de um elemento da fila

 Sempre começa pelo início da fila, não fazendo sentido busca o elemento por uma determinada posição

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Pilhas  É um tipo especial de lista, caracterizada pela forma como seus elementos são inseridos e removidos.  Os últimos elementos inseridos são os primeiros a serem removidos.  LIFO (Last In, First Out)  Exemplo:  Imaginemos uma pilha de livros sobre uma mesa.  Inicialmente, não temos nenhum livro.  Depois, colocamos o primeiro livro na mesa. O próximo livro ficará em cima do primeiro e assim sucessivamente.  Quando formos remover um livro, obrigatoriamente teremos que pegar o livro que está em cima (ou no topo) da pilha  Portanto, o primeiro elemento a ser removido será o último elemento que foi inserido na pilha.

 As operações sobre as pilhas são similares às

definidas para listas:

1. Iniciação

2. Enpilhamento

3. Desenpilhamento

4. Tamanho

5. Término

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Iniciação de uma pilha

 Em vez da cabeça, em uma pilha precisamos manter

apenas o topo da lista, ou seja, o último elemento.

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Empilhamento de um elemento na pilha

 No empilhamento, não precisamos buscar uma posição já que todo elemento é inserido no topo da pilha

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Desempilhamento de um elemento da pilha

 O desempilhamento (remoção) sempre começa pelo topo, não precisando buscar o elemento a ser removido em uma determinada posição

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Árvores

 É uma estrutura de dados otimizada para o

acesso/recuperação de seus elementos.

 A utilização de árvores é muito eficiente no

armazenamento de grandes quantidades de dados, a fim

de garantir bom desempenho na busca de informação.

 Existem muitas variações na construção de

árvores.Veremos as árvores binárias (que são as mais

populares) e suas operações.

 A árvore é uma estrutura hierárquica na qual, a partir de

um elemento, podemos relacioná-lo com outros abaixo em

sua hierarquia.

 Cada elemento de uma árvore é chamado de nó.

 Assim como em uma lista, todos os nós são ligados.

 Entretanto, diferentemente da lista, cada nó pode ser

ligado a mais de um nó.

 Árvores (cont.)

 Em uma árvore, há um nó inicial, de onde toda a

árvore se deriva.

 Chamamos esse elemento de raiz.

 A raiz se liga com um ou mais elementos, e cada um

destes forma uma nova subárvore.

 Dizemos que esses elementos são seus galhos ou filhos.

 Chamamos os nós que não se ramificam de folhas.

 Cada nó forma uma subárvore a partir de seus

galhos, e para essa subárvore, o nó em questão é a

raiz.

 Existe um caminho único entre a raiz e qualquer

outro nó da árvore.

 Caso haja mais de um caminho, a estrutura em questão é um grafo, portanto, urna árvore éé uma especializauma especializaçção de umão de um grafo.grafo.

Estruturas de dados dinâmicasEstruturas de dados dinâmicas^ Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 A figura anterior é uma árvore, pois atende a todos os

requisitos:

 1. Todos os nós têm ao menos uma ligação.

 2. Todos os nós são acessíveis a partir da raiz.

 3. Existe um único caminho entre a raiz e qualquer outro nó.

 No exemplo anterior, para acessarmos o nó 11, fazemos

o caminho: Raiz -> Nó 2 -> Nó 6 -> Nó 11.

 Para que haja apenas um único caminho entre a raiz e

qualquer folha, um nó-filho não pode ter dois pais, ou

um galho não pode ter duas raízes nem troncos.

 Esta estrutura não é uma árvore pois há dois caminhos

entre o nó raiz e o nó folha 10.

 Uma árvore é dividida em níveis, e o nó-raiz está no nível O, os nós-filhos da raiz estão no nível 1, etc.

 Ou seja, cada nó de distância da raiz determina um novo nível.

 A altura (h) de uma árvore é a quantidade de nós que existe entre a raiz e a folha mais distante da árvore, ou seja, o maior nível da árvore + 1.

 Todas as folhas não precisam estar no mesmo nível da árvore.

 Por exemplo, a árvore da figura anterior tem altura 4, apesar de termos o nó-folha 5 no nível 2.

 Exemplos de utilização de árvores.

 Em um sistema operacional os arquivos são armazenados em uma árvore de diretórios (figura do próximo slide)

 Outro exemplo é a árvore genealógica. A relação entre pais e filhos é inerentemente hierárquica e, por isso mesmo, apropriada para representação por meio de uma árvore.

Estruturas de dados dinâmicasEstruturas de dados dinâmicas^ Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Problema - Genealogia representada em uma árvore

hierárquica

 José é um senhor com 95 anos. Ele teve quatro filhos: Carlos, Marco, Flávio e Lucas.

 Carlos teve uma filha chamada Luíza. Marco teve dois filhos, André e Roberto. Flávio teve um filho, Marcelo. Lucas não teve filhos.

 Luíza teve duas filhas: Helena e Cristina. André teve um filho, Mateus. Roberto e Marcelo não tiveram filhos.

 Faça a árvore genealógica da descendência de José,

ilustrada em uma árvore, determinando a raiz, os nós-

folhas e a altura da árvore.

 Problema: Armazenar valores em uma árvore binária

 Dados os valores 1, 2, 3, 4, 5, 6, 7, 8, 10, 15, 20, 25, 30, 35 e 41, desenhe a “melhor” árvore binária para seu armazenamento.

 A resolução desse problema passa pela descoberta do que seria a “melhor” árvore binária.

 Como estamos tratando de uma árvore de pesquisa, a melhor árvore é a que garante o menor caminho para o acesso a qualquer elemento.

 Para que isso ocorra, precisamos que os elementos se distribuam da forma mais homogênea possível.

 Se todas as folhas se encontrarem no mesmo nível, teremos a menor altura possível para a árvore.

 Para que tenhamos a distribuição desejada na árvore, é preciso que haja um número igual (ou quase) de elementos nas subárvores esquerda e direita da raiz. Essa regra se aplica a todo o nó-pai na árvore.

 Em nosso problema, portanto, Precisamos definir o elemento mediano (que tem metade dos elementos maior que ele e metade menor) como raiz.

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Em nosso caso, a chave ideal para raiz é o número 8, pois são 7 elementos menores que 8 e 7 maiores (não confundir o elemento mediano com a média dos elementos).  Aplicando a mesma lógica aos conjuntos da esquerda (1, 2, 3, 4, 5, 6, 7) e da direita (10, 15,20,25,30,35,41) encontraremos como raízes das subárvores os nós 4 e 25. Repetindo o processo sucessivamente, teremos a seguinte árvore:

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Exercício

 1 – Otimize a distribuição da árvore seguinte diminuindo ao máximo a altura da árvore

 2- Construa uma árvore binária com a menor altura possível com os elementos: 1, 3, 5, 7, 12, 34, 35, 55, 69, 70, 72, 75, 80, 82, 85 e 87.

 Veremos as seguintes operações sobre árvores binárias:

 Iniciação

 Inserção

 Busca

 Remoção

 Término

 Iniciação da árvore

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Inserção de um elemento na árvore

Aproveitou-se do fato da estrutura da árvore ser recorrente, ou seja, cada nó da árvore pode ser considerado a raiz da subárvore abaixo dele, sendo desenvolvida uma módulo recorrente de inserção

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

 Na implementação, utilizaremos o módulo auxiliar

Busca_Nova_Raiz para determinar a nova raiz da

subárvore, caso o elemento removido se enquadre no

terceiro caso.

 Escolhemos arbitrariamente utilizar o menor dos

elementos maiores que a raiz.

 A rigor, qualquer das escolhas seria válida.

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

A função Busca_Nova_Raiz é ativada no caso 3, quando o nó tem 2 filhos. Neste caso, encontramos a raiz substituta, copiamos o dado para o nó que seria removido, mantemos a árvore conexa ligando o pai da raiz substituta com o filho à direita e liberamos o nó da raiz substituta.

Estruturas de dados dinâmicasEstruturas de dados dinâmicas

Estruturas de dados dinâmicasEstruturas de dados dinâmicas