Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
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