estrutura de dados 1
TRANSCRIPT
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 1/241
http://www.computacao.gigamundo.com
ESTRUTURA DE DADOS I
Christiano Lima Santos
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 2/241
http://www.computacao.gigamundo.com
Tipos de Dados eTipos Abstratos de Dados(Aula 1)
Christiano Lima Santos
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 3/241
http://www.computacao.gigamundo.com
Sumário Motivação Tipos de Dados Operações Tipos Primitivos ou
Escalares – Tipos Inteiros
– Tipos Reais – Tipos Lógicos – Tipo Caracter – Funções Para
Conversão
Tipos Coleções ouNão-Escalares – Tipo Vetor – Tipo Registro – Tipo Conjunto
Tipos Abstratos deDados
Alocação de Memória Vantagens e
Desvantagens daAlocação Dinâmica
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 4/241
http://www.computacao.gigamundo.com
Motivação
Por que estudar os tipos de dados?
Duas são as principais preocupações em umprojeto de software – Os procedimentos a serem executados; – Os dados sobre os quais os procedimentos
atuam;
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 5/241
http://www.computacao.gigamundo.com
Motivação
“Estruturas de Dados” busca descrever
modelos de estruturas de dados eprocedimentos – Exemplos: Arrays, Registros, Listas, Pilhas, Filas
e Árvores, etc.
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 6/241
http://www.computacao.gigamundo.com
Motivação
Os tipos de dados e operações determinam
as estruturas de dados – Exemplo: em uma pilha ou fila você possuioperações push e pop para colocar e retirarelementos dela; A forma como os dados são inseridos ou removidos é
que difere uma estrutura da outra!
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 7/241
http://www.computacao.gigamundo.com
Tipos de Dados
Define a forma como um dado deve ser armazenadoou recuperado, bem como os possíveis valores queele pode assumir ou as operações que podem serefetuadas sobre os mesmos – Exemplo em Pascal:
integer permite valores inteiros e operações de adição,
multiplicação, subtração e divisão; string permite valores literais e operações de concatenação;
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 8/241
http://www.computacao.gigamundo.com
Tipos de Dados
Primitivos, derivados ou coleções; – Os principais tipos primitivos são: inteiro, real,
lógico, caracter, ponteiro;
Estáticos ou dinâmicos (instanciados emtempo de execução);
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 9/241
http://www.computacao.gigamundo.com
Operações Um conjunto de instruções a fim de manipular um
determinado tipo de dado a fim algum objetivo; – Criação (declaração) – Percurso – Busca – Alteração
– Retirada – Inserção (em tipos dinâmicos)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 10/241
http://www.computacao.gigamundo.com
Tipos Primitivos ou Escalares
Inteiro (integer, longint, etc.);
Real (real, double, etc.);
Lógico (boolean);
Caracter (char);
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 11/241
http://www.computacao.gigamundo.com
Tipos Inteiros
Operações numéricas contidas no conjunto
dos números inteiros: – Soma, subtração, multiplicação, divisão inteira,resto da divisão;
Permitem comparações de igualdade e/oude desigualdade;
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 12/241
http://www.computacao.gigamundo.com
Tipos Reais
Satisfaz as operações e comparações
possíveis com tipos inteiros;
Operações numéricas contidas no conjuntodos números reais: – Soma, subtração, multiplicação, divisão;
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 13/241
http://www.computacao.gigamundo.com
Tipos Lógicos
Permite operações lógicas (booleanas):
– E, OU, NÃO;
Deve-se ter muito cuidado na construção deexpressões lógicas – Quanto maiores elas são, maiores as chances de
cometermos equívocos.
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 14/241
http://www.computacao.gigamundo.com
Tipo Caracter Permite a representação de um único caracter;
Operações de igualdade e desigualdade;
Por ser armazenado internamente como um valor
inteiro, podemos fazer um “casting” e efetuar outrasoperações.
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 15/241
http://www.computacao.gigamundo.com
Funções para conversão
De real para inteiro: – Trunc, Floor, Ceil, Round;
De caracter para inteiro: – Ord;
De inteiro para caracter: – Char;
Obs: Dependendo de quais os tipos/classesenvolvidos, podemos efetuar “typecasting”;
h // i d
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 16/241
http://www.computacao.gigamundo.com
Tipos Coleções ou Não-Escalares
Vetor;
Registro;
Conjunto.
htt // t i d
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 17/241
http://www.computacao.gigamundo.com
Tipo Vetor
Coleção de dados homogênea indexada que
pode ser acessada por meio de um índicenumérico;
var v = array [1..5] of integer;
v[3];
htt // t i d
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 18/241
http://www.computacao.gigamundo.com
Tipo Registro Coleção de dados heterogênea cujas informações
podem ser acessadas por meio de um campo;
var r = recordc1: integer;c2: boolean;
end;
r.c1;
htt // t i d
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 19/241
http://www.computacao.gigamundo.com
Tipo Conjunto Coleção de objetos (ou informações)
correlatos que podem estar presentes ounão em um dado momento;
var c = set of (V1, V2, V3);
c := [V1, V2]; V1 in c;
http // comp tacao gigam ndo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 20/241
http://www.computacao.gigamundo.com
Tipos Abstratos de Dados Segundo a Wikipédia:
– Especificação de um conjunto de dados eoperações que podem ser executadas sobreesses dados;
Exemplo: – Quando usamos arrays e registros para criar uma
estrutura de dados em vez de usar variáveis detipos primitivos.
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 21/241
http://www.computacao.gigamundo.com
Tipos Abstratos de Dados
Vetores, registros e conjuntos são
interessantes... – ... Mas há um problema, são estáticos!
O que acontece se eu tiver um vetor de 5
posições e precisar de outras 1000?
E se meu vetor tiver 100000 posições e eusomente uso 5, isso é bom?
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 22/241
http://www.computacao.gigamundo.com
Alocação de Memória
Alocação estática Variável alocada ocupa
espaço fixo e contíguo na memória;
Alocação dinâmica Variável alocadaocupa espaço variável e é criada segundo a
necessidade do programa.
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 23/241
http://www.computacao.gigamundo.com
Vantagens e Desvantagens da
Alocação Dinâmica
Se alocamos dinamicamente, podemos aumentar ediminuir o tamanho de nossa estrutura quando
quisermos! Entretanto, necessitaremos de mais algumas
operações para buscar, inserir e/ou removerinformações;
Além disso, um array (estático) de vinte posiçõesgeralmente ocupa menos espaço que uma listacujos elementos foram criados um a umdinamicamente.
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 24/241
http://www.computacao.gigamundo.com
Referências Bibliográficas
[Não foram definidas]
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 25/241
http://www.computacao.gigamundo.com
Matrizes(Aula 2)
Christiano Lima Santos
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 26/241
http://www.computacao.gigamundo.com
Sumário
Definição e Representação de Matrizes
Compactação de Matrizes – Matrizes Diagonais – Matrizes Triangulares – Matrizes Esparsas
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 27/241
http://www.computacao.gigamundo.com
Definição e Representação de Matrizes
Na Matemática, uma matriz pode serconsiderada um conjunto de informaçõesnuméricas que podem ser referenciadas pormeio de dois parâmetros, comumentechamados linha e coluna;
A =1 2 3 42 0 3 10 1 2 5
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 28/241
http://www.computacao.gigamundo.com
Definição e Representação de Matrizes
Na Computação, podemos representar asmatrizes matemáticas por meio de estruturasconhecidas como vetores ou arrays, ondecada posição/valor pode ser referenciada porum ou mais parâmetros (dependendo da
quantidade de dimensões de nosso vetor);
var A = array [1..3, 1..4] of real;
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 29/241
http://www.computacao.gigamundo.com
Definição e Representação de Matrizes
Enquanto que na Matemática uma matriz possuisempre duas dimensões, na Computação podemos
chamar qualquer vetor de matriz, podendo assim teruma ou mais dimensões;
– Matrizes unidimensionais;
– Matrizes bidimensionais;
– Matrizes n-dimensionais.
http://www computacao gigamundo com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 30/241
http://www.computacao.gigamundo.com
Compactação de Matrizes
Quanto memória ocupa uma matriz 5000 x5000 de reais? – Um valor real = 4 bytes; – Aproximadamente 100 MB!
E se somente alguns poucos elementos damatriz fossem diferentes de zero,poderíamos reduzir o tamanho dela?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 31/241
http://www.computacao.gigamundo.com
Compactação de Matrizes
Como representar de forma compactada:
– Matrizes Diagonais;
– Matrizes Triangulares;
– Matrizes Esparsas;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 32/241
http://www.computacao.gigamundo.com
Matrizes Diagonais
Os elementos da diagonal de uma matrizsão: a[1,1], a[2,2], a[3,3], ... a[n,n];
Podemos armazená-los, então, em umamatriz unidimensional de n elementos.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 33/241
http://www.computacao.gigamundo.com
Matrizes Triangulares
Podem ser superior ou inferior;
Podemos armazenar todos os elementos daparte triangular em uma matrizunidimensional de m elementos (inclui oselementos da diagonal).
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 34/241
http://www.computacao.gigamundo.com
Matrizes Esparsas
Podem ser n-dimensionais;
Podemos armazenar somente os elementosdiferentes de zero em uma matriz unidimensional;
Problemas: – Como saber qual o índice de cada elemento na matriz?
Armazenar também o índice (tupla índice-valor); – E se um dos elementos for alterado para um valor não-
nulo? Deve-se reservar algumas posições vazias para o caso de
incluir novos elementos.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 35/241
http://www.computacao.gigamundo.com
Exercícios De volta às aulas? De volta aos jogos. Vamos criar um simulador de exploração espacial (modo texto,
claro)! Crie um universo que possa ser “navegado
tridimensionalmente” por meio da indicação de trêscoordenadas X, Y e Z, onde o jogador precisa pilotar uma naveaté um dos planetas existentes. – O sistema de coordenadas de nosso “universo” vai de 0 a 4100
(para cada coordenada); – Temos um total de 100 planetas no espaço;
– Para facilitar para o jogador, cada vez que ele indicar ascoordenadas, dizer quão longe ele está do planeta mais próximo; – O jogo encerra quando ele encontrar um dos planetas; – Os planetas são criados em posições aleatórias a cada vez que é
gerada uma nova partida; – E há um total de combustível para o jogador, o qual é consumido
de acordo com a distância percorrida!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 36/241
ttp co putacao g ga u do co
Referências Bibliográficas VELOSO, Paulo, SANTOS, Clésio,
AZEREDO, Paulo, FURTADO, Antônio,Estruturas de Dados, Editora Campus Ltda
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 37/241
p p g g
Recursividade(Aula 3)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 38/241
p p g g
Sumário
Definição de Recursão Exemplo de Recursão Recursão versus Iteração Observações Referências Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 39/241
p p g g
Definição de Recursão Possibilidade de um objeto buscar definir-se
em função dele próprio;
Na Computação, um método é recursivoquando ele invoca a si próprio a fim de
resolver um problema;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 40/241
p p g g
Definição de Recursão
Na Matemática, podemos encontrar
claramente a recursividade na resolução deproblemas por meio de recorrência;
– Fatorial de um número;
– Potenciação;
– Seqüência de Fibonacci.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 41/241
p p g g
Exemplo de Recursão
Recorrência para encontrar um elemento daseqüência de Fibonacci: – x1 = 1; – x2 = 1;
– xn = xn-1 + xn-2;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 42/241
p p g g
Exemplo de Recursão
Função em Pascal:function fibonacci(n: integer): integer;
beginif (n < 1) then
fibonacci := 0
else if (n <= 2) thenfibonacci := 1
elsefibonacci := fibonacci(n-1) + fibonacci(n-2);
end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 43/241
Recursão versus Iteração Iteração na definição de algoritmos – cada um dos
“passos”/repetições de um comando de repetição
(“loop”);
Diversos problemas resolvidos de forma recursivapodem ser resolvidos de forma iterativa; – Chamadas recursivas precisam salvar o “contexto” atual da
execução do programa a fim de recuperá-lo após aexecução de cada chamada recursiva;
– A implementação do cálculo do fatorial de forma iterativa,por exemplo, consome menos memória e processamento.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 44/241
Recursão versus Iteração Por outro lado, há problemas que não podem ser
resolvidos de forma iterativa; – Percorrer uma árvore para encontrar um elemento, por
exemplo;
Além disso, recursão é muito útil na resolução de
diversos problemas que possam se beneficiar do“dividir -para-conquistar”, exemplos: – Ordenação por meio de quicksort ou mergesort; – Programação dinâmica; – Diversas técnicas de busca em grafos.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 45/241
Observações Quando escrevendo funções recursivas, atente-se a:
– Ordem em que cada comando deve aparecer dentro da
função – o resultado final pode ser totalmente diferente setrocarmos duas linhas de código de lugar!
– Definição de todos os casos base – se esquecermos dedefinir um dos casos base e o algoritmo procurar por eleem algum momento, ele não saberá que é um caso de
parada e continuará a sua execução, talvezindefinidamente! – Cuidado com a passagem de parâmetros por valor ou por
referência.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 46/241
Referências Bibliográficas COSTA, Raimundo M, Programação
Pascal, 1995
WIKIPÉDIA, Recursividade em Ciência daComputação, disponível em
http://pt.wikipedia.org/wiki/Recursividade_(ciência_da_computação)
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 47/241
Noções de Complexidade deAlgoritmos(Aula 4)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 48/241
Sumário Motivação Alguns Mitos
Como Medir a Eficiência deum Algoritmo? – Avaliação Empírica – Contagem do Número de
Operações Efetuadas – Determinação da
Complexidade Assintóticade um Algoritmo Notação O Notação Ω Notação θ
Principais Classes deComportamento Assintótico – Tabela Comparativa das
Principais Classes Os “Três Casos”
– O Melhor Caso – O Pior Caso – O Caso Médio
Calculando aComplexidade para cadaCaso
Referências Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 49/241
Motivação Quais os dois recursos de hardware mais
importantes para a execução de um
algoritmo? – Tempo de processamento; – Quantidade de memória consumida;
Devemos, então, observar quanto de cadarecurso nossos algoritmos consomem; – Temos que medir quanto de cada recurso nossos
programas utilizam!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 50/241
Motivação Um exemplo bem simples é o caso de dois
programas que precisam fazer a ordenação
de um grande conjunto de dados: – Cada qual deles pode usar uma abordagem bem
diferente do outro; – Desta forma, cada qual pode resolver o problema
com mais ou menos tempo, ocupando mais oumenos memória; – Como exímios Cientistas da Computação,
buscamos sempre compreender e trabalhar coma melhor solução possível!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 51/241
Alguns Mitos Basta um computador mais rápido para resolver o
problema;
– Pena que até mesmo um grande cluster com dezenas decomputadores não conseguem resolver eficientementealguns problemas somente por “força bruta”;
Ninguém efetua cálculo de complexidade ou busca
de solução mais eficiente em um sistema! – É, se você considerar somente os sistemas do tipo
“controle de locadora”, pois sistemas de tempo real,simulações físicas, sistemas para cálculos estatísticos eestimativas razoavelmente pesadas e tantos outrosprecisam!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 52/241
Alguns Mitos Por que eu tenho que aprender sobre isso?
Eu posso simplesmente contratar alguém! – Pois é, que tal alguém da área de Computação?
Ei, esse alguém é você!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 53/241
Como Medir a Eficiência de um
Algoritmo?
Avaliação empírica (medir o tempo deexecução);
Contagem do número de operaçõesefetuadas;
Determinação da complexidade assintóticade um algoritmo;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 54/241
Avaliação Empírica Experimento 1: Verificar o tempo que dois programas
levam para efetuar uma busca em um array e recuperarum dado; – Primeiro programa: 750 ns; – Segundo programa: 600 ns;
Qual programa é mais eficiente? – E se o primeiro foi executado em um core duo de 2,4 GHz
cada, e o segundo em um 486 DX2? – E se ambos foram executados na mesma máquina, mas o
segundo executou em paralelo com algum outro programa? – Somente por avaliação empírica, conseguimos ter certeza de
qual o programa mais eficiente?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 55/241
Considerações sobre a Avaliação
Empírica Em meu supercomputador o programa “rodou” normal...
– ... Mas nos computadores do cliente não!
Programas podem possuir “casos especiais” para alguns tiposde casos – Deve-se então aumentar o número de casos de testes tentando
cobrir o maior número possível de situações;
Em uma dada linguagem, um programa pode ser mais eficientedo que quando implementado em outra linguagem; – Não estamos analisando o algoritmo em si, mas somente o
programa!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 56/241
Contagem do Número de Operações
Efetuadas Experimento 2: Dado o algoritmo abaixo, vamos contar
quantas operações são necessárias para calcular fatorial(5):function fatorial (n: integer): longint;
var f, i: integer;begin
if (n < 0) thenf := -1
else
begin f := 1;for i := 1 to n do
f := f*i;end;
fatorial := f;end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 57/241
Contagem do Número de Operações
Efetuadas
No algoritmo anterior: – fatorial(1) 5 operações; – fatorial(5) 13 operações; – fatorial(10) 23 operações; – fatorial(n) 2*n + 3;
Perceba que para calcular o fatorial de umnúmero N qualquer, vamos executar 2*Noperações, ou seja, um número deoperações diretamente proporcional;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 58/241
Considerações do Número de
Operações Efetuadas Em Computação, geralmente não nos preocupamos com a
eficiência do algoritmo quando tratando poucos elementos – Se são poucos, por pior que nosso algoritmo seja, provavelmente
ele executará rápido e sem ocupar muito espaço! – 2*n + 3 operações parecem piores que n2 operações para n = 0, 1
ou 2;
Entretanto, quanto maior o número de elementos ou o valor do
dado de entrada... – Para n = 1.000, 2*n + 3 é 2003; – Mas e se nosso algoritmo executasse n2 operações? 1.000.000!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 59/241
Determinação da Complexidade
Assintótica de um Algoritmo
Definição de Complexidade – Quantidade de "trabalho" necessária para a execução de
um algoritmo, expressa em função das operaçõesfundamentais, as quais variam de acordo com o algoritmo,e em função do volume de dados;
Complexidade Assintótica – Trata-se de uma função que expressa a relação entre o
volume de dados ( n ) e o tempo ( t ) necessário para oprocessamento dos mesmos;
– No algoritmo do experimento 2, poderíamos dizer que:f(n) = 2*n + 3
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 60/241
Determinação da Complexidade
Assintótica de um Algoritmo
Notações O (“O Grande”), Ω (Omega) e θ (Theta);
Obs: Funções assintoticamente não-
negativas;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 61/241
Notação O Dadas duas funções f e g, diz-se que f está na
ordem O de g ( f = O(g) ) se:
f(n) ≤ c * g(n) Para algum c positivo e para todo n suficientementegrande.g(n) é, então, o limite assintótico superior (upperbound) de f(n)
Exemplos:3x2 + 5 = O ( x2 )x3 /2 = O ( x3)1 + 2 + 3 + ... + x = O ( x2 )
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 62/241
NotaçãoΩ
Dadas duas funções f e g, diz-se que f está na
ordem O de g ( f = Ω(g) ) se:
f(n) ≥ c * g(n) Para algum c positivo e para todo n suficientementegrande.g(n) é, então, o limite assintótico inferior (lowerbound) de f(n)
Exemplos:3x3 + 5 = Ω ( x2 )x3 /2 = Ω ( x3 /3)
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 63/241
Notaçãoθ
Dadas duas funções f e g, diz-se que f está
na ordem O de g ( f = θ(g) ) se:f(n) ≥ c1 * g(n) e f(n) ≥ c2 * g(n)
Para algum c1 e c2 positivos e para todo nsuficientemente grande.
Exemplo:3x3+ 5 = θ ( x3 )
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 64/241
Principais Classes de Comportamento
Assintótico O (1) : O uso do algoritmo independe do tamanho de n.
Neste caso as instruções do algoritmo são executadas
um número fixo de vezes; O (log n): ocorre tipicamente em algoritmos que
resolvem um problema transformando-o em problemasmenores;
O (n): linear – Um conjunto de operações de tamanhoconstante é aplicado a cada elemento da entrada;
O (n log n): Ocorre em algoritmos que resolvem umproblema quebrando-o em problemas menores,resolvendo cada um deles independentemente e depois
juntando as soluções;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 65/241
Principais Classes de Comportamento
Assintótico
O (n2): quadrático. Algoritmos desta ordem decomplexidade ocorrem quando os itens de dados são
processados aos pares, muitas vezes em um loopdentro de outro. Úteis para resolver problemas detamanhos relativamente pequenos;
O (nk): polinomial – OK para k pequeno;
O (kn), O (n!), O (nn): exponencial – Geralmente não sãoúteis sob o ponto de vista prático. Eles ocorrem nasolução de problemas quando se usa força bruta pararesolvê-los.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 66/241
Tabela Comparativa das Principais
Classes
CLASSE NOTAÇÂO O n=10 n=100 n=1000 ... n=1000000constante O(1) 1 1 1 1
logaritmico O(lg n) 3,32 6,64 9,97 19,93
linear O(n) 10 100 1000 1000000
O(n lg n) O(n lg n) 33,2 664 9970 199,3*10 5̂
quadrático O(n²) 100 10000 1000000 10 1̂2
cúbico O(n³) 1000 1000000 10 9̂ 10 1̂8exponencial O(2^n) 1024 10 3̂0 10 3̂01 10 3̂01030
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 67/241
Os “Três Casos”
Para qualquer algoritmo, sempre há situações em
que ele resolverá de forma muito rápida e outras emque “nem tanto”; – Exemplo: ordenação dos dados de um vetor
Se ele já estiver ordenado? Ótimo! E se os dados estiverem em ordem inversa? Dependendo do
algoritmo, pode ser muito ruim;
Desta forma, para determinar a eficiência de umalgoritmo, precisamos conhecer a sua complexidadepara o melhor caso, o pior caso e o caso médio.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 68/241
Melhor Caso Caso para o qual o algoritmo executa da
melhor forma possível: – Menor número de instruções; – Menor tempo de processamento necessário; – Menor consumo de memória.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 69/241
Pior Caso Ao contrário do melhor caso, este é o caso
para o qual o algoritmo executa da piorforma possível;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 70/241
Caso Médio A complexidade para o caso médio é dada
por meio de cálculo tempo médio esperadopara a resolução de um problema qualquer,independente de como os dados estão (seordenados ou não, etc);
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 71/241
Calculando a Complexidade Para Cada
Caso
Geralmente, é necessário conhecer qual ovolume de dados que atende a cada um doscasos e, então, busca-se definir a funçãomatemática que expressa o número deoperações necessárias para cada caso;
No caso de algoritmos recursivos, deve-sedeterminar primeiro a fórmula de recorrênciacapaz de expressá-los e, então, “resolvê-la”.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 72/241
Referências Bibliográficas
MADEIRA, Gonçalo, Complexidade
Computacional, disponível emhttp://w3.ualg.pt/~hshah/algoritmos/aula8/Aula8.htm
SILVA, Elton, Análise Assintótica da
Complexidade de Algoritmos, disponível emhttp://www.decom.ufop.br/prof/elton/cic210/cap2.pdf
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 73/241
Exercícios Sobre Matrizes,
Recursividade e Complexidade deAlgoritmos(Aula 5)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 74/241
Primeiro Exercício Implemente um programa capaz de armazenar e
recuperar dados de uma matriz triangular inferior;
Qual a ordem de complexidade desse algoritmopara: – Armazenar n elementos; – Para recuperar um elemento qualquer, dada a sua posição
na matriz inicial; – Para buscar a posição de um elemento qualquer, dado o
valor do elemento;
Você consegue identificar quais são os casos pior,médio e melhor?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 75/241
Segundo Exercício Implemente um programa que localiza uma
substring dentro de outra string;
Qual a ordem de complexidade desse algoritmopara: – Encontrar uma letra em uma frase de tamanho N;
– Encontrar uma palavra de tamanho K em uma frase detamanho N;
Você consegue identificar quais são os casos pior,
médio e melhor?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 76/241
Terceiro Exercício Implemente um programa que armazena os
telefones armazenados em ordem alfabética de
acordo com os nomes das pessoas seguindo aseguinte “fórmula”: – Toda vez que for inserir um novo telefone, procura qual
será a posição correta dele e, para inseri-lo ali, move antestodo mundo daquela posição em diante para uma após e,
então, copia seus dados para lá (inserção direta); Qual a ordem de complexidade deste algoritmo? Você consegue identificar quais são os casos pior,
médio e melhor?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 77/241
Quarto exercício Implemente a função de potenciação de
forma recursiva;
Qual a complexidade deste algoritmo?
Faça uma comparação das vantagens edesvantagens desta implementação emrelação à iterativa.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 78/241
Ponteiros e Alocação Dinâmica(Aula 6)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 79/241
Sumário Motivação; Definição de ponteiro; Tipos de ponteiro; Apontando para um endereço nulo; Apontando e recuperando uma variável;
Apontando e Invocando um Subprograma; Alocação Dinâmica de Memória; Alocando e desalocando memória; Referências Bibliográficas.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 80/241
Motivação Por que estudar alocação dinâmica se podemos
criar todas as estruturas de forma estática?
O que acontece em um programa com alocaçãoestática quando precisamos de estruturas maioresdo que as que foram criadas?
Ponteiros e alocação dinâmica permite-nos criardiversos Tipos Abstratos de Dados; – É fácil criá-los somente com alocação estática? Como
seria?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 81/241
Definição de ponteiro Tipo de variável que “aponta” para um outro
endereço de memória;
O conteúdo de uma variável ponteiro é o endereçode memória para o qual está apontando;
Um ponteiro pode referenciar e “des-referenciar”;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 82/241
Definição de ponteiro
Um ponteiro pode apontar para:
– Uma área com informação (uma variável ouconteúdo de uma variável);
– Uma rotina (procedimento ou função);
– Endereço nulo.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 83/241
Tipos de Ponteiro Tipado – irá interpretar o dado do endereço
referenciado segundo o seu tipo; – Declaração:
var p : ^integer;
Não-Tipado – não está associado a um tipo,
logo, é necessário fazer o typecasting dainformação referenciada a fim de acessá-la; – Declaração:
var p : Pointer;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 84/241
Apontando para um endereço nulo Em Pascal, nil representa um endereço nulo que
qualquer ponteiro pode apontar;
ponteiro := nil;
if ponteiro = nil thenwriteln(„Não está apontando‟)
elsewriteln(„Está apontando para ‟, ponteiro);
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 85/241
Apontando e Recuperando uma
variávelprogram ponteiro1;uses crt;var p: ^integer;
a: integer;BEGIN
a := 12;p := @a;
writeln(„O endereço de a é: ‟, p); writeln(„O valor de a é: ‟, p^); p^ := 6;writeln(„O novo valor de a é: ‟, p^, „. Confirmando: ‟, a); readkey;
END.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 86/241
Apontando e Invocando um
Subprogramaprogram ponteiro2;uses crt;var D: procedure(Arg: Byte);
procedure rotina1(Arg: Byte);Beginwriteln('Rotina 1 recebeu ', Arg);
end;procedure rotina2(Arg: Byte);Begin
writeln('Rotina 2 recebeu ', Arg);end;
BEGIND := @rotina2;D(10); { Irá imprimir: 'Rotina 2 recebeu 10' }
END.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 87/241
Alocação Dinâmica de Memória É a criação (reserva) de um endereço de
memória para uma dada variável do tipo
ponteiro;
Geralmente, quando alocamos
dinamicamente um endereço de memória,devemos desalocá-la (na alocação estática,o compilador é encarregado disso).
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 88/241
Alocando e Desalocando Memóriaprogram ponteiro3;uses crt;var p: ^integer;BEGIN
new(p);p^ := 12;writeln(„Endereço apontado: ‟, p);
writeln(„Valor armazenado: ‟, p^); readkey;dispose(p);
END.
Não confunda nil com new!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 89/241
Referências Bibliográficas Blog de João Morais,
http://blog.joaomorais.com.br/2008/08/23/po
nteiros.html
http://www2.dc.ufscar.br/~bsi/materiais/ed/u7
.html
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 90/241
Listas(Aula 7)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 91/241
Sumário
Definição de Lista Características Tipos de Implementação
– Lista Seqüencial – Lista Encadeada ou Dinâmica
Outros Tipos de Listas Implementação de uma Lista Referências Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 92/241
Definição de Lista
TAD que permite representação emanipulação de seus elementos de forma
linear;
Também chamada lista linear;
L e1, e2, ... , en;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 93/241
Características
Uma coleção de dados homogênea;
Itens dispostos em seqüência;
Quantificável;
Ordenável;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 94/241
Tipos de Implementação
Seqüencial
Encadeada ou Dinâmica
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 95/241
Lista Seqüencial
Os itens são armazenados em posiçãocontígua na memória;
Podem ser implementadas por meio de umarray!
O programa executa um determinado cálculopara encontrar a posição na memória emque se encontra o elemento ei;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 96/241
Lista Encadeada ou Dinâmica
A lista cresce dinamicamente, isto é, cada novoelemento é criado e inserido nela em tempo de
execução; Se é criado em tempo de execução, precisamos
usar ponteiros... Onde estará o ponteiro para cadaelemento?
– Cada elemento possui o ponteiro para o próximo elemento; Listas podem ser encadeadas, duplamente
encadeadas ou n-uplamente encadeadas (sódepende de sua criatividade)!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 97/241
Outros Tipos de Listas
Podemos precisar de listas que satisfaçamcertas restrições quanto à forma de
recuperar um elemento ou de inserção domesmo;
– Pilhas;
– Filas.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 98/241
Implementação de uma Lista
Lista Seqüencialvar lista: array [1..N] of integer;
Lista Encadeadatype PNo = ^TNo;
TNo = record
valor: integer;proximo: PNo;end;
var lista: TNo;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 99/241
Referências Bibliográficas
[Não foram definidas]
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 100/241
Buscas em Listas(Aula 8)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 101/241
Sumário
Definição de Busca Tipos de Busca Busca Seqüencial
– Implementação – Complexidade
Busca Binária – Implementação – Complexidade
Busca Interpolada – Implementação
– Complexidade Comparando os Três
Métodos Referências
Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 102/241
Definição de Busca
Operação de percurso de uma estrutura dedados e recuperação de uma informação
baseado em algum campo-chave;
Recuperação de informações em uma lista éuma operação importante e o tempo que
operações de inserção, remoção e buscalevam para serem processadas afetamdiretamente a eficiência de um algoritmo.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 103/241
Tipos de Busca
Busca Seqüencial baseia-se no percurso detodos os elementos de uma lista de formaseqüencial;
Busca Binária baseia-se no percurso doselementos de uma lista levando em consideração ovalor de chave esperado e o valor encontrado;
Busca Interpolada similar à busca binária,introduz cálculo de próxima posição a ser verificadalevando em consideração os valores dos“elementos-limite”.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 104/241
Busca Seqüencial
“Se você não sabe por onde começar,
comece pelo começo”;
Não se conhece uma ordenação dentro dalista;
Somos forçados a verificar um por um.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 105/241
Busca Seqüencial - Implementação
function buscaSeq(lista: TLista; tamanho, chave: integer): integer;var i : integer;Begin
For i := 1 to tamanho doIf lista[i] = chave thenBegin
buscaSeq := i;exit;End;
buscaSeq := -1;End;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 106/241
Busca Seqüencial - Complexidade
Qual a complexidade para:
– O melhor caso;
– O pior caso;
– O caso médio.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 107/241
Busca Binária
Quando os elementos de uma lista estãoordenados segundo um campo-chave,podemos tirar proveito disso; – O primeiro elemento é o menor;
– O último elemento é o maior; – O elemento do meio... é o do meio!
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 108/241
Busca Binária
Suponha uma lista com valores ordenados de forma crescente; Dado um intervalo [A, B] (inicialmente, A é 1 e B é o tamanho da
lista), calculo um elemento X = floor((A + B) / 2); Se lista[X] é o valor que procuro, retorno a posição / elemento
encontrado; Senão, se lista[X] é maior que o valor que procuro, então devo
olhar o intervalo que possui os valores menores que lista[X], ouseja, [A, X-1];
Senão, se lista[X] é menor que o valor que procuro, então devoolhar o intervalo que possui os valores maiores que lista[X], ouseja, [X+1, B];
Repito todo o processo até encontrar (ou não!) o elemento.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 109/241
Busca Binária - Implementação
function buscaBin(lista: TLista; tamanho, chave: integer): integer;var A, B, X: integer;Begin
A := 1;
B := tamanho;While (A <= B) doBegin
X := floor( (A + B) / 2);If lista[X] = chave thenBegin
buscaBin := X;exit;
EndElse If lista[X] < chave then
A := X + 1Else
B := X - 1;
End;buscaBin := -1;
End;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 110/241
Busca Binária - Complexidade
Qual a complexidade para:
– O melhor caso;
– O pior caso;
– O caso médio.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 111/241
Busca Interpolada
Similar à busca binária, leva em conta aordenação dos dados de uma lista;
Entretanto, em vez de “olhar” sempre o
elemento mediano, efetua um cálculo quebusca estimar onde o elemento desejadodeve estar.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 112/241
Busca Interpolada
Se tenho uma lista ordenada crescente com50 elementos, o primeiro é o 1 e o último é o
1000, onde provavelmente estará o 999?
– Próximo do início;
– No meio;
– Próximo do fim.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 113/241
Busca Interpolada
Basta mudar o cálculo do termo X:
X := 1 + floor((tamanho - 1)*(chave – lista[A])/(lista[B] – lista[A]));
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 114/241
Busca Interpolada - Implementação
function buscaInterp(lista: TLista; tamanho, chave: integer): integer;var A, B, X: integer;Begin
A := 1;B := tamanho;While (A <= B) doBegin
X := 1 + floor((tamanho - 1)*(chave – lista[A])/(lista[B] – lista[A]));If lista[X] = chave thenBegin
buscaInterp := X;exit;
EndElse If lista[X] < chave thenA := X + 1
ElseB := X - 1;
End;buscaInterp := -1;
End;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 115/241
Busca Interpolada - Complexidade
Qual a complexidade para:
– O melhor caso;
– O pior caso;
– O caso médio.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 116/241
Comparando os Três Métodos
Em que ocasiões o busca seqüencial é melhor?
O que é melhor: busca interpolada ou buscabinária?
E se na busca binária / interpoladacomparássemos também os valores dosextremos com o valor da chave, melhoraríamosa eficiência?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 117/241
Referências Bibliográficas
[Não foram definidas]
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 118/241
Listas Encadeadas(Aula 9)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 119/241
Sumário
Definição de Lista Encadeada Listas Encadeadas Estáticas
Listas Encadeadas Dinâmicas Listas Encadeadas Simples Operações em Listas Encadeadas Definindo nossa Lista Encadeada
Inserção na Lista Encadeada Busca na Lista Encadeada Remoção na Lista Encadeada Referências Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 120/241
Definição de Lista Encadeada
Toda lista linear onde cada elemento(geralmente chamado nó) possui algum
apontador para o próximo elemento;
Esse encadeamento produz a estruturalinear da lista.
| | |...
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 121/241
Lista Encadeadas Estáticas
Alguns autores considerama possibilidade de listas
encadeadas criadas deforma estática;
Exemplo de lista
encadeada não dinâmica;
O apontadores sãointeiros.
0 4
1 Carlos 5
2 Erica -1
3 Beth 1
4 Ana 3
5 Davi 2
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 122/241
Listas Encadeadas Dinâmicas
Permitem a inserção de novos elementoscom menos restrições quanto à posição (nãoprecisa ser contígua) ou quantidade.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 123/241
Listas Encadeadas Simples
Cada nó possui um único apontador para o próximonó;
Para fins de facilitar a inserção, alteração (quandoordenada), remoção e busca pelo valor presente emum nó qualquer da lista, podemos eleger um campo(ou atributo) do nó para ser o campo-chave do
mesmo;
Podem ser implementadas com listas seqüenciaisou dinâmicas.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 124/241
Operações em Lista Encadeada
Criação;
Inserção;
Busca / Recuperação;
Remoção.
http://www.computacao.gigamundo.com
Definindo Nossa Lista Encadeada
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 125/241
Definindo Nossa Lista Encadeada(opção 1)
type PNo = ^TNo;TNo = record
valor: integer;proximo: PNo;
end;
TLista = PNo;
http://www.computacao.gigamundo.com
Definindo Nossa Lista Encadeada
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 126/241
Definindo Nossa Lista Encadeada(opção 2)
type PNo = ^TNo;TNo = record
valor: integer;proximo: PNo;
end;TLista = record
primeiro: PNo;
ultimo: PNo;tamanho: integer;
end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 127/241
Inserção na Lista Encadeada
//Inserção no fim da Listaprocedure inserirFim(var a: TLista; var v: integer);var p, t: PNo;Begin
new(p);p^.valor := v;p^.proximo := nil;if a = nil then
a := pelse
begin t := a;while (t^.proximo <> nil) do
t := t^.proximo;t^.proximo := p;
end;end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 128/241
Inserção na Lista Encadeada
//Inserção no início da Listaprocedure inserirInicio(var a: TLista; var v: integer);
var p, t: PNo;Begin
new(p);
p^.valor := v;p^.proximo := a;a := p;
end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 129/241
Inserção na Lista Encadeada
//Inserção ordenadaprocedure inserirOrdenado(var a: TLista; var v: integer);var p, t: PNo;Begin
new(p);p^.valor := v;
p^.proximo := nil;if a = nil thena := p
else if a^.valor >= v thenbegin
p^.proximo := a;a := p;
endelsebegin
t := a;
while ((t^.proximo <> nil) && ((t^.proximo^).valor < v)) dot := t^.proximo;
if (t.proximo = nil) thent^.proximo := p
elsebegin
p^.proximo := t^.proximo;t^.proximo := p;
end;end;
end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 130/241
Busca na Lista Encadeada
//Busca Seqüencialfunction buscaSeq(a: TLista; v: integer): PNo;
var t: PNo;Begin
t := a;
while ((t <> nil) && (t^.valor <> v))t := t^.proximo;buscaSeq := t;
End;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 131/241
Busca na Lista Encadeada
Em Listas Encadeadas Dinâmicas, Busca
Binária ou Interpolada, é possível? Hávantagens em seu uso em relação à BuscaSeqüencial?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 132/241
Remoção na Lista Encadeada
Como seria a remoção de um elemento em uma listaencadeada? E a remoção de todos os elementos?
No caso de remoção de um elemento (e), tomar o cuidado paragarantir que o anterior (t) dele passe a apontar para o sucessordele (t.proximo := e.proximo);
No caso de remoção de todos os elementos, a idéia é percorrertodos os elementos da lista, removendo-os (dispose);
Cuidado para não remover um elemento antes de guardar areferência para o próximo como saber quem é o próximoelemento de um elemento que não mais existe?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 133/241
Referências Bibliográficas
[Não foram definidas]
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 134/241
Pilhas & Filas(Aula 10)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 135/241
Sumário
Definição de Pilha – Exemplo de Pilha no Mundo Real – Implementação de uma Pilha
Definição de Fila – Exemplo de Fila no Mundo Real –
Implementação de uma Fila Exercícios Referências Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 136/241
Definição de Pilha
Toda lista linear onde o último elemento aentrar é o primeiro a sair (ou o primeiro a
entrar é o último a sair, FILO);
Para satisfazer esta condição, basta que a
inserção e remoção sejam feitas na mesmaextremidade da lista (head); – Obviamente, não é necessário ordenar;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 137/241
Exemplo de Pilha no Mundo Real
Um baralho de cartas, colocadas uma a umasobre a mesa, umas sobre as outras,
formando um monte;
A carta mais ao topo (a primeira a ser
removida) foi a última a ser colocada sobre omonte;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 138/241
Implementação de uma Pilha
type PNo = ^TNo;TNo = record
valor: integer;
proximo: PNo;end;
TPilha = recordhead: PNo;
end;
function push(var pilha: TPilha; valor: integer): Boolean;
function pop(var pilha: TPilha): integer;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 139/241
Implementação de uma Pilha
Push: Nada mais é que o nosso métodoinserirInicio!
Pop: Como devemos inserir e remover damesma extremidade da lista, devemos então
remover do início, devolvendo então o valordaquele elemento.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 140/241
Implementando o Método Push
function push(var pilha: TPilha; valor: integer):Boolean;
var p, t: PNo;
Beginnew(p);p^.valor := v;p^.proximo := pilha.head;
pilha.head := p;push := true;end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 141/241
Implementando o Método Pop
function pop(var pilha: TPilha): integer;var p: PNo;Begin
if (pilha.head = nil) thenpop := -1
elsebeginp := pilha.head;pilha.head := pilha.head .̂proximo;pop := p^.valor;dispose(p);end;
end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 142/241
Definição de Fila
Toda lista linear onde o primeiro elemento aentrar é o primeiro a sair (FIFO);
Para satisfazer esta condição, basta que ainserção seja feita em uma extremidade (tail)
da lista e a remoção seja feita na outraextremidade (head); – Obviamente, também não é necessário ordenar;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 143/241
Exemplo de Fila no Mundo Real
Muitas coisas são ordenadas por fila;
A fila de um banco por exemplo; – ... e a fila do RESUN?
Muitos processos e requisições em umcomputador são organizados e gerenciadospor meio de filas.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 144/241
Implementação de uma Fila
type PNo = ^TNo;TNo = record
valor: integer;
proximo: PNo;end;TFila = record
head: PNo;tail: PNo;
end;
function push(var pilha: TFila; valor: integer): Boolean;
function pop(var pilha: TFila): integer;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 145/241
Implementação de uma Fila
Push: Apesar de inserir no final, nós nãoprecisaremos percorrer toda a fila para
inserir no fim; – Nós mantemos um ponteiro para o último
elemento!
Pop: A remoção continua sendo feita nacabeça, o que facilita muito as coisas.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 146/241
Implementando o Método Push
function push(var fila: TFila; valor: integer): Boolean;var p, t: PNo;Begin
new(p);p^.valor := v;p^.proximo := nil;if (fila.tail = nil) then
fila.head := pelse
fila.tail^.proximo := p;fila.tail := p;push := true;
end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 147/241
Implementando o Método Pop
function pop(var fila: TFila): integer;var p: PNo;Begin
if (fila^.head = nil) thenpop := -1;
elsebegin
p := fila;fila^.head := fila^.head^.proximo;if (fila^.head = nil) then
fila^.tail := nil;pop := p^.valor;dispose(p);
end;end;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 148/241
Exercício
Crie um jogo para ser disputado por duas pessoas com dois“modos” (o modo pilha e o modo fila) e a opção de sair;
Primeiro, Deve-se escolher quantos números serão
embaralhados e ocultos e qual o modo de organização dosmesmos; Em segundo lugar, o jogo deverá ir inserindo cada número (0
<= K <= 9) na pilha/fila, mostrando um de cada vez na tela(lembre-se de limpar ela por inteiro a cada número mostrado);
Após isso, os jogadores devem alternar-se tentando adivinharqual o próximo número a ser removido do jogo. Ganha quemnão errar. Caso acabem todos os números, declarar empate;
Quando os jogadores escolherem sair, mostrar o placar final eencerrar o jogo.
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 149/241
Referências Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 150/241
Outros Tipos de Listas(Aula 11)
Christiano Lima Santos
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 151/241
Sumário
Lista Duplamente Encadeada – Declaração
– Operações Lista Circular
– Declaração – Operações
Exercícios Referências Bibliográficas
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 152/241
Lista Duplamente Encadeada
Uma estrutura de dados linear que se utiliza de doisponteiros (um apontando o elemento anterior e outroo posterior) a fim de permitir percorrer a mesma nãosomente avançando, como também recuando;
I | | | |...
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 153/241
Lista Duplamente Encadeada
Vantagem: – Facilidades na hora de procurar um elemento,
principalmente se o mesmo estiver antes da atualposição pesquisada;
Desvantagem: – Nas inserções, remoções e alterações, isso
significa mais ponteiros para atualizar, o quepode levar programadores não muito bons acometer falhas (o que não é o caso de vocês!).
http://www.computacao.gigamundo.com
Declaração de uma Lista Duplamente
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 154/241
ç pEncadeada (opção 1)
type PNo = ^TNo;TNo = record
valor: integer;anterior: PNo;proximo: PNo;
end;TLista = PNo;
http://www.computacao.gigamundo.com
Declaração de uma Lista Duplamente
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 155/241
ç pEncadeada (opção 2)
type PNo = ^TNo;TNo = record
valor: integer;
anterior: PNo;proximo: PNo;
end;TLista = record
primeiro: PNo;ultimo: PNo;tamanho: integer;
end;
http://www.computacao.gigamundo.com
Operações em Lista Duplamente
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 156/241
p ç pEncadeada
Operações Básicas: – Criação;
– Inserção; – Busca / Recuperação; – Remoção;
Como seriam essas operações em uma ListaDE se ela não estiver ordenada? E se estiverordenada?
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 157/241
Lista Circular
Estrutura de dados linear em que o último elemento apontapara o primeiro;
Lista em que todo elemento possui um “sucessor” (o sucessor
do último é o primeiro elemento);
Pode-se adotar encadeamento simples, duplo ou outroqualquer;
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 158/241
Lista Circular
Observações: – Não há mais elementos apontando para nil, logo
não podemos mais identificar o último elementodesta forma! Mas podemos parar quando percebermos que o
próximo é o “primeiro elemento” (apontado pela lista
circular);
– Podemos até mesmo deslocar a “cabeça” da lista
sem que se perca a referência para nenhum doselementos; Mas isso não é interessante caso a lista seja ordenada.
http://www.computacao.gigamundo.com
Declaração de uma Lista Circular
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 159/241
(opção 1)
type PNo = ^TNo;TNo = record
valor: integer;proximo: PNo;
end;
TLista = PNo;
http://www.computacao.gigamundo.com
Declaração de uma Lista Circular
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 160/241
(opção 2)
type PNo = ^TNo;TNo = record
valor: integer;proximo: PNo;
end;TLista = record
primeiro: PNo;tamanho: integer;
end;
http://www.computacao.gigamundo.com
O õ Li Ci l
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 161/241
Operações em Lista Circular
Operações Básicas: – Criação;
– Inserção; – Busca / Recuperação; – Remoção;
Como seriam essas operações em uma ListaCircular se ela não estiver ordenada? E seestiver ordenada?
http://www.computacao.gigamundo.com
E í i
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 162/241
Exercícios
Implemente as operações de inserção,busca, alteração e remoção para:
– Lista duplamente encadeada não-ordenada;
– Lista duplamente encadeada ordenada;
– Lista circular.
http://www.computacao.gigamundo.com
R f ê i Bibli áfi
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 163/241
Referências Bibliográficas
[Não foram definidas]
http://www.computacao.gigamundo.com
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 164/241
Árvores(Aula 12)
Christiano Lima Santos
http://www.computacao.gigamundo.com
S á i
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 165/241
Sumário
Definição de Árvore Representação Gráfica Classificação das Árvores Declaração de uma Árvore
N-ária Declaração de uma Árvore
Não N-ária
Nível de um Nó Altura ou Profundidade de
uma Árvore Percurso de uma Árvore Inserção em uma Árvore
Remoção em uma Árvore Árvores Binárias Árvores Binárias de Busca Inserção em uma Árvore
Binária de Busca Busca em uma Árvore
Binária de Busca
Deleção em uma ÁrvoreBinária de Busca Comparações entre Ordens
de Complexidade Referências Bibliográficas
http://www.computacao.gigamundo.com
D fi i ã d Á
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 166/241
Definição de Árvore
Estrutura de dados não linear;
Um grafo totalmente conexo e acíclico;
Analogia a uma árvore (reino vegetal): – Raiz; – Folhas; – “galhos” ou sub-árvores – conceito de poda.
http://www.computacao.gigamundo.com
R t ã G áfi
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 167/241
Representação Gráfica
http://www.computacao.gigamundo.com
Cl ifi ã d Á
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 168/241
Classificação das Árvores
Uma árvore pode ser classificada dediversas formas diferentes, uma delas é pelo
número máximo de nós-filhos que cada nó-pai pode ter: – Binária (dois nós); – Ternária (três nós); – Quaternária (quatro nós); – N-ária (N nós); – Não N-ária (quando não conhecemos ou não há
um número máximo de nós-filhos para cada nó-pai).
http://www.computacao.gigamundo.com
Declaração de uma Árvore N ária
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 169/241
Declaração de uma Árvore N-ária
const N = 2;type
PNo = ^Tno;TNo = record
valor: integer;filhos: array [1..N]
of PNo;end;
TArvore = PNo;
http://www.computacao.gigamundo.com
D l ã d Á Nã N á i
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 170/241
Declaração de uma Árvore Não N-ária
typePNo = ^TNo;
TNo = recordvalor: integer;irmao: PNo;filho: PNo;
end;TArvore = PNo;
http://www.computacao.gigamundo.com
Nível de um Nó
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 171/241
Nível de um Nó
Refere-se à distância do mesmo até a raiz;
0
1
2
3
http://www.computacao.gigamundo.com
Alt P f did d d Á
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 172/241
Altura ou Profundidade de uma Árvore
É o nível máximo que um nó da árvoreatinge;
0
1
2
3
A altura desta árvore é 3! Ela possui 4 níveis!
http://www.computacao.gigamundo.com
Percurso de uma Árvore
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 173/241
Percurso de uma Árvore
Também conhecido como travessia;
Consiste em percorrer (em uma dada ordem) todosos nós de um árvore ou até encontrar algum quesatisfaça ao problema em questão;
É empregado, por exemplo, na busca de um nó apartir de uma chave;
http://www.computacao.gigamundo.com
Percurso de uma Árvore
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 174/241
Percurso de uma Árvore
Tipos – Pré-ordem / pre-order;
– Em-ordem / in-order; – Pós-ordem / pos-order.
http://www.computacao.gigamundo.com
Percurso Pré Ordem
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 175/241
Percurso Pré-Ordem
Processa primeiro a informação do nó atual,para só então processar a informação deseus filhos;
função x (no)Início
processa no;aplica função x para cada filho de no;
Fim;
http://www.computacao.gigamundo.com
Percurso Pré Ordem
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 176/241
Percurso Pré-Ordem
function buscaTelefone(no: PNode; nome: String): String;var s: String;Begin
if no = nil thenbuscaTelefone := “”
else if no.nome = nome thenbuscaTelefone := no.telefone
elsebegin
s := buscaTelefone(no.filho1, nome);if s <> “” then
buscaTelefone := selsebegin
s := buscaTelefone(no.filho2, nome);if s <> “” then
buscaTelefone := selse
buscaTelefone := “”; end;
end;End;
http://www.computacao.gigamundo.com
Percurso Em Ordem
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 177/241
Percurso Em-Ordem
Neste caso, um filho (ou parte dos filhos) éprocessado primeiro, o nó atual é então processadoe, por fim, o outro filho (ou parte dos filhos);
função x (no)Início
aplica função x para parte dos filhos de no;processa no;aplica função x para parte dos filhos de no;
Fim;
http://www.computacao.gigamundo.com
Percurso Pós Ordem
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 178/241
Percurso Pós-Ordem
Neste caso, todos os filhos do nó atual devem serprocessados antes que o mesmo o seja;
função x (no)Início
aplica função x para cada filho de no;
processa no;Fim;
http://www.computacao.gigamundo.com
Inserção em uma Árvore
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 179/241
Inserção em uma Árvore
Cria-se o novo nó (método new) e popula-seo mesmo com as informações desejadas;
Pode utilizar algum critério para determinarem qual nó e em qual posição o novo nódeverá ficar;
O pai deve apontar para o filho.
http://www.computacao.gigamundo.com
Remoção em uma Árvore
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 180/241
Remoção em uma Árvore
Utiliza-se de um outro ponteiro ( t ) para apontarpara o objeto que se deseja remover;
Após isso, reorganiza-se seus filhos a fim de queseu pai possa apontara para esses e ninguém ficar“abandonado”, eliminando o vínculo entre a árvore e
o nó-alvo; Por fim, elimina-se o nó (método dispose); E se nosso objetivo for remover TODOS os nós de
uma árvore, qual método de percurso vocêutilizaria? Por quê?
http://www.computacao.gigamundo.com
Árvores Binárias
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 181/241
Árvores Binárias
Árvores onde cada nó possui no máximo dois filhos;
Muito usadas em computação;
Cada nível pode ter no máximo 2N nós, onde N é ovalor do nível;
Quantidade de níveis que uma árvore binária com Nnós pode ter: – Máximo: N; (árvore degenerada) – Mínimo: Log2 N + 1; (árvore completa)
http://www.computacao.gigamundo.com
Árvores Binárias
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 182/241
Árvores Binárias
Dado um nó qualquer, ele possuirá uma sub-árvore esquerda e uma sub-árvore direita
(podendo qualquer uma delas ou ambas nãopossuir elementos);
Sub-árvoreesquerda
Sub-árvore
direita
http://www.computacao.gigamundo.com
Árvores Binárias de Busca
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 183/241
Árvores Binárias de Busca
Ou árvores de busca binária (tanto faz!);
São árvores em que é possível determinar em que
direção buscar um dado nó a partir do valor do pai elevando-se em consideração alguma regra quanto àdisposição dos filhos; – Nós com valores menores que o pai à esquerda, nós com
valores maiores que o pai à direita; – Nós que satisfazem uma condição expressa pelo pai de um
lado e nós que não satisfazem do outro;
O que acontecerá se a árvore de busca não estiverbem balanceada?
http://www.computacao.gigamundo.com
Inserção em uma Árvore Binária deBusca
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 184/241
Busca
function inserir(var arvore: TArvore; valor:integer): boolean;
var p, t: PNode;Begin
new(p);
p.valor := valor;p.filho[1] := nil;p.filho[2] := nil;if arvore = nil then
arvore := pelsebegin
t := arvore;
while t <> nil dobegin
if (t^.valor > valor) thenbegin
if t^.filho[1] = nil thenbegin
t^.filho[1] := p; inserir := true; exit;
end
elset := t^.filho[1];
endelse if t^.valor < valor thenbegin
if t^.filho[2] = nil thenbegint^.filho[2] := p; inserir := true; exit;
endelse
t := t^.filho[2];endelsebegin
inserir := false;exit;
end;end;inserir := false;
end;
http://www.computacao.gigamundo.com
Busca em uma Árvore Binária deBusca
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 185/241
Busca
function buscar(arvore:TArvore; valor: integer):PNode;
var t:PNode;
Beginif (arvore = nil) then
buscar := nilelsebegin
t := arvore;while (t <> nil) dobegin
if t^.valor > valor thent := t^.filho[1]
else if t^.valor < valorthen
t := t^.filho[2]elsebegin
buscar := t;exit;
end;end;buscar := nil;
end;end;
http://www.computacao.gigamundo.com
Deleção em uma Árvore Binária deBusca
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 186/241
Busca
Caso 1: Remover um nó que não possuifilhos
http://www.computacao.gigamundo.com
Deleção em uma Árvore Binária deBusca
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 187/241
Busca
Caso 2: Remover um nó que possui um filho
http://www.computacao.gigamundo.com
Deleção em uma Árvore Binária deBusca
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 188/241
Busca
Caso 3: Remover um nó que possui dois filhos – Escolher o nó mais à esquerda da sub-árvore direita (ou mais à
direita da sub-árvore esquerda) para “substituí-lo;
– Com isso, teremos que remover o nó selecionado de onde eleestá abordagem recursiva.
http://www.computacao.gigamundo.com
Comparações entre Ordens deComplexidade
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 189/241
Complexidade
http://www.computacao.gigamundo.com
Referências Bibliográficas
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 190/241
Referências Bibliográficas
[Não foram definidas]
http://www.computacao.gigamundo.com
Árvores AVL
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 191/241
Árvores AVL(Aula 13)
Christiano Lima Santos
http://www.computacao.gigamundo.com
Sumário
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 192/241
Sumário
Definição de Árvore AVL Representação Gráfica Operações
– Inserção – Remoção – Rotação
Simples – À Esquerda – À Direita
Dupla – Pesquisa
Referências Bibliográficas
http://www.computacao.gigamundo.com
Definição de Árvore AVL
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 193/241
Definição de Árvore AVL
Trata-se de uma Árvore de Busca BináriaAuto-Balanceada, isto é, que mantém o
balanceamento de sua árvore em cadaoperação executada;
A maior diferença possível entre os níveis dedois nós-folhas é 1;
http://www.computacao.gigamundo.com
Representação Gráfica
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 194/241
Representação Gráfica
Árvore Não-Balanceada Árvore AVL (Balanceada)
http://www.computacao.gigamundo.com
Operações
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 195/241
Operações
Inserção
Remoção
Rotação
– Simples (à esquerda ou à direita); – Dupla.
http://www.computacao.gigamundo.com
Inserção
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 196/241
Inserção
Efetua-se a busca pelo nó (igual a qualqueroutra árvore de busca binária);
Insere-se o nó;
Verifica-se se ela está balanceada, caso nãoesteja, efetuar rotação (simples ou dupla) atéque esteja.
http://www.computacao.gigamundo.com
Remoção
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 197/241
e oção
Efetua-se a busca pelo nó (igual a qualquer outraárvore de busca binária);
Rotaciona-se até que o mesmo seja um nó-folha eremova-o; – Por quê? A remoção de um nó sem filhos é o caso mais
simples!
Verifique se a árvore se encontra balanceada, casonão esteja, efetue rotações.
http://www.computacao.gigamundo.com
Rotação
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 198/241
ç
Operação em que a ordem dos nós em umaárvore de busca binária pode ser invertida afim de manter o balanceamento da mesma;
Pode ser simples (um único passo,rotacionando à esquerda ou à direita) ou
dupla (efetuando mais de uma vez a rotação,em qualquer combinação de rotaçõessimples);
http://www.computacao.gigamundo.com
Rotação Simples
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 199/241
ç p
Ocorre quando o nó desbalanceado e o seu
filho estão no mesmo sentido de inclinaçãoda árvore;
Formam “uma linha reta”;
http://www.computacao.gigamundo.com
Rotação à Esquerda
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 200/241
ç q
Dado um nó X com um filho à direita Y e este tendo umfilho à esquerda Z;
Pseudo-código:Seja Y o filho à direita de X;Torne X o filho à esquerda de Y;
Torne o filho à esquerda de Y (Z) o filho à direita deX;
http://www.computacao.gigamundo.com
Rotação à Direita
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 201/241
ç
Dado um nó X com um filho à esquerda Y e este tendoum filho à direita Z;
Pseudo-código:Seja Y o filho à esquerda de X;Torne X o filho à direita de Y;
Torne o filho à direita de Y (Z) o filho à esquerda deX;
http://www.computacao.gigamundo.com
Rotação Dupla
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 202/241
ç p
Ocorre quando o nó desbalanceado está em
um sentido da inclinação e o seu filho emoutro;
Formam, assim, “um joelho”.
http://www.computacao.gigamundo.com
Pesquisa
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 203/241
q
O tempo médio para encontrar um elemento
em uma árvore AVL é da ordem de O (log n)
Aproximadamente 1.44 log2 n no pior caso
http://www.computacao.gigamundo.com
Referências Bibliográficas
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 204/241
g
http://www.csi.uottawa.ca/~stan/csi2514/appl
ets/avl/BT.html - Aplicação interessante paracompreender árvores AVL
http://pt.wikipedia.org/wiki/Árvore_AVL
http://www.computacao.gigamundo.com
Classificação de Dados
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 205/241
Classificação de Dados(Aula 14)
Christiano Lima Santos
http://www.computacao.gigamundo.com
Sumário
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 206/241
Por que estudar métodos para classificação dedados?
Alguns tipos de algoritmos de classificação
Seleção Direta (Selection Sort) Inserção Direta (Insertion Sort) Método da Bolha (Bubble Sort) Método do Balde (Bucket Sort) QuickSort MergeSort HeapSort Referências Bibliográficas
http://www.computacao.gigamundo.com
Por que estudar métodos paraclassificação de dados?
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 207/241
ç
Qual a importância da ordenação dos dados quandose deseja uma busca mais eficiente ou classificar osmesmos segundo algum critério?
Há muita diferença entre o tempo de processamentode um algoritmo de ordenação O(n log n) e o tempode um algoritmo de ordenação O(n2), quandoexecutados sobre uma base com um milhão dedados?
Sendo assim, torna-se interessante o estudo dosdiversos tipos de algoritmos de ordenação?
http://www.computacao.gigamundo.com
Alguns Tipos de Algoritmos deClassificação
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 208/241
ç
Seleção direta (selection sort) Inserção direta (insertion sort)
Método da Bolha (bubble sort) Método do “Balde” (bucket sort) Quicksort
Mergesort Heapsort
http://www.computacao.gigamundo.com
Seleção Direta (Selection Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 209/241
Definição
– Trata-se de um algoritmo de comparação in-loco , isto é, executacomparações e operações de troca na própria estrutura original,sem necessidade de usar uma estrutura auxiliar;
– É o algoritmo mais simples de implementar, infelizmente, étambém o mais ineficiente de todos os aqui apresentados;
– Dado um array/lista não ordenado, varre-o por completoprocurando o primeiro menor elemento presente no mesmo,trocando o mesmo de lugar com o primeiro elemento do array;Após isso, procura o segundo menor elemento presente nomesmo e troca de posição com o segundo elemento do array.Procede desta forma até processar os N elementos;
http://www.computacao.gigamundo.com
Seleção Direta (Selection Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 210/241
Ilustração
http://www.computacao.gigamundo.com
Seleção Direta (Selection Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 211/241
Implementação
function selecaoDireta(var a: array[1..N] of real):boolean;
var i, j, menor : integer;v: real;
beginfor i := 1 to N dobegin
menor := i;
for j := i+1 to N dobegin
if a[menor] > a[j] thenmenor := j;
end;
if menor <> i thenbegin
v := a[i];
a[i] := a[menor];a[menor] := v;
end;end;
selecaoDireta := true;end;
http://www.computacao.gigamundo.com
Seleção Direta (Selection Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 212/241
Complexidade – Tanto para o pior caso, quanto para o caso médio
e para o melhor caso, o algoritmo sempreprecisará efetuar: N operações para encontrar o primeiro menor elemento; N-1 operações para encontrar o segundo menor
elemento;
... 1 operação para encontrar o n-ésimo menor elemento; Total: 1 + 2 + ... + N = N(N+1)/2 = O(n2)
http://www.computacao.gigamundo.com
Inserção Direta (Insertion Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 213/241
Definição
– Dado um array/lista Y não ordenado, inicia comuma lista X vazia. Pega o primeiro elemento de Ye varre toda a lista X procurando a posiçãocorreta para inseri-lo e, então, o insere. Pega o
segundo elemento e também varre toda a lista X,procurando a posição correta e insere-o. Procededesta forma até processar os N elementos;
http://www.computacao.gigamundo.com
Inserção Direta (Insertion Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 214/241
Ilustração
http://www.computacao.gigamundo.com
Inserção Direta (Insertion Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 215/241
Implementação
function insercaoDireta(var y:
array [1..N] of real):boolean;var x,t: TLista;
i: integer;begin
x := nil;
for i := 1 to N doinsercaoOrdenada(x, y[i]);
t := x;i := 1;
while (x <> nil) dobegin
y[i] := x^.valor;x := x^.proximo;dispose(t);
t := x;end;insercaoDireta := true;
end;
http://www.computacao.gigamundo.com
Inserção Direta (Insertion Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 216/241
Complexidade – Melhor Caso: O(n), pois ele simplesmente pegará
cada elemento e inserirá na cabeça da lista; – Pior Caso: O(n2), pois para cada elemento ele
terá que inseri-lo na cauda da lista, o quesignificará 1 + 2 + 3 + ... + N = N(N+1)/2operações;
– Caso Médio: O(n2).
http://www.computacao.gigamundo.com
Método da Bolha (Bubble Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 217/241
Definição
– Varre do início ao fim, sempre checando se o elemento xi émenor ou igual ao xi+1. Se for, passa para o próximo par(xi+1 e xi+2), caso não seja, inverte suas posições e recuauma posição para checar então com o anterior (x i-1 e xi).Procede desta forma até varrer toda a estrutura e chegar aofim;
– Este algoritmo de classificação também é in-loco, isto é,dispensa a utilização de estruturas auxiliares para efetuar aclassificação dos dados.
http://www.computacao.gigamundo.com
Método da Bolha (Bubble Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 218/241
Ilustração
http://www.computacao.gigamundo.com
Método da Bolha (Bubble Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 219/241
Implementação
functionmetodoDaBolha(insercaoDireta(var y: array [1..N] ofreal):boolean;
var i: integer;c: real;
begini := 1;while (i < N) dobegin
if (y[i] <= y[i+1]) theni := i + 1
elsebegin
c := y[i];y[i] := y[i+1];y[i+1] := c;i := i – 1;if (i < 1) then
i := 1;
end;metodoDaBolha := true;end;
http://www.computacao.gigamundo.com
Método da Bolha (Bubble Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 220/241
Complexidade – Melhor Caso: O(n), pois passa uma vez só por
cada par (todos os dados já estão ordenados); – Pior Caso: O(n2), onde os dados estão na ordem
inversa e portanto levará executará 1 + 2 + ... + Ntrocas;
– Caso médio: O(n2);
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 221/241
Definição
– Cria K buckets identificados e ordenados segundo algum
critério (buckets contendo elementos de 1 a 10, bucketscontendo elementos de 11 a 20, etc.) e então armazena oselementos dentro de cada bucket correspondente. Apósisso, pode-se aplicar a cada bucket o algoritmo deordenação que melhor convier;
– Este método geralmente se utiliza de um array de bucketscomo estrutura auxiliar, cada qual podendo serimplementado como um array ou uma lista.
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 222/241
Ilustração
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 223/241
Implementação (pseudo-código)
function bucket-sort(array, n) isbuckets ← new array of n empty lists for i = 0 to (length(array)-1) do
insert array[i] into buckets[position(array[i], k)]for i = 0 to n - 1 do
next-sort(buckets[i])return the concatenation of buckets[0], ..., buckets[n-1]
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 224/241
Implementação
function metodoDoBalde(var y: array [1..N] of real; k:
integer):Boolean;var bucket: array [1..k] of recordslots: array [1..N] of real;index: integer;
end;menor, maior: real;i,j,c: integer;
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 225/241
Implementação (continuação)
begin
menor := y[1];maior := y[1];for i := 1 to N dobegin
if y[i] > maior then
maior := y[i];if y[i] < menor thenmenor := y[i];
end;
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 226/241
Implementação (continuação)
for i := 1 to N dobegin
j := 1 + k*(y[i] - menor)/(maior – menor + 1);bucket[j].index := bucket[j].index + 1;bucket[j].slots[bucket[j].index] := y[i];
end;c := 1;
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 227/241
Implementação (continuação)
for j := 1 to k dobegin
selecaoDireta(bucket[j].slots, bucket[j].index);for i := 1 to bucket[j].index dobegin
y[c] := bucket[j].slots[i];c := c + 1;
end;end;metodoDoBalde := true;
end;
http://www.computacao.gigamundo.com
Método do Balde (Bucket Sort)
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 228/241
Complexidade
– Depende do algoritmo de classificação a serusado em cada bucket;
http://www.computacao.gigamundo.com
Quicksort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 229/241
Definição – Algoritmo “dividir para conquistar”. Escolhe um pivô dentro
da lista de dados a ordenar e cria dois grupos, um com os
números menores que ele (à esquerda) e outro comnúmeros maiores que ele (à direita). Após isso, o algoritmoé executado para cada grupo, escolhendo-se novamenteum pivô e dividindo-se em dois grupos menores. Oprocesso procee até que cada grupo contenha somente umelemento, concatenando todos e formando uma listaordenada;
http://www.computacao.gigamundo.com
Quicksort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 230/241
Ilustração
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Quicksort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 231/241
Implementação
function quicksort(var y: array [1..N] of real,IniVet, FimVet: integer): boolean;
var i, j: integer;
pivo, aux: real;Inícioi := IniVet;
j := FimVet;pivo := y[(IniVet + FimVet) div 2];repeat
while (y[i] < pivo) AND (i < FimVet) doi := i + 1;
while (y[j] > pivo) AND (j > FimVet) do j := j – 1;
if (i <= j) thenbegin
aux := y[i];
y[i] := y[j];y[j] := aux;i := i + 1;
j := j – 1;end;
until (i > j);
if (j > IniVet) thenquicksort(y, IniVet, j);if (i < FimVet) then
quicksort(y, i, FimVet)end;
http://www.computacao.gigamundo.com
Quicksort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 232/241
Complexidade
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Mergesort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 233/241
Definição – Também algoritmo “dividir para conquistar”.
“Quebra” a lista em listas menores, até que cada
lista contenha somente um elemento, quandoentão começa a ordená-las fazendo um “merge”,
isto é, juntando duas listas diferentes por vezmantendo a nova ordem dos elementos;
http://www.computacao.gigamundo.com
Mergesort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 234/241
Ilustração
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Mergesort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 235/241
Implementação
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Mergesort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 236/241
Complexidade
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Heapsort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 237/241
Definição – Utiliza uma árvore binária chamada “heap” para
ordenar os dados. Todo o problema aqui resume-se à criação desta árvore, bem como a remoçãode cada nó da mesma sem alterar a ordenação.
http://www.computacao.gigamundo.com
Heapsort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 238/241
Ilustração
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Heapsort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 239/241
Implementação
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Heapsort
5/14/2018 Estrutura de Dados 1 - slidepdf.com
http://slidepdf.com/reader/full/estrutura-de-dados-1 240/241
Complexidade
[Ops! Não escrevi aqui!]
http://www.computacao.gigamundo.com
Referências Bibliográficas