estrutura de dados 1

Upload: adriano-henrique

Post on 20-Jul-2015

320 views

Category:

Documents


0 download

TRANSCRIPT

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]