estrutura de dados i aula i · 2019-02-14 · uma estrutura de dados é um modo de armazenar os...

Post on 16-Jul-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ESTRUTURA DE DADOS IAULA IPROF. ME. HÉLIO ESPERIDIÃO

O que é um dado?Dado pode ser definido como a matéria-prima originalmente obtida de uma ou mais fontes (etapa de coleta).

o que é a informaçãoA Informação é o resultado do processamento.

Isto é, o dado processado ou "acabado”.

Obtendo a informação

Dados Processamento Informação

Exemplo de Processamento

14/02/2019 5

Área S do

circuloBase,Altura

2

.abs =

Modelo

Matemático

Implementação (Padrão de bits/rotinas)

Processamento de Dados:O esquema.

ProcessamentoEntrada Saída

Dispositivode Entrada

Dispositivode Saída

Memória

CPU

Definindo Abstração

14/02/2019 7

AbstraçãoQuando a matéria-prima usada num processo é abstrata, isto é, apresenta-se sob a forma de valores, quantidades ou símbolos, então falamos em processamento de dados. Quando o processamento é realizado por um computador, entrada refere-se aos dados colhidos do mundo real externo ao computador, e processo refere-se a uma série finita de operações que são realizadas a partir destes dados, a fim de transformá-los em alguma informação desejada (saída).

ImportanteNem todo tipo de dado abstrato pode ser implementado em toda sua generalidade.

Observe o conjunto Z

Z = {...,-3,-2,-1,0,1,2,3,...}

O conjunto Z deve ser finito.

14/02/2019 9

Conceito de Estrutura de DadosUma estrutura de dados é um modo de armazenar os dados no computador para que os dadossejam usados com eficiência.

Normalmente devem ser escolhidas cuidadosamente; Uma estrutura de dados bemdesenvolvida permite que uma variedade de operações críticas sejam implementadas por umalinguagem de programação com os tipos de dados e referências e as operações advindas dosmesmos.

Objetivo da Estrutura de

Dados

Teórico: Identificar e desenvolver modelos matemáticos, determinando que classes de problemas podem ser resolvidos como uso deles;

Prático: Criar representações concretas dos objetos e desenvolver rotinas capazes de atuar sobre estas representações, de acordo com modelo considerado.

REPRESENTAÇÃO DE DADOS

✓ O matemático inglês George Boole (1815-1864) publicou em 1854 os princípios da lógica booleana.

✓ Segundo Boole tudo poderia ser representado utilizando apenas os números 0 e 1.

010000111010101011110110101010110101010110101010101101

George Boole

Bit

ü Simplificação de “dígito binário”(BInary digiT em inglês)

ü É a menor unidade de informação que pode ser armazenada ou transmitida.

ü Um bit pode assumir somente 2 valores, por exemplo: 0 ou 1, verdadeiro ou falso.

Byte

✓ Um byte nada tem de especial, é apenas um

número binário de oito algarismos

0 1 0 1 0 1 1 1

Bytes

✓ 1 Byte é representado por uma cadeia de 8 bits

1 byte = 8 bits1024 bytes = 1 K byte

1.048.576 bytes = 1 Mega byte

Noção de tamanho

Bit 20 0 ou 1

Byte 23 8 bits

Kilo 1 Kbyte 210 1024 Bytes

Mega 1 Mbyte 220 1 024 kB

Giga 1 Gbyte 230 1 024 MB

Tera 1 Tbyte 240 1 024 GB

peta 1 Pbyte 250 1 024 TB

Exa 1 Ebyte 260 1 024 PB

Zetta 1 Zbyte 270 1 024 EB

Yotta 1 Ybyte 280 1 024 ZB

Decimais para Binários

7 2

31 2

11

= 111

Quantos Bits são Necessários para representar o numero 7?

Binários para Decimais

2 2 2012

+ +1 x 1 x 1 x

4 + 2 + 1 =7

= 7

Número binário: 111

Tipos de dadosTipo descrição Bits

byte Inteiro sem sinal 8 0 a 255

sbyte inteiro com sinal com sinal

8 -128 a 127

int inteiro com sinal com sinal

32 -2,147,483,648 to 2,147,483,647

uint Inteiro sem sinal 32 0 a 4294967295

short inteiro com sinal com sinal

16 -32.768 a 32.767

long inteiro com sinal com sinal

64 -922337203685477508 to 922337203685477507

ulong Inteiro sem sinal 64 0 a 18446744073709551615

Importância da escolha correta do tipo de dadosEconomia de memória.

Economia de processador.

Economia de Disco.

Qual o resultado da economia?

Conceito de Ponteiros

Um ponteiro é uma variável que representa a localização de um item de dados na memória ou seja ele aponta para um endereço de memória na qual existe um dado para ser processado. Os ponteiros são usados para otimizar e aumentar performance de memória em uma aplicação.

14/02/2019 21

Armazenamento da informação na memória RAM

14/02/2019 22

RAM0012F588

num = 80

x = 123.89

0012F580 Variável inteira (int)

Variável dupla precisão (double)

Ponteiro

*p

*j

Aplicações da Estrutura de Dados

Desenvolvimento de Banco de dados;

Software GIS (Sistema Geográfico de informções);

Geradores automáticos de programas;

Software de reconhecimento de padrões;

Sistemas de Computação Gráfica;

Sistema de IA (Inteligência Artificial);

Criação de Compiladores;

Expressões Regulares;

Processamento de Imagens Digitais

14/02/2019 23

É uma sequência de operações bem definidas que, quando executadas por um computador, sempre termina num determinado período de tempo, produzindo uma solução ou indicando que a solução não pode ser obtida.

◼ Procedimento passo a passo para obtenção de um fim

Algoritmo

Complexidade de Algoritmos

