estrutura de dados 1

241
 http://www.computacao.gigamundo.com ESTRUTURA DE DADOS I Christiano Lima Santos

Upload: rayssa-cardoso

Post on 16-Jul-2015

975 views

Category:

Documents


0 download

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

5/14/2018 Estrutura de Dados 1 - slidepdf.com

http://slidepdf.com/reader/full/estrutura-de-dados-1 241/241

[Não foram definidas]