ESTRUTURA DE DADOS I
Adriano Sena
Tipos de Dados e Tipos Abstratos de Dados (Aula 1)
Adriano Sena
Sumrio
Motivao Tipos de Dados Operaes Tipos Primitivos ou Escalares
Tipos Colees ou No-Escalares
Tipo Vetor Tipo Registro Tipo Conjunto
Tipos Inteiros Tipos Reais Tipos Lgicos Tipo Caracter Funes Para Converso
Tipos Abstratos de Dados Alocao de Memria Vantagens e Desvantagens da Alocao Dinmica
Motivao
Por que estudar os tipos de dados? Duas so as principais preocupaes em um projeto de software
Os procedimentos a serem executados; Os dados sobre os quais os procedimentos atuam;
Motivao
Estruturas de Dados busca descrever modelos de estruturas de dados e procedimentos
Exemplos: Arrays, Registros, Listas, Pilhas, Filas e rvores, etc.
Motivao
Os tipos de dados e operaes determinam as estruturas de dados
Exemplo: em uma pilha ou fila voc possui operaes push e pop para colocar e retirar elementos dela;
A forma como os dados so inseridos ou removidos que difere uma estrutura da outra!
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;
Tipos de Dados
Primitivos, derivados ou colees;
Os principais tipos primitivos so: inteiro, real, lgico, caracter, ponteiro;
Estticos ou dinmicos (instanciados em tempo de execuo);
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)
Tipos Primitivos ou Escalares
Inteiro (integer, longint, etc.);
Real (real, double, etc.);Lgico (boolean); Caracter (char);
Tipos Inteiros
Operaes numricas contidas no conjunto dos nmeros inteiros:
Soma, subtrao, multiplicao, diviso inteira, resto da diviso;
Permitem comparaes de igualdade e/ou de desigualdade;
Tipos Reais
Satisfaz as operaes e comparaes possveis com tipos inteiros; Operaes numricas contidas no conjunto dos nmeros reais:
Soma, subtrao, multiplicao, diviso;
Tipos Lgicos
Permite operaes lgicas (booleanas):
E, OU, NO;
Deve-se ter muito cuidado na construo de expresses lgicas
Quanto maiores elas so, maiores as chances de cometermos equvocos.
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.
Funes para converso
De real para inteiro:
Trunc, Floor, Ceil, Round;
De caracter para inteiro:
Ord;
De inteiro para caracter:
Char;
Obs: Dependendo de quais os tipos/classes envolvidos, podemos efetuar typecasting;
Tipos Colees ou No-Escalares
Vetor;
Registro;Conjunto.
Tipo Vetor
Coleo de dados homognea indexada que pode ser acessada por meio de um ndice numrico; var v = array [1..5] of integer; v[3];
Tipo Registro
Coleo de dados heterognea cujas informaes podem ser acessadas por meio de um campo;
var r = recordc1: integer; c2: boolean; end;
r.c1;
Tipo Conjunto
Coleo de objetos (ou informaes) correlatos que podem estar presentes ou no em um dado momento; var c = set of (V1, V2, V3);
c := [V1, V2]; V1 in c;
Tipos Abstratos de Dados
Segundo 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.
Tipos Abstratos de Dados
Vetores, registros e conjuntos so interessantes...
... Mas h um problema, so estticos!
O que acontece se eu tiver um vetor de 5 posies e precisar de outras 1000? E se meu vetor tiver 100000 posies e eu somente uso 5, isso bom?
Alocao de Memria
Alocao esttica Varivel alocada ocupa espao fixo e contguo na memria; Alocao dinmica Varivel alocada ocupa espao varivel e criada segundo a necessidade do programa.
Vantagens e Desvantagens da Alocao Dinmica
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.
Referncias Bibliogrficas
[No foram definidas]
Matrizes (Aula 2)
Adriano Sena
Sumrio
Definio e Representao de Matrizes Compactao de Matrizes
Matrizes Diagonais Matrizes Triangulares Matrizes Esparsas
Definio e Representao de Matrizes
Na 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 =
Definio e Representao de Matrizes
Na 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);
var A = array [1..3, 1..4] of real;
Definio e Representao de Matrizes
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;
Matrizes unidimensionais; Matrizes bidimensionais; Matrizes n-dimensionais.
Compactao de Matrizes
Quanto memria ocupa uma matriz 5000 x 5000 de reais?
Um valor real = 4 bytes; Aproximadamente 100 MB!
E se somente alguns poucos elementos da matriz fossem diferentes de zero, poderamos reduzir o tamanho dela?
Compactao de Matrizes
Como representar de forma compactada:
Matrizes Diagonais;Matrizes Triangulares; Matrizes Esparsas;
Matrizes Diagonais
Os elementos da diagonal de uma matriz so: a[1,1], a[2,2], a[3,3], ... a[n,n]; Podemos armazen-los, ento, em uma matriz unidimensional de n elementos.
Matrizes Triangulares
Podem ser superior ou inferior; Podemos armazenar todos os elementos da parte triangular em uma matriz unidimensional de m elementos (inclui os elementos da diagonal).
Matrizes Esparsas
Podem ser n-dimensionais;
Podemos armazenar somente os elementos diferentes de zero em uma matriz unidimensional;Problemas:
Como saber qual o ndice de cada elemento na matriz?
Armazenar tambm o ndice (tupla ndice-valor);
E se um dos elementos for alterado para um valor nonulo?
Deve-se reservar algumas posies vazias para o caso de incluir novos elementos.
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!
Referncias Bibliogrficas
VELOSO, Paulo, SANTOS, Clsio, AZEREDO, Paulo, FURTADO, Antnio, Estruturas de Dados, Editora Campus Ltda
Recursividade (Aula 3)
Adriano Sena
Sumrio
Definio de Recurso Exemplo de Recurso Recurso versus Iterao Observaes Referncias Bibliogrficas
Definio de Recurso
Possibilidade de um objeto buscar definir-se em funo dele prprio; Na Computao, um mtodo recursivo quando ele invoca a si prprio a fim de resolver um problema;
Definio de Recurso
Na Matemtica, podemos encontrar claramente a recursividade na resoluo de problemas por meio de recorrncia;
Fatorial de um nmero; Potenciao; Seqncia de Fibonacci.
Exemplo de Recurso
Recorrncia para encontrar um elemento da seqncia de Fibonacci:
x1 = 1; x2 = 1; xn = xn-1 + xn-2;
Exemplo de Recurso
Funo em Pascal:function fibonacci(n: integer): integer; begin if (n < 1) then fibonacci := 0 else if (n 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;
Quicksort
Complexidade
[Ops! No escrevi aqui!]
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;
Mergesort
Ilustrao
[Ops! No escrevi aqui!]
Mergesort
Implementao
[Ops! No escrevi aqui!]
Mergesort
Complexidade
[Ops! No escrevi aqui!]
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.
Heapsort
Ilustrao
[Ops! No escrevi aqui!]
Heapsort
Implementao
[Ops! No escrevi aqui!]
Heapsort
Complexidade
[Ops! No escrevi aqui!]
Referncias Bibliogrficas
[No foram definidas]