A Complexidade de um Algoritmo consiste na quantidade de “trabalho”necessária para a sua execução.

Complexidade de Algoritmos

Um algoritmo serve para resolver um

determinado problema.

Todos os problemas têm sempre uma entrada de dados

(N)

O tamanho desse N afeta diretamente o tempo de resposta de um algoritmo

A complexidade de um algoritmo pode ser dividido em:◦ Complexidade Espacial: Quantidade de recursos utilizados para resolver

o problema;

◦ Complexidade Temporal: Quantidade de Tempo utilizado.

Em ambos os casos, a complexidade é medida de acordo com o tamanho dos dados de entrada (N)

Complexidade de Algoritmos

Operações primitivas

De modo geral, são as computações básicas realizadas por um algoritmo:

◦ Atribuição de valor para uma variável

◦ Comparação entre valores

◦ Cálculo aritmético

◦ Chamada de função

Sua definição exata não é importante.

Apesar de serem obviamente diferentes, são contabilizadas como tempo unitário

28

Complexidade EspacialQ UA N TO S R EC URS O S D E M E M Ó R I A S ÃO N EC ES S Á R I OS PA R A E X EC U TA R O P R O GR A MA A BA I XO :

29

Complexidade EspacialDouble: 64 bits

◦ 6*64bits = 384 bits

Int: 32 bits◦ 1*32bits = 32bits

Total de Recursos:◦ 416bits

◦ 52Bytes.

30

Complexidade de Algoritmos

Existem três escalas de complexidade:◦ Melhor Caso

◦ Pior Caso

Nas três escalas, a função f(N) retorna a complexidade de um algoritmo com entrada de N elementos

Complexidade de Algoritmos – Melhor Caso

Definido pela letra grega Ω (Ômega)

É o menor tempo de execução em uma entrada de tamanho N

É pouco usado, por ter aplicação em poucos casos.

Ex.:

◦ Se tivermos uma lista de N números e quisermos encontrar algum deles assume-se que a complexidade no melhor caso é f(N) = Ω (1), pois assume-se que o número estaria logo na cabeça da lista.

Melhor casoEncontrar o número 35

• Se tivermos uma lista de N números e quisermos encontrar algum deles assume-se que a complexidade no melhor caso é f(N) = Ω (1), pois assume-se que o número estaria logo na cabeça da lista.

33

35 23 20 10 22 10 15 22 1 3

Complexidade de Algoritmos

–Pior Caso

Será o caso utilizado durante esse curso

Representado pela letra grega O (O maiúsculo. Trata-se da letra grega ômicron maiúscula)

É o método mais fácil de se obter. Baseia-se no maior tempo de execução sobre todas as entradas de tamanho N

Ex.:

◦ Se tivermos uma lista de N números e quisermos encontrar algum deles, assume-se que a complexidade no pior caso é O (N), pois assume-se que o número estaria, no pior caso, no final da lista. Outros casos adiante

Complexidade de Algoritmos –

Pior Caso• Se tivermos uma lista de N números e quisermos encontrar algum deles, assume-se que a complexidade

no pior caso é O (N), pois assume-se que o número estaria, no pior caso, no final da lista.

35 23 20 10 22 10 15 22 1 3

Complexidade de Algoritmos

Mas como saber qual é a complexidade de um determinado algoritmo implementado?

Para resolver esse problema, dividiu-se os algoritmos em “Classes de Problemas”, de acordo com o parâmetro que afeta o algoritmo de forma mais significativa

Classes de Algoritmos

São elas:

1. Complexidade Constante

2. Complexidade Linear

3. Complexidade Quadrática

4. Complexidade Cúbica

5. Complexidade Exponencial

Complexidade Constante

São os algoritmos de complexidade O(1)

Independe do tamanho N de entradas

É o único em que as instruções dos algoritmos são executadas num tamanho fixo de vezes

Ex.:int RetornaPrimeiro(List: t){

return t[0];

}

Complexidade Linear

São os algoritmos de complexidade O(N)

Uma operação é realizada em cada elemento de entrada, ex.: pesquisa de elementos em uma lista

Procedure Busca(Lista, x)

i:=0;

while Lista.Elemento[i] <> x do

if i >= Lista.MaxTam then

pos := -1

else

pos := i;

i := i+1;

End;

Retorna i

Complexidade Quadrática

São os algoritmos de complexidade O(N²)

Itens são processados aos pares, geralmente com um loop dentro do outro

Ex.:

Procedure SomaMatriz(Mat1, Mat2);

Var i, j: integer, MatRes;

Begin

for i:=1 to n do

for j:=1 to n do

MatRes[i,j] := Mat1[i, j] + Mat2[i,j];

Complexidade Cúbica

São os algoritmos de complexidade O(N³)

Itens são processados três a três, geralmente com um loop dentro do outros dois

Ex.:Procedure SomaElementos_Vetor_Indices_Matriz

(mat: Matriz, vet: Vetor);

Var i, j: integer;

Begin

for i:=1 to n do

for j:=1 to n do

for k:=1 to n do

mat[i, j] := mat[i, j] + vet[k];

Complexidade Exponencial

São os algoritmos de complexidade O(2N)

Utilização de “Força Bruta” para resolvê-los (abordagem simples para resolver um determinado problema, geralmente baseada diretamente no enunciado do problema e nas definições dos conceitos envolvidos)

Geralmente não são úteis sob o ponto de vista prático

◼Bubble sort

Métodos simples de Ordenação de dados

Bubble sortO bubble sort, ou ordenação por flutuação (literalmente "por bolha"), é um algoritmo simples.

A ideia é percorrer o vetor diversas vezes até que ele esteja ordenado, a cada passagem o maior elemento é deslocado (flutua) para o final do vetor

44

Bubble sortEssa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo.

45

top related