Escolar Documentos
Profissional Documentos
Cultura Documentos
com
ESTRUTURA DE DADOS I
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Tipos Inteiros Tipos Reais Tipos Lgicos Tipo Caracter Funes Para Converso
http://www.computacao.gigamundo.com
Motivao
Por
Duas
http://www.computacao.gigamundo.com
Motivao
Estruturas
http://www.computacao.gigamundo.com
Motivao
Os
forma como os dados so inseridos ou removidos que difere uma estrutura da outra!
http://www.computacao.gigamundo.com
Tipos de Dados
Define a forma como um dado deve ser armazenado ou recuperado, bem como os possveis valores que ele pode assumir ou as operaes que podem ser efetuadas sobre os mesmos
Exemplo em Pascal:
integer permite valores inteiros e operaes de adio, multiplicao, subtrao e diviso; string permite valores literais e operaes de concatenao;
http://www.computacao.gigamundo.com
Tipos de Dados
Primitivos,
derivados ou colees;
Estticos
http://www.computacao.gigamundo.com
Operaes
Um conjunto de instrues a fim de manipular um determinado tipo de dado a fim algum objetivo;
Criao (declarao) Percurso Busca Alterao Retirada Insero (em tipos dinmicos)
http://www.computacao.gigamundo.com
Lgico
Caracter
http://www.computacao.gigamundo.com
Tipos Inteiros
Operaes
Permitem
http://www.computacao.gigamundo.com
Tipos Reais
Satisfaz
as operaes e comparaes possveis com tipos inteiros; numricas contidas no conjunto dos nmeros reais:
Operaes
http://www.computacao.gigamundo.com
Tipos Lgicos
Permite
E, OU, NO;
Deve-se
http://www.computacao.gigamundo.com
Tipo Caracter
Permite a representao de um nico caracter; Operaes de igualdade e desigualdade; Por ser armazenado internamente como um valor inteiro, podemos fazer um casting e efetuar outras operaes.
http://www.computacao.gigamundo.com
Ord;
Char;
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Tipo Vetor
Coleo
de dados homognea indexada que pode ser acessada por meio de um ndice numrico; v = array [1..5] of integer;
var
v[3];
http://www.computacao.gigamundo.com
Tipo Registro
Coleo de dados heterognea cujas informaes podem ser acessadas por meio de um campo; var r = record c1: integer; c2: boolean; end;
r.c1;
http://www.computacao.gigamundo.com
Tipo Conjunto
Coleo
de objetos (ou informaes) correlatos que podem estar presentes ou no em um dado momento; c = set of (V1, V2, V3);
var c
:= [V1, V2]; V1 in c;
http://www.computacao.gigamundo.com
a Wikipdia:
Especificao de um conjunto de dados e operaes que podem ser executadas sobre esses dados;
Exemplo:
Quando usamos arrays e registros para criar uma estrutura de dados em vez de usar variveis de tipos primitivos.
http://www.computacao.gigamundo.com
que acontece se eu tiver um vetor de 5 posies e precisar de outras 1000? se meu vetor tiver 100000 posies e eu somente uso 5, isso bom?
http://www.computacao.gigamundo.com
Alocao de Memria
Alocao
esttica Varivel alocada ocupa espao fixo e contguo na memria; dinmica Varivel alocada ocupa espao varivel e criada segundo a necessidade do programa.
Alocao
http://www.computacao.gigamundo.com
Se alocamos dinamicamente, podemos aumentar e diminuir o tamanho de nossa estrutura quando quisermos! Entretanto, necessitaremos de mais algumas operaes para buscar, inserir e/ou remover informaes; Alm disso, um array (esttico) de vinte posies geralmente ocupa menos espao que uma lista cujos elementos foram criados um a um dinamicamente.
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
[No
foram definidas]
http://www.computacao.gigamundo.com
Matrizes (Aula 2)
http://www.computacao.gigamundo.com
Sumrio
Definio
Compactao
http://www.computacao.gigamundo.com
Matemtica, uma matriz pode ser considerada um conjunto de informaes numricas que podem ser referenciadas por meio de dois parmetros, comumente chamados linha e coluna;
1 2 0 2 0 1 3 3 2 4 1 5
A =
http://www.computacao.gigamundo.com
Computao, podemos representar as matrizes matemticas por meio de estruturas conhecidas como vetores ou arrays, onde cada posio/valor pode ser referenciada por um ou mais parmetros (dependendo da quantidade de dimenses de nosso vetor);
http://www.computacao.gigamundo.com
Enquanto que na Matemtica uma matriz possui sempre duas dimenses, na Computao podemos chamar qualquer vetor de matriz, podendo assim ter uma ou mais dimenses;
http://www.computacao.gigamundo.com
Compactao de Matrizes
Quanto
se somente alguns poucos elementos da matriz fossem diferentes de zero, poderamos reduzir o tamanho dela?
http://www.computacao.gigamundo.com
Compactao de Matrizes
Como
http://www.computacao.gigamundo.com
Matrizes Diagonais
Os
elementos da diagonal de uma matriz so: a[1,1], a[2,2], a[3,3], ... a[n,n]; armazen-los, ento, em uma matriz unidimensional de n elementos.
Podemos
http://www.computacao.gigamundo.com
Matrizes Triangulares
Podem
Podemos
armazenar todos os elementos da parte triangular em uma matriz unidimensional de m elementos (inclui os elementos da diagonal).
http://www.computacao.gigamundo.com
Matrizes Esparsas
Podem ser n-dimensionais; Podemos armazenar somente os elementos diferentes de zero em uma matriz unidimensional; Problemas:
Deve-se reservar algumas posies vazias para o caso de incluir novos elementos.
http://www.computacao.gigamundo.com
Exerccios
De volta s aulas? De volta aos jogos. Vamos criar um simulador de explorao espacial (modo texto, claro)! Crie um universo que possa ser navegado tridimensionalmente por meio da indicao de trs coordenadas X, Y e Z, onde o jogador precisa pilotar uma nave at 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 espao; Para facilitar para o jogador, cada vez que ele indicar as coordenadas, dizer quo longe ele est do planeta mais prximo; O jogo encerra quando ele encontrar um dos planetas; Os planetas so criados em posies aleatrias a cada vez que gerada uma nova partida; E h um total de combustvel para o jogador, o qual consumido de acordo com a distncia percorrida!
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
VELOSO,
Paulo, SANTOS, Clsio, AZEREDO, Paulo, FURTADO, Antnio, Estruturas de Dados, Editora Campus Ltda
http://www.computacao.gigamundo.com
Recursividade (Aula 3)
http://www.computacao.gigamundo.com
Sumrio
Definio
http://www.computacao.gigamundo.com
Definio de Recurso
Possibilidade
de um objeto buscar definir-se em funo dele prprio; Computao, um mtodo recursivo quando ele invoca a si prprio a fim de resolver um problema;
Na
http://www.computacao.gigamundo.com
Definio de Recurso
Na
Matemtica, podemos encontrar claramente a recursividade na resoluo de problemas por meio de recorrncia;
http://www.computacao.gigamundo.com
Exemplo de Recurso
Recorrncia
http://www.computacao.gigamundo.com
Exemplo de Recurso
Funo em Pascal:
function fibonacci(n: integer): integer; begin if (n < 1) then fibonacci := 0 else if (n <= 2) then fibonacci := 1 else fibonacci := fibonacci(n-1) + fibonacci(n-2); end;
http://www.computacao.gigamundo.com
Iterao na definio de algoritmos cada um dos passos/repeties de um comando de repetio (loop); Diversos problemas resolvidos de forma recursiva podem ser resolvidos de forma iterativa;
Chamadas recursivas precisam salvar o contexto atual da execuo do programa a fim de recuper-lo aps a execuo de cada chamada recursiva; A implementao do clculo do fatorial de forma iterativa, por exemplo, consome menos memria e processamento.
http://www.computacao.gigamundo.com
Por outro lado, h problemas que no podem ser resolvidos de forma iterativa;
Alm disso, recurso muito til na resoluo de diversos problemas que possam se beneficiar do dividir-para-conquistar, exemplos:
Ordenao por meio de quicksort ou mergesort; Programao dinmica; Diversas tcnicas de busca em grafos.
http://www.computacao.gigamundo.com
Observaes
Ordem em que cada comando deve aparecer dentro da funo o resultado final pode ser totalmente diferente se trocarmos duas linhas de cdigo de lugar! Definio de todos os casos base se esquecermos de definir um dos casos base e o algoritmo procurar por ele em algum momento, ele no saber que um caso de parada e continuar a sua execuo, talvez indefinidamente! Cuidado com a passagem de parmetros por valor ou por referncia.
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
COSTA,
Raimundo M, Programao Pascal, 1995 Recursividade em Cincia da Computao, disponvel em http://pt.wikipedia.org/wiki/Recursividade_( cincia_da_computao)
WIKIPDIA,
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Tabela Comparativa das Principais Classes O Melhor Caso O Pior Caso O Caso Mdio
Avaliao Emprica Contagem do Nmero de Operaes Efetuadas Determinao da Complexidade Assinttica de um Algoritmo
Os Trs Casos
http://www.computacao.gigamundo.com
Motivao
Quais
Devemos,
http://www.computacao.gigamundo.com
Motivao
Um
exemplo bem simples o caso de dois programas que precisam fazer a ordenao 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 ou menos memria; Como exmios Cientistas da Computao, buscamos sempre compreender e trabalhar com a melhor soluo possvel!
http://www.computacao.gigamundo.com
Alguns Mitos
Pena que at mesmo um grande cluster com dezenas de computadores no conseguem resolver eficientemente alguns problemas somente por fora bruta;
, se voc considerar somente os sistemas do tipo controle de locadora, pois sistemas de tempo real, simulaes fsicas, sistemas para clculos estatsticos e estimativas razoavelmente pesadas e tantos outros precisam!
http://www.computacao.gigamundo.com
Alguns Mitos
Por
que eu tenho que aprender sobre isso? Eu posso simplesmente contratar algum!
Pois , que tal algum da rea de Computao? Ei, esse algum voc!
http://www.computacao.gigamundo.com
Contagem
efetuadas;
Determinao
http://www.computacao.gigamundo.com
Avaliao Emprica
Experimento 1: Verificar o tempo que dois programas levam para efetuar uma busca em um array e recuperar um dado;
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 mquina, mas o segundo executou em paralelo com algum outro programa? Somente por avaliao emprica, conseguimos ter certeza de qual o programa mais eficiente?
http://www.computacao.gigamundo.com
Deve-se ento aumentar o nmero de casos de testes tentando cobrir o maior nmero possvel de situaes;
Em uma dada linguagem, um programa pode ser mais eficiente do que quando implementado em outra linguagem;
http://www.computacao.gigamundo.com
Experimento 2: Dado o algoritmo abaixo, vamos contar quantas operaes so necessrias para calcular fatorial(5): function fatorial (n: integer): longint; var f, i: integer; begin if (n < 0) then f := -1 else begin f := 1; for i := 1 to n do f := f*i; end; fatorial := f; end;
http://www.computacao.gigamundo.com
algoritmo anterior:
Perceba
que para calcular o fatorial de um nmero N qualquer, vamos executar 2*N operaes, ou seja, um nmero de operaes diretamente proporcional;
http://www.computacao.gigamundo.com
Em Computao, geralmente no nos preocupamos com a eficincia do algoritmo quando tratando poucos elementos
Se so poucos, por pior que nosso algoritmo seja, provavelmente ele executar rpido e sem ocupar muito espao! 2*n + 3 operaes parecem piores que n2 operaes para n = 0, 1 ou 2;
Para n = 1.000, 2*n + 3 2003; Mas e se nosso algoritmo executasse n2 operaes? 1.000.000!
http://www.computacao.gigamundo.com
Definio de Complexidade
Quantidade de "trabalho" necessria para a execuo de um algoritmo, expressa em funo das operaes fundamentais, as quais variam de acordo com o algoritmo, e em funo do volume de dados;
Complexidade Assinttica
Trata-se de uma funo que expressa a relao entre o volume de dados ( n ) e o tempo ( t ) necessrio para o processamento dos mesmos; No algoritmo do experimento 2, poderamos dizer que:
f(n) = 2*n + 3
http://www.computacao.gigamundo.com
Notaes
O (O Grande), (Omega) e
(Theta);
Obs:
http://www.computacao.gigamundo.com
Notao O
Dadas duas funes 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 suficientemente grande. g(n) , ento, o limite assinttico superior (upper bound) de f(n) Exemplos: 3x2 + 5 = O ( x2 ) x3/2 = O ( x3) 1 + 2 + 3 + ... + x = O ( x2 )
http://www.computacao.gigamundo.com
Notao
Dadas duas funes 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 suficientemente grande. g(n) , ento, o limite assinttico inferior (lower bound) de f(n) Exemplos: 3x3 + 5 = ( x2 ) x3/2 = ( x3/3)
http://www.computacao.gigamundo.com
Notao
Dadas
duas funes 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 n suficientemente grande.
Exemplo:
3x3+ 5 = ( x3 )
http://www.computacao.gigamundo.com
O (1) : O uso do algoritmo independe do tamanho de n. Neste caso as instrues do algoritmo so executadas um nmero fixo de vezes; O (log n): ocorre tipicamente em algoritmos que resolvem um problema transformando-o em problemas menores; O (n): linear Um conjunto de operaes de tamanho constante aplicado a cada elemento da entrada; O (n log n): Ocorre em algoritmos que resolvem um problema quebrando-o em problemas menores, resolvendo cada um deles independentemente e depois juntando as solues;
http://www.computacao.gigamundo.com
O (n2): quadrtico. Algoritmos desta ordem de complexidade ocorrem quando os itens de dados so processados aos pares, muitas vezes em um loop dentro de outro. teis para resolver problemas de tamanhos relativamente pequenos; O (nk): polinomial OK para k pequeno; O (kn), O (n!), O (nn): exponencial Geralmente no so teis sob o ponto de vista prtico. Eles ocorrem na soluo de problemas quando se usa fora bruta para resolv-los.
http://www.computacao.gigamundo.com
CLASSE NOTAO O constante O(1) logaritmico O(lg n) linear O(n) O(n lg n) O(n lg n) quadrtico O(n) cbico O(n) exponencial O(2^n)
http://www.computacao.gigamundo.com
Os Trs Casos
Para qualquer algoritmo, sempre h situaes em que ele resolver de forma muito rpida e outras em que nem tanto;
Desta forma, para determinar a eficincia de um algoritmo, precisamos conhecer a sua complexidade para o melhor caso, o pior caso e o caso mdio.
http://www.computacao.gigamundo.com
Melhor Caso
Caso
http://www.computacao.gigamundo.com
Pior Caso
Ao
contrrio do melhor caso, este o caso para o qual o algoritmo executa da pior forma possvel;
http://www.computacao.gigamundo.com
Caso Mdio
A
complexidade para o caso mdio dada por meio de clculo tempo mdio esperado para a resoluo de um problema qualquer, independente de como os dados esto (se ordenados ou no, etc);
http://www.computacao.gigamundo.com
necessrio conhecer qual o volume de dados que atende a cada um dos casos e, ento, busca-se definir a funo matemtica que expressa o nmero de operaes necessrias para cada caso; caso de algoritmos recursivos, deve-se determinar primeiro a frmula de recorrncia capaz de express-los e, ento, resolv-la.
No
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
MADEIRA, Gonalo, Complexidade Computacional, disponvel em http://w3.ualg.pt/~hshah/algoritmos/aula8/Aula8.htm SILVA, Elton, Anlise Assinttica da Complexidade de Algoritmos, disponvel em http://www.decom.ufop.br/prof/elton/cic210/cap2.pdf
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Primeiro Exerccio
Implemente um programa capaz de armazenar e recuperar dados de uma matriz triangular inferior; Qual a ordem de complexidade desse algoritmo para:
Armazenar n elementos; Para recuperar um elemento qualquer, dada a sua posio na matriz inicial; Para buscar a posio de um elemento qualquer, dado o valor do elemento;
http://www.computacao.gigamundo.com
Segundo Exerccio
Implemente um programa que localiza uma substring dentro de outra string; Qual a ordem de complexidade desse algoritmo para:
Encontrar uma letra em uma frase de tamanho N; Encontrar uma palavra de tamanho K em uma frase de tamanho N;
http://www.computacao.gigamundo.com
Terceiro Exerccio
Implemente um programa que armazena os telefones armazenados em ordem alfabtica de acordo com os nomes das pessoas seguindo a seguinte frmula:
Toda vez que for inserir um novo telefone, procura qual ser a posio correta dele e, para inseri-lo ali, move antes todo mundo daquela posio em diante para uma aps e, ento, copia seus dados para l (insero direta);
Qual a ordem de complexidade deste algoritmo? Voc consegue identificar quais so os casos pior, mdio e melhor?
http://www.computacao.gigamundo.com
Quarto exerccio
Implemente
Qual Faa
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Motivao; Definio
de ponteiro; Tipos de ponteiro; Apontando para um endereo nulo; Apontando e recuperando uma varivel; Apontando e Invocando um Subprograma; Alocao Dinmica de Memria; Alocando e desalocando memria; Referncias Bibliogrficas.
http://www.computacao.gigamundo.com
Motivao
Por que estudar alocao dinmica se podemos criar todas as estruturas de forma esttica? O que acontece em um programa com alocao esttica quando precisamos de estruturas maiores do que as que foram criadas? Ponteiros e alocao dinmica permite-nos criar diversos Tipos Abstratos de Dados;
http://www.computacao.gigamundo.com
Definio de ponteiro
Tipo de varivel que aponta para um outro endereo de memria; O contedo de uma varivel ponteiro o endereo de memria para o qual est apontando; Um ponteiro pode referenciar e des-referenciar;
http://www.computacao.gigamundo.com
Definio de ponteiro
Um
Uma rea com informao (uma varivel ou contedo de uma varivel); Uma rotina (procedimento ou funo); Endereo nulo.
http://www.computacao.gigamundo.com
Tipos de Ponteiro
Tipado
p : ^integer;
No-Tipado
no est associado a um tipo, logo, necessrio fazer o typecasting da informao referenciada a fim de acess-la;
Declarao:
var
p : Pointer;
http://www.computacao.gigamundo.com
Em Pascal, nil representa um endereo nulo que qualquer ponteiro pode apontar; ponteiro := nil; if ponteiro = nil then writeln(No est apontando) else writeln(Est apontando para , ponteiro);
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
a criao (reserva) de um endereo de memria para uma dada varivel do tipo ponteiro; quando alocamos dinamicamente um endereo de memria, devemos desaloc-la (na alocao esttica, o compilador encarregado disso).
Geralmente,
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
Blog
http://www2.dc.ufscar.br/~bsi/materiais/ed/u7.html
http://www.computacao.gigamundo.com
Listas (Aula 7)
http://www.computacao.gigamundo.com
Sumrio
Definio
Tipos de Listas
Implementao
http://www.computacao.gigamundo.com
Definio de Lista
TAD
que permite representao e manipulao de seus elementos de forma linear; chamada lista linear;
Tambm
http://www.computacao.gigamundo.com
Caractersticas
Uma Itens
Quantificvel; Ordenvel;
http://www.computacao.gigamundo.com
Tipos de Implementao
Seqencial
Encadeada
ou Dinmica
http://www.computacao.gigamundo.com
Lista Seqencial
Os
Podem
array!
programa executa um determinado clculo para encontrar a posio na memria em que se encontra o elemento ei;
http://www.computacao.gigamundo.com
A lista cresce dinamicamente, isto , cada novo elemento criado e inserido nela em tempo de execuo; Se criado em tempo de execuo, precisamos usar ponteiros... Onde estar o ponteiro para cada elemento?
Listas podem ser encadeadas, duplamente encadeadas ou n-uplamente encadeadas (s depende de sua criatividade)!
http://www.computacao.gigamundo.com
precisar de listas que satisfaam certas restries quanto forma de recuperar um elemento ou de insero do mesmo;
Pilhas; Filas.
http://www.computacao.gigamundo.com
Lista Seqencial var lista: array [1..N] of integer; Lista Encadeada type PNo = ^TNo; TNo = record valor: integer; proximo: PNo; end; var lista: TNo;
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
[No
foram definidas]
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Busca Interpolada
Implementao Complexidade
Busca Binria
http://www.computacao.gigamundo.com
Definio de Busca
Operao
de percurso de uma estrutura de dados e recuperao de uma informao baseado em algum campo-chave; de informaes em uma lista uma operao importante e o tempo que operaes de insero, remoo e busca levam para serem processadas afetam diretamente a eficincia de um algoritmo.
Recuperao
http://www.computacao.gigamundo.com
Tipos de Busca
Busca Seqencial baseia-se no percurso de todos os elementos de uma lista de forma seqencial; Busca Binria baseia-se no percurso dos elementos de uma lista levando em considerao o valor de chave esperado e o valor encontrado; Busca Interpolada similar busca binria, introduz clculo de prxima posio a ser verificada levando em considerao os valores dos elementos-limite.
http://www.computacao.gigamundo.com
Busca Seqencial
Se
voc no sabe por onde comear, comece pelo comeo; se conhece uma ordenao dentro da
No
lista;
Somos
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Qual
a complexidade para:
http://www.computacao.gigamundo.com
Busca Binria
Quando
os elementos de uma lista esto ordenados segundo um campo-chave, podemos tirar proveito disso;
http://www.computacao.gigamundo.com
Busca Binria
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 posio / elemento encontrado; Seno, se lista[X] maior que o valor que procuro, ento devo olhar o intervalo que possui os valores menores que lista[X], ou seja, [A, X-1]; Seno, se lista[X] menor que o valor que procuro, ento devo olhar o intervalo que possui os valores maiores que lista[X], ou seja, [X+1, B]; Repito todo o processo at encontrar (ou no!) o elemento.
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Qual
a complexidade para:
http://www.computacao.gigamundo.com
Busca Interpolada
Similar
busca binria, leva em conta a ordenao dos dados de uma lista; em vez de olhar sempre o elemento mediano, efetua um clculo que busca estimar onde o elemento desejado deve estar.
Entretanto,
http://www.computacao.gigamundo.com
Busca Interpolada
Se
tenho uma lista ordenada crescente com 50 elementos, o primeiro o 1 e o ltimo o 1000, onde provavelmente estar o 999?
http://www.computacao.gigamundo.com
Busca Interpolada
Basta
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Qual
a complexidade para:
http://www.computacao.gigamundo.com
que melhor: busca interpolada ou busca binria? se na busca binria / interpolada comparssemos tambm os valores dos extremos com o valor da chave, melhoraramos a eficincia?
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
[No
foram definidas]
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Definio de Lista Encadeada Listas Encadeadas Estticas Listas Encadeadas Dinmicas Listas Encadeadas Simples Operaes em Listas Encadeadas Definindo nossa Lista Encadeada Insero na Lista Encadeada Busca na Lista Encadeada Remoo na Lista Encadeada Referncias Bibliogrficas
http://www.computacao.gigamundo.com
lista linear onde cada elemento (geralmente chamado n) possui algum apontador para o prximo elemento; | |
...
Esse
http://www.computacao.gigamundo.com
Alguns autores consideram a possibilidade de listas encadeadas criadas de forma esttica; Exemplo de lista encadeada no dinmica; O apontadores so inteiros.
4 5 -1 1 3 2
http://www.computacao.gigamundo.com
Permitem
a insero de novos elementos com menos restries quanto posio (no precisa ser contgua) ou quantidade.
http://www.computacao.gigamundo.com
Cada n possui um nico apontador para o prximo n; Para fins de facilitar a insero, alterao (quando ordenada), remoo e busca pelo valor presente em um n qualquer da lista, podemos eleger um campo (ou atributo) do n para ser o campo-chave do mesmo; Podem ser implementadas com listas seqenciais ou dinmicas.
http://www.computacao.gigamundo.com
/ Recuperao;
Remoo.
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Em
Listas Encadeadas Dinmicas, Busca Binria ou Interpolada, possvel? H vantagens em seu uso em relao Busca Seqencial?
http://www.computacao.gigamundo.com
Como seria a remoo de um elemento em uma lista encadeada? E a remoo de todos os elementos? No caso de remoo de um elemento (e), tomar o cuidado para garantir que o anterior (t) dele passe a apontar para o sucessor dele (t.proximo := e.proximo); No caso de remoo de todos os elementos, a idia percorrer todos os elementos da lista, removendo-os (dispose); Cuidado para no remover um elemento antes de guardar a referncia para o prximo como saber quem o prximo elemento de um elemento que no mais existe?
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
[No
foram definidas]
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Definio
de Pilha
Definio
de Fila
Exerccios Referncias
Bibliogrficas
http://www.computacao.gigamundo.com
Definio de Pilha
Toda
lista linear onde o ltimo elemento a entrar o primeiro a sair (ou o primeiro a entrar o ltimo a sair, FILO); satisfazer esta condio, basta que a insero e remoo sejam feitas na mesma extremidade da lista (head);
Para
http://www.computacao.gigamundo.com
baralho de cartas, colocadas uma a uma sobre a mesa, umas sobre as outras, formando um monte; carta mais ao topo (a primeira a ser removida) foi a ltima a ser colocada sobre o monte;
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Nada mais que o nosso mtodo inserirInicio! Como devemos inserir e remover da mesma extremidade da lista, devemos ento remover do incio, devolvendo ento o valor daquele elemento.
Pop:
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Definio de Fila
Toda
lista linear onde o primeiro elemento a entrar o primeiro a sair (FIFO); satisfazer esta condio, basta que a insero seja feita em uma extremidade (tail) da lista e a remoo seja feita na outra extremidade (head);
Para
http://www.computacao.gigamundo.com
Muitos
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Apesar de inserir no final, ns no precisaremos percorrer toda a fila para inserir no fim;
Pop:
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Exerccio
Crie um jogo para ser disputado por duas pessoas com dois modos (o modo pilha e o modo fila) e a opo de sair; Primeiro, Deve-se escolher quantos nmeros sero embaralhados e ocultos e qual o modo de organizao dos mesmos; Em segundo lugar, o jogo dever ir inserindo cada nmero (0 <= K <= 9) na pilha/fila, mostrando um de cada vez na tela (lembre-se de limpar ela por inteiro a cada nmero mostrado); Aps isso, os jogadores devem alternar-se tentando adivinhar qual o prximo nmero a ser removido do jogo. Ganha quem no errar. Caso acabem todos os nmeros, declarar empate; Quando os jogadores escolherem sair, mostrar o placar final e encerrar o jogo.
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Lista
Duplamente Encadeada
Declarao Operaes
Lista
Circular
Declarao Operaes
Exerccios Referncias
Bibliogrficas
http://www.computacao.gigamundo.com
Uma estrutura de dados linear que se utiliza de dois ponteiros (um apontando o elemento anterior e outro o posterior) a fim de permitir percorrer a mesma no somente avanando, como tambm recuando;
...
http://www.computacao.gigamundo.com
Facilidades na hora de procurar um elemento, principalmente se o mesmo estiver antes da atual posio pesquisada;
Desvantagem:
Nas inseres, remoes e alteraes, isso significa mais ponteiros para atualizar, o que pode levar programadores no muito bons a cometer falhas (o que no o caso de vocs!).
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Bsicas:
Como
seriam essas operaes em uma Lista DE se ela no estiver ordenada? E se estiver ordenada?
http://www.computacao.gigamundo.com
Lista Circular
Estrutura de dados linear em que o ltimo elemento aponta para o primeiro; Lista em que todo elemento possui um sucessor (o sucessor do ltimo o primeiro elemento); Pode-se adotar encadeamento simples, duplo ou outro qualquer;
http://www.computacao.gigamundo.com
Lista Circular
Observaes:
No h mais elementos apontando para nil, logo no podemos mais identificar o ltimo elemento desta forma!
Mas
podemos parar quando percebermos que o prximo o primeiro elemento (apontado pela lista circular);
Podemos at mesmo deslocar a cabea da lista sem que se perca a referncia para nenhum dos elementos;
Mas
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Bsicas:
Como
seriam essas operaes em uma Lista Circular se ela no estiver ordenada? E se estiver ordenada?
http://www.computacao.gigamundo.com
Exerccios
Implemente
Lista duplamente encadeada no-ordenada; Lista duplamente encadeada ordenada; Lista circular.
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
[No
foram definidas]
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Definio de rvore Representao Grfica Classificao das rvores Declarao de uma rvore N-ria Declarao de uma rvore No N-ria Nvel de um N Altura ou Profundidade de uma rvore Percurso de uma rvore Insero em uma rvore
Remoo em uma rvore rvores Binrias rvores Binrias de Busca Insero em uma rvore Binria de Busca Busca em uma rvore Binria de Busca Deleo em uma rvore Binria de Busca Comparaes entre Ordens de Complexidade Referncias Bibliogrficas
http://www.computacao.gigamundo.com
Definio de rvore
Estrutura Um
de dados no linear;
Analogia
http://www.computacao.gigamundo.com
Representao Grfica
http://www.computacao.gigamundo.com
rvore pode ser classificada de diversas formas diferentes, uma delas pelo nmero mximo de ns-filhos que cada npai pode ter:
Binria (dois ns); Ternria (trs ns); Quaternria (quatro ns); N-ria (N ns); No N-ria (quando no conhecemos ou no h um nmero mximo de ns-filhos para cada npai).
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Nvel de um N
Refere-se
2 3
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Tambm conhecido como travessia; Consiste em percorrer (em uma dada ordem) todos os ns de um rvore ou at encontrar algum que satisfaa ao problema em questo; empregado, por exemplo, na busca de um n a partir de uma chave;
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Percurso Pr-Ordem
Processa
funo x (no) Incio processa no; aplica funo x para cada filho de no; Fim;
http://www.computacao.gigamundo.com
Percurso Pr-Ordem
function buscaTelefone(no: PNode; nome: String): String; var s: String; Begin if no = nil then buscaTelefone := else if no.nome = nome then buscaTelefone := no.telefone else begin s := buscaTelefone(no.filho1, nome); if s <> then buscaTelefone := s else begin s := buscaTelefone(no.filho2, nome); if s <> then buscaTelefone := s else buscaTelefone := ; end; end; End;
http://www.computacao.gigamundo.com
Percurso Em-Ordem
Neste caso, um filho (ou parte dos filhos) processado primeiro, o n atual ento processado e, por fim, o outro filho (ou parte dos filhos);
funo x (no) Incio aplica funo x para parte dos filhos de no; processa no; aplica funo x para parte dos filhos de no; Fim;
http://www.computacao.gigamundo.com
Percurso Ps-Ordem
Neste caso, todos os filhos do n atual devem ser processados antes que o mesmo o seja;
funo x (no) Incio aplica funo x para cada filho de no; processa no; Fim;
http://www.computacao.gigamundo.com
o novo n (mtodo new) e popula-se o mesmo com as informaes desejadas; utilizar algum critrio para determinar em qual n e em qual posio o novo n dever ficar; pai deve apontar para o filho.
Pode
http://www.computacao.gigamundo.com
Utiliza-se de um outro ponteiro ( t ) para apontar para o objeto que se deseja remover; Aps isso, reorganiza-se seus filhos a fim de que seu pai possa apontara para esses e ningum ficar abandonado, eliminando o vnculo entre a rvore e o n-alvo; Por fim, elimina-se o n (mtodo dispose); E se nosso objetivo for remover TODOS os ns de uma rvore, qual mtodo de percurso voc utilizaria? Por qu?
http://www.computacao.gigamundo.com
rvores Binrias
rvores onde cada n possui no mximo dois filhos; Muito usadas em computao; Cada nvel pode ter no mximo 2N ns, onde N o valor do nvel; Quantidade de nveis que uma rvore binria com N ns pode ter:
http://www.computacao.gigamundo.com
rvores Binrias
Dado
um n qualquer, ele possuir uma subrvore esquerda e uma sub-rvore direita (podendo qualquer uma delas ou ambas no possuir elementos);
Sub-rvore direita Sub-rvore esquerda
http://www.computacao.gigamundo.com
Ou rvores de busca binria (tanto faz!); So rvores em que possvel determinar em que direo buscar um dado n a partir do valor do pai e levando-se em considerao alguma regra quanto disposio dos filhos;
Ns com valores menores que o pai esquerda, ns com valores maiores que o pai direita; Ns que satisfazem uma condio expressa pelo pai de um lado e ns que no satisfazem do outro;
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
then
t := t^.filho[2] else begin buscar := t; exit; end; end; buscar := nil; end; end;
http://www.computacao.gigamundo.com
filhos
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
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 ele est abordagem recursiva.
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
[No
foram definidas]
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Simples
Esquerda Direita
Dupla
Pesquisa
Referncias Bibliogrficas
http://www.computacao.gigamundo.com
de uma rvore de Busca Binria Auto-Balanceada, isto , que mantm o balanceamento de sua rvore em cada operao executada; maior diferena possvel entre os nveis de dois ns-folhas 1;
http://www.computacao.gigamundo.com
Representao Grfica
rvore No-Balanceada
http://www.computacao.gigamundo.com
Operaes
Insero Remoo Rotao
http://www.computacao.gigamundo.com
Insero
Efetua-se
Insere-se
Verifica-se
se ela est balanceada, caso no esteja, efetuar rotao (simples ou dupla) at que esteja.
http://www.computacao.gigamundo.com
Remoo
Efetua-se a busca pelo n (igual a qualquer outra rvore de busca binria); Rotaciona-se at que o mesmo seja um n-folha e remova-o;
http://www.computacao.gigamundo.com
Rotao
Operao
em que a ordem dos ns em uma rvore de busca binria pode ser invertida a fim de manter o balanceamento da mesma; ser simples (um nico passo, rotacionando esquerda ou direita) ou dupla (efetuando mais de uma vez a rotao, em qualquer combinao de rotaes simples);
Pode
http://www.computacao.gigamundo.com
Rotao Simples
Ocorre
quando o n desbalanceado e o seu filho esto no mesmo sentido de inclinao da rvore; uma linha reta;
Formam
http://www.computacao.gigamundo.com
Rotao Esquerda
Pseudo-cdigo: Seja Y o filho direita de X; Torne X o filho esquerda de Y; Torne o filho esquerda de Y (Z) o filho direita de X;
http://www.computacao.gigamundo.com
Rotao Direita
Pseudo-cdigo: Seja Y o filho esquerda de X; Torne X o filho direita de Y; Torne o filho direita de Y (Z) o filho esquerda de X;
http://www.computacao.gigamundo.com
Rotao Dupla
Ocorre
quando o n desbalanceado est em um sentido da inclinao e o seu filho em outro; assim, um joelho.
Formam,
http://www.computacao.gigamundo.com
Pesquisa
tempo mdio para encontrar um elemento em uma rvore AVL da ordem de O (log n) 1.44 log2 n no pior caso
Aproximadamente
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
http://www.csi.uottawa.ca/~stan/csi2514/applets/av
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Sumrio
Por que estudar mtodos para classificao de dados? Alguns tipos de algoritmos de classificao Seleo Direta (Selection Sort) Insero Direta (Insertion Sort) Mtodo da Bolha (Bubble Sort) Mtodo do Balde (Bucket Sort) QuickSort MergeSort HeapSort Referncias Bibliogrficas
http://www.computacao.gigamundo.com
Qual a importncia da ordenao dos dados quando se deseja uma busca mais eficiente ou classificar os mesmos segundo algum critrio? H muita diferena entre o tempo de processamento de um algoritmo de ordenao O(n log n) e o tempo de um algoritmo de ordenao O(n2), quando executados sobre uma base com um milho de dados? Sendo assim, torna-se interessante o estudo dos diversos tipos de algoritmos de ordenao?
http://www.computacao.gigamundo.com
direta (selection sort) Insero direta (insertion sort) Mtodo da Bolha (bubble sort) Mtodo do Balde (bucket sort) Quicksort Mergesort Heapsort
http://www.computacao.gigamundo.com
Definio
Trata-se de um algoritmo de comparao in-loco, isto , executa comparaes e operaes de troca na prpria estrutura original, sem necessidade de usar uma estrutura auxiliar; o algoritmo mais simples de implementar, infelizmente, tambm o mais ineficiente de todos os aqui apresentados; Dado um array/lista no ordenado, varre-o por completo procurando o primeiro menor elemento presente no mesmo, trocando o mesmo de lugar com o primeiro elemento do array; Aps isso, procura o segundo menor elemento presente no mesmo e troca de posio com o segundo elemento do array. Procede desta forma at processar os N elementos;
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Implementao
function selecaoDireta(var a: array [1..N] of real):boolean; var i, j, menor : integer; v: real; begin for i := 1 to N do begin menor := i; for j := i+1 to N do begin if a[menor] > a[j] then menor := j; end;
if menor <> i then begin v := a[i]; a[i] := a[menor]; a[menor] := v; end; end; selecaoDireta := true; end;
http://www.computacao.gigamundo.com
Tanto para o pior caso, quanto para o caso mdio e para o melhor caso, o algoritmo sempre precisar efetuar:
N
operaes para encontrar o primeiro menor elemento; N-1 operaes para encontrar o segundo menor elemento;
...
1
operao para encontrar o n-simo menor elemento; Total: 1 + 2 + ... + N = N(N+1)/2 = O(n2)
http://www.computacao.gigamundo.com
Dado um array/lista Y no ordenado, inicia com uma lista X vazia. Pega o primeiro elemento de Y e varre toda a lista X procurando a posio correta para inseri-lo e, ento, o insere. Pega o segundo elemento e tambm varre toda a lista X, procurando a posio correta e insere-o. Procede desta forma at processar os N elementos;
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Implementao
while (x <> nil) do begin y[i] := x^.valor; x := x^.proximo; dispose(t); t := x; end; insercaoDireta := true; end;
function insercaoDireta(var y: array [1..N] of real):boolean; var x,t: TLista; i: integer; begin x := nil; for i := 1 to N do insercaoOrdenada(x, y[i]); t := x; i := 1;
http://www.computacao.gigamundo.com
Melhor Caso: O(n), pois ele simplesmente pegar cada elemento e inserir na cabea da lista; Pior Caso: O(n2), pois para cada elemento ele ter que inseri-lo na cauda da lista, o que significar 1 + 2 + 3 + ... + N = N(N+1)/2 operaes; Caso Mdio: O(n2).
http://www.computacao.gigamundo.com
Definio
Varre do incio ao fim, sempre checando se o elemento xi menor ou igual ao xi+1. Se for, passa para o prximo par (xi+1 e xi+2), caso no seja, inverte suas posies e recua uma posio para checar ento com o anterior (xi-1 e xi). Procede desta forma at varrer toda a estrutura e chegar ao fim; Este algoritmo de classificao tambm in-loco, isto , dispensa a utilizao de estruturas auxiliares para efetuar a classificao dos dados.
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Implementao else begin 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;
function metodoDaBolha(insercaoDireta (var y: array [1..N] of real):boolean; var i: integer; c: real; begin i := 1; while (i < N) do begin if (y[i] <= y[i+1]) then i := i + 1
http://www.computacao.gigamundo.com
Melhor Caso: O(n), pois passa uma vez s por cada par (todos os dados j esto ordenados); Pior Caso: O(n2), onde os dados esto na ordem inversa e portanto levar executar 1 + 2 + ... + N trocas; Caso mdio: O(n2);
http://www.computacao.gigamundo.com
Definio
Cria K buckets identificados e ordenados segundo algum critrio (buckets contendo elementos de 1 a 10, buckets contendo elementos de 11 a 20, etc.) e ento armazena os elementos dentro de cada bucket correspondente. Aps isso, pode-se aplicar a cada bucket o algoritmo de ordenao que melhor convier; Este mtodo geralmente se utiliza de um array de buckets como estrutura auxiliar, cada qual podendo ser implementado como um array ou uma lista.
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Implementao (pseudo-cdigo)
function bucket-sort(array, n) is buckets 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
Implementao
function metodoDoBalde(var y: array [1..N] of real; k: integer):Boolean; var bucket: array [1..k] of record slots: array [1..N] of real; index: integer; end; menor, maior: real; i,j,c: integer;
http://www.computacao.gigamundo.com
Implementao (continuao)
begin menor := y[1]; maior := y[1]; for i := 1 to N do begin if y[i] > maior then maior := y[i]; if y[i] < menor then menor := y[i]; end;
http://www.computacao.gigamundo.com
(continuao)
for i := 1 to N do begin 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
Implementao (continuao)
for j := 1 to k do begin selecaoDireta(bucket[j].slots, bucket[j].index); for i := 1 to bucket[j].index do begin y[c] := bucket[j].slots[i]; c := c + 1; end; end; metodoDoBalde := true; end;
http://www.computacao.gigamundo.com
http://www.computacao.gigamundo.com
Quicksort
Definio
Algoritmo dividir para conquistar. Escolhe um piv dentro da lista de dados a ordenar e cria dois grupos, um com os nmeros menores que ele ( esquerda) e outro com nmeros maiores que ele ( direita). Aps isso, o algoritmo executado para cada grupo, escolhendo-se novamente um piv e dividindo-se em dois grupos menores. O processo procee at que cada grupo contenha somente um elemento, concatenando todos e formando uma lista ordenada;
http://www.computacao.gigamundo.com
Quicksort
Ilustrao
http://www.computacao.gigamundo.com
Quicksort
Implementao if (i <= j) then begin aux := y[i]; y[i] := y[j]; y[j] := aux; i := i + 1; j := j 1; end; until (i > j); if (j > IniVet) then quicksort(y, IniVet, j); if (i < FimVet) then quicksort(y, i, FimVet) end;
function quicksort(var y: array [1..N] of real, IniVet, FimVet: integer): boolean; var i, j: integer; pivo, aux: real; Incio i := IniVet; j := FimVet; pivo := y[(IniVet + FimVet) div 2]; repeat while (y[i] < pivo) AND (i < FimVet) do i := i + 1; while (y[j] > pivo) AND (j > FimVet) do j := j 1;
http://www.computacao.gigamundo.com
Quicksort
Complexidade
http://www.computacao.gigamundo.com
Mergesort
Definio
Tambm algoritmo dividir para conquistar. Quebra a lista em listas menores, at que cada lista contenha somente um elemento, quando ento comea a orden-las fazendo um merge, isto , juntando duas listas diferentes por vez mantendo a nova ordem dos elementos;
http://www.computacao.gigamundo.com
Mergesort
Ilustrao
http://www.computacao.gigamundo.com
Mergesort
Implementao
http://www.computacao.gigamundo.com
Mergesort
Complexidade
http://www.computacao.gigamundo.com
Heapsort
Definio
Utiliza uma rvore binria chamada heap para ordenar os dados. Todo o problema aqui resumese criao desta rvore, bem como a remoo de cada n da mesma sem alterar a ordenao.
http://www.computacao.gigamundo.com
Heapsort
Ilustrao
http://www.computacao.gigamundo.com
Heapsort
Implementao
http://www.computacao.gigamundo.com
Heapsort
Complexidade
http://www.computacao.gigamundo.com
Referncias Bibliogrficas
[No
foram definidas]