• Nenhum resultado encontrado

Estrutura de Dados e Algoritmos ( )

N/A
N/A
Protected

Academic year: 2021

Share "Estrutura de Dados e Algoritmos ( )"

Copied!
76
0
0

Texto

(1)

1

Estrutura de Dados e Algoritmos

(www.ic.uff.br/~boeres/ed.html)‏

Tópicos

!  Introdução/Revisão

!  Algoritmos, Noções de Complexidade !  Listas, Pilhas e Filas

!  Tabelas Hash

!  Árvores (binárias, AVL, B, etc)‏ !  Heap: lista de prioridades

(2)

2

Estrutura de Dados e Algoritmos

(www.ic.uff.br/~boeres/ed.html)‏

Bibliografia:

!  J. Szwarcfiter e L. Markeson, Estrutura de Dados e

Algoritmos , Editora LTC.

!  Cormen, Leiserson and Rivest, Introduction to Algorithms ,

(3)

3

Introdução

! 

Implementação de uma Aplicação

!  representa uma abstração da realidade !  consiste de um conjunto selecionado de

dados relacionados com o problema a ser resolvido

!  deste conjunto, é possível a obtenção dos

(4)

4

Introdução

! 

Cadastro de Pessoal de uma Empresa

!  Modelo Abstrato

-

simplificação !  Empregado

-

conjunto de dados

!  os que são relevantes para o empregador e

para os procedimentos contábeis da empresa

!  identificação, salário, dependentes, ...

!  Abstraem-se dados irrelevantes:

(5)

5

Introdução

! 

Resolução de um problema

!  escolher uma abstração da realidade !  o que é relevante para o problema !  informação: um conjunto de dados

!  comportamento: um conjunto de operações

a forma como se representa informação e suas operações estão intimamente ligadas

(6)

6

Introdução

! 

Dados Relevantes em um Problema

!  escolher um conjunto de dados: uma

representação possível da situação real

!  orientada às características do problema

!  os dados precisam ser representados

!  a etapa seguinte é a escolha de uma forma de

(7)

7

Introdução

! 

Como representar dados?

!  depende da ferramenta usada na solução !  não é uma tarefa muito trivial

!  não existe uma única solução !  não existe receita

!  a solução de um problema no computador é um

modelo

!  a construção do modelo transcende diversos níveis

(8)

8

Introdução

!  A decisão é influenciada pelo problema

!  As outras são dependentes da ferramenta

tecnologia que se emprega

!  Programador: focaliza o problema

!  decisões de nível mais baixo - projetistas do

equipamento computacional

!  ferramentas que permitam ao programador se

(9)

9

Algoritmo

!  Um processo sistemático para a resolução de

problemas

!  dois aspectos básicos no estudo de algoritmos

➨ correção e análise

!  correção: exatidão do método empregado !  análise: obtenção de parâmetros que

permitam verificar a eficiência do algoritmo (execução e memória ocupada)‏

(10)

10

Algoritmo

!  Computa uma saída (o resultado do problema) a

partir de uma entrada

!  durante o processo, manipula dados gerados

a partir de sua entrada

!  dados dispostos e manipulados de forma

homogênea ➨ Tipo Abstrato de dados

!  um conjunto de dados + operações que

(11)

11

Algoritmo

!  Tipo Abstrato de dados: exemplo

!  estrutura do tipo aluno

struct aluno{ int matricula; int nome; char outras_info[1024]; } !  operação: procura_aluno_matricula ( aluno.matricula )‏

(12)

12

Algoritmo

!  Um algoritmo é projetado em termos de Tipos

Abstratos de Dados

!  Para implementá-lo em uma Linguagem de

programação:

!  como representá-lo nesta linguagem?

!  tipos e Operações suportadas pelo computador. !  na sua representação emprega-se Estruturas de

(13)

13

Algoritmos e

Estruturas de Dados

! 

Resolução de um Problema

!  Algoritmo !  representação do comportamento !  Estrutura de Dados !  representação da informação

(14)

14

Algoritmos e

Estruturas de Dados

!  No processo de construção de programas: ➫  formulação do algoritmo

➫  definição de estruturas de dados

(15)

15

Algoritmos e

Estruturas de Dados

!  Decisões sobre estruturas de dados não

podem ser tomadas sem conhecimento dos algoritmos aplicados e vice-versa

!  Num algoritmo vamos distinguir dois aspectos

complementares:

(16)

16

Estrutura de Dados

!  Como a informação é organizada , como será

manipulada e como será utilizada

!  estudo envolve dois objetivos complementares: !  Identificar e desenvolver entidades matemáticas e

operações

!  Determinar que classes de problemas podem ser

(17)

17

Algoritmo

!  Um texto contendo comandos (instruções)

!  devem ser executados na ordem especificada !  corresponde a representação concreta e tem

caráter estático

!  esse texto nos interessa pelos efeitos que

causa decorrentes de sua execução dado um conjunto de valores iniciais

!  execução: evento dinâmico " evolui no

(18)

18

Algoritmo

!  Uma dificuldade na concepção e no

entendimento de algoritmos é o relacionamento dos aspectos estático e dinâmico

!  como entender as estruturas dinâmicas das

possíveis execuções do algoritmo a partir da estrutura estática

(19)

19

Algoritmo

!  Deve utilizar Estruturas Básicas de controle

!  formas naturais de pensar e adequadas à

construção de algoritmos inteligíveis

(20)

20

Algoritmo

!  Estado de um dado sistema é o conjunto de

propriedades desse sistema que são relevantes na situação considerada

!  conjunto de valores de variáveis de um programa

!  Ação - evento que ocorre num período de

tempo finito estabelecendo um efeito desejado e bem definido

(21)

21

Algoritmo

!  Em todo evento pode-se reconhecer um padrão

de comportamento, fazendo-se abstração de diferentes estados iniciais e efeitos

!  cada vez que o padrão de comportamento é

seguido, o evento ocorre

!  seu efeito é totalmente determinado pelo

padrão de comportamento e pelo estado inicial

(22)

22

Algoritmo

!  É a descrição de um padrão de comportamento,

em termos de um repertório bem definido e finito de ações primitivas, que podem ser executadas

!  possui um caráter imperativo

!  uma ação no algoritmo: um comando

!  é uma norma executável para estabelecer um

(23)

23

Apresentação dos Algoritmos

!  formato livre com comandos das linguagens

estruturadas

!  estrutura de blocos !  identação

!  funções

(24)

24

Processamento de um Programa

If (a>b)‏ {

printf ( “A é maior”)‏ } else { printf (“B é maior”)‏ } Tradutor: Compilador + Linkeditor A é maior

(25)

25

Processamento de Linguagens

!  Linguagens de Programação: são projetadas

em função da facilidade na construção e confiabilidade dos programas

!  Como executar em arquiteturas diferentes? !  Duas alternativas:

!  Interpretação !  Tradução

(26)

26

Interpretação

1. Obter o próximo comando do programa

2. Determinar que ações devem ser executadas 3. Executar essas ações

!  Esta seqüência é bastante semelhante àquela executada

por computadores tradicionais:

1. Obter a próxima instrução (PC) 2. Incrementar o PC

3. Decodificar a instrução 4. Executar a instrução

(27)

27

Tradução

!  Programas escritos em LP de alto nível são

traduzidos para versões equivalentes em linguagem de máquina antes de serem executados

!  Essa tradução é feita em vários passos

!  Compilador !  Linkeditor !  Loader

(28)

28

Compilação

!  Logicamente, a tradução pode ser dividida em 2

grandes partes:

!  análise do programa fonte (dados de

entrada)‏

(29)

29

Síntese do programa objeto

!  A saída da fase anterior consiste basicamente

de

!  programas quase executáveis (*.o)‏

!  podem fazer referências a dados externos ou

outros programas

!  Linkedição: une diversos *.o em um programa

(30)

30

Programa

If (a>b)‏ {

printf ( “A é maior”)‏ } else { printf (“B é maior”)‏ } compilação If (a>b)‏ {

printf ( “A é maior”)‏ } else { printf (“B é maior”)‏ } If (a>b)‏ {

printf ( “A é maior”)‏ } else { printf (“B é maior”)‏ } pgm1.c compilação compilação pgm2.c pgm3.c pgm1.o pgm2.0 pgm3.0 linkedição programa.exe

(31)

31

Síntese do programa objeto

! 

Linkedição

!  um procedimento para finalizar a resolução

de referências

!  programas podem ser traduzidos

separadamente

(32)

32

Visão Geral de um Programa

! 

O Problema

➫  Imprimir uma mensagem mostrando o que

está sendo somado

➫  Calcular a soma de três números ➫  Imprimir o resultado

(33)

33

Visão Geral de um Programa

!  Este programa não faz muita coisa

!  Como seleciona os números a somar? !  Não imprime nenhuma mensagem

explicativa?

(34)

34

Visão Geral de um Programa

➫ 

Definindo melhor o problema

➫  Exibir para o usuário o que faz o programa ➫  Exibir o que espera como entrada

➫  Pedir os três valores (A, B,C) e armazenar ➫  Somar A + B + C e guardar em SOMA

(35)

35

Modelo de um Programa

!  Este é um modelo seguido pelos programas

!  Um programa tem que ser capaz de armazenar

sua entrada em algum lugar

(36)

36

Modelo de um Programa

!  Entradas são armazenadas para serem

processadas e gerar uma saída útil e desejada

!  Dados são armazenados em variáveis

!  posições de memória com um nome que

podem conter dados

!  as variáveis podem conter tipos diferentes de

(37)

37

Variáveis e Tipos de Dados

!  Variáveis podem conter valores diferentes

durante a execução do programa

!  os valores são consistentes com o tipo da

variável

!  Alguns valores não devem ser alterados durante

a execução

(38)

38

Variáveis e Tipos de Dados

!  Dados - em variáveis ou constantes -podem ser

de diferentes tipos

!  inteiros ( curtos / longos)‏ !  reais - ponto flutuante

!  precisão simples ou dupla

!  caracteres isolados !  string de caracteres

(39)

39

Variáveis

! 

Variável é algo que se altera

! 

Dados armazenados em uma variável

podem se modificar

! 

Em um programa

!  definir uma variável significa reservar uma

(40)

40

Variáveis

!  Deve-se atribuir às variáveis nomes que o

ajudem a lembrar a finalidade de cada uma delas

!  Nomes mais longos tornam seu programa

mais claro

!  outros podem ter que revisar seu código

!  pode ser necessário revisar o programa

(41)

41

Identificadores

!  Elemento básico da Linguagem !  Identificadores dão nomes a:

!  Variáveis

(42)

42

Identificadores

! 

C- Padrão ANSI: nomes de variáveis,

funções, rótulos == identificadores

!  Tamanho: 1 a diversos caracteres: pelo

menos os 61ºs são válidos

!  1o. caracter - letra ou sublinhado

!  letras maiúsculas e minúsculas são tratadas

(43)

43

Blocos

!  um conjunto de comandos com uma função

bem definida

!  serve para definir os limites onde as

variáveis declaradas em seu interior são conhecidas

!  Variáveis locais a blocos e globais a blocos !  Blocos podem possuir um nome:

sub-programas (funções no C) ou não

(44)

44

Tipo de Dados

!  Na matemática, variáveis são classificadas de

acordo com algumas características importantes

!  Existe distinção clara entre

!  variáveis reais, complexas e lógicas

!  valores individuais e conjunto de valores !  funções

(45)

45

Tipo de Dados

! 

Esta noção de classificação é muito

importante

! 

Cada constante, variável, expressão ou

função é de um certo

tipo

!  refere-se ao conjunto de valores que pode

(46)

46

Tipo de Dados

! 

Em programas (em geral), não é

possível deduzir o tipo da variável a

partir do seu contexto

!  é necessário explicitar o tipo de cada

variável

!  a cada tipo de dados está associada uma

representação na computador

!  é necessário conhecer o tipo de dados para

(47)

47

Tipo de Dados

!  A um tipo de dados está associado:

!  uma representação

!  o tamanho de células de memória para

armazenar esta representação

!  a área de memória onde ficará o valor da variável tem que ter dimensões compatíveis com a sua representação

!  conjunto de valores que variáveis de um dado tipo podem assumir

(48)

48

Tipo de Dados

!  As operações exigem argumentos de um dado

tipo e produzem resultados do mesmo tipo

!  É importante para o compilador saber o tipo de

cada variável antes de empregá-la em uma operação

(49)

49

Definição de Variáveis

! 

int X1

! 

float A, B;

(50)

50

Definição de Variáveis

!  A semântica da declaração de uma variável

corresponde a

!  criação de locais na memória rotulados com o

nome da variável (identificador)

!  marcada com o tipo de valores que ela pode

conter (equivale a um tamanho e forma de representação)‏

!  X1: é o nome do local de memória que só pode

conter variáveis do tipo inteiro

(51)

51

Compatibilidade de Tipos

!  É importante observar que:

!  o resultado da expressão do lado direito de

um comando de atribuição deve ser coerente com o tipo declarado para a variável do lado esquerdo

!  a = b+c;

(52)

52

Expressões

!  forma linearizada usada na matemática !  Operadores Aritméticos !  +, -, *, / !  3/2 = 1 (divisão de inteiros)‏ !  Precedência: da matemática !  uso de parênteses !  a = b+c * (x*y-5); !  a = a+2;

(53)

53

Expressões

! 

Operadores Lógicos

!  dentro das relações lógicas, usaremos

conectivos lógicos usuais

!  E (&&)‏ !  OU (||)‏

!  NEGAÇÃO (!)‏

! 

Conectivos relacionais

(54)

54

Expressões

! 

Prioridades para operações mistas

!  1o. : parênteses e funções !  2o. : expressões aritméticas

* , / + , - (binários)‏ !  3o. : comparações >, >=, <, <=, ==, != !  4o. : ! !  5o. : && !  6o. : ||

(55)

55

Comentários

!  Uma anotacão

!  Servem para ajudar a explicar a codificação !  Seu programa deve ser compreendido por

qualquer outro programador

!  /* ………COMENTÁRIO ………..*/

(56)

56

Comentários

!  Devem ser utilizados com liberalidade em

todo o programa

!  Devem explicar seu algoritmo

!  Estão relacionados com a solução do

problema

(57)

57

Atribuição

! 

Atribuição

!  designam valores a uma variável !  A = B; /* Faz A = B */

!  /* Este é um comentário óbvio -

desnecessário */

!  os valores atribuídos a uma variável devem

ser compatíveis com seu tipo

(58)

58

Operações Especiais do “C”

! 

Incrementando 1:

!  i++; !  ++i; ! 

Decrementando 1:

!  i--; !  --i;

(59)

59

Fluxo de Controle

!  o que deve ser executado: processo dinâmico !  determina em cada passo da execução, qual o

próximo comando a ser executado

!  a ordem de execução das ações é a chave para

entender o funcionamento do algoritmo

(60)

60

Estruturas Básicas de Controle

!  Um algoritmo deve ser determinístico:

!  dada as mesmas condições iniciais deve

produzir a final da execução os mesmos resultados

!  só estamos interessados em algoritmos

que terminam em um tempo finito

!  Programas:

(61)

61

Estruturas Básicas de Controle

!  Seqüenciamento

:

!  Separa um comando do outro e determina a

execução em seqüência dos comandos

!  estrutura de controle mais simples: seqüência

simples

➫  traz a cesta com batatas; ➫  traz a panela do armário; ➫  coloca o avental;

➫  descasca batatas; ➫  devolve a cesta;

(62)

62

Estruturas Básicas de Controle

!  condicional: se .... então

➫  traz a cesta com batatas; ➫  traz a panela do armário;

➫  se roupa é clara então coloca avental; ➫  descasca batatas;

➫  devolve a cesta;

(63)

63

Instruções Condicionais

!  if (NaoAguentaCalor)‏ { if (JanelaNaoAbre)‏ { FiqueForaDaCozinha; } } else { LavePratos;}

(64)

64

Comandos Básicos do C

!  <condição> é qualquer expressão cujo

resultado é um valor booleano

!  onde está relacionado um bloco de

comandos (limitados por { / }) pode ser usado um único comando

!  bloco: como um novo comando / extensão

(65)

65

Comandos Básicos do C

!  Repetição

!  quando um conjunto de ações é executado

repetidamente enquanto uma determinada condição permanece válida

!  condição é uma expressão cujo resultado é

(66)

66

Comandos Básicos do C

! 

Repetição

enquanto <condição> faça C1;

C2; C3; C4;

(67)

67

Comandos Básicos do C

! 

Repetição - “C”

while ( <condição> )‏ {

C1; C2; C3; C4;

}

(68)

68

Comandos Básicos do C

! 

Repetição

faça C1; C2; C3; C4; enquanto <condição>;

(69)

69

Comandos Básicos do C

! 

Repetição “C “

do { C1; C2; C3; C4; } while (<condição>);

(70)

70

Comandos Básicos do C

! 

Repetição

for (i=0; i<N; i++)‏ { C1;

C2; C3; C4; };

(71)

71

Comandos Básicos do C

!  Repetição

!  while<condição> ……...

!  se já da primeira vez a condição for falsa, os comandos

não são executados nenhuma vez

!  do {……} while , condição>

!  se da primeira vez a condição for falsa, os comandos são

executados uma vez

!  Enquanto a condição for verdadeira os comandos

são executados, quando for falsa, o comando é abandonado

(72)

72

Tipos de Dados Simples Inteiros

!  Qualquer valor do conjunto dos números

inteiros

!  inteiros curtos - int - 4 bytes !  inteiros longos - long - 8 bytes !  operações

!  =

!  +, -, *, /(divisão de inteiros)‏ !  mod

(73)

73

Reais

!  Também chamados de ponto flutuante !  Qualquer valor do conjunto dos números

reais

!  estão limitados no número de dígitos

decimais - float ou double

!  sua representação: mantissa e expoente !  operações :=, +, -, *, /

(74)

74

Usando Tipos

!  Se tenho que definir uma variável para conter

idades, que tipo usar?

!  inteiros, e curtos são suficientes

!  É função do:

!  conjunto de valores que a variável pode

assumir

!  da precisão que se deseja no resultado de

(75)

75

Caracteres

!  É qualquer caracter isolado representado no

computador

!  letras e números são caracteres !  caracteres especiais - &, %

!  caracteres especiais e não visíveis - ESC,

CR, LF,…

!  ocupam 1 byte - ASCII !  char a = ‘A’;

(76)

76

Strings de Caracteres

!  Um número arbitrário de ocorrências de

caracteres

!  deixa em aberto o número de ocorrências !  não possui uma representação direta no C !  char a[50]

Referências

Documentos relacionados

A incidência de FO no estado de Sergipe obtida através dos dados do SINASC, no mesmo período da pesquisa, foi de 0,54 novos casos de fissura para cada 1000 nascidos vivos..

Changes in the gut microbiota appears to be a key element in the pathogenesis of hepatic and gastrointestinal disorders, including non-alcoholic fatty liver disease, alcoholic

Como forma de operacionalizar a organização e o trabalho da rede de atenção aos usuários de drogas, a PAIUAD pressupõe o tratamento e reinserção social dos usuários/dependentes

Os resultados mostram que tanto o Grau de Intangibilidade quanto o Retorno sobre Investimentos das empresas do setor de Consumo Cíclico são superiores aos do de

palavra ao Presidente, que procedeu à leitura do parecer da comissão avaliadora, composta 98.. pelos professores Roberto de Souza Salgado (Presidente – EEL),

As condições naturais, o tipo de colonização, a evolução das técnicas agrícolas adotadas e as políticas públicas aplicadas foram determinantes para o desenvolvimento

Trabalho de Conclusão de Curso apresentado ao curso de Agronomia, no Centro de Ciências Agrárias, da Universidade Federal de Santa Catarina, como requisito para

Os instrumentos de pesquisa utilizados serão: Ficha de Rastreamento das Participantes do Estudo, International Consultation on Incontinence Questionnaire – Short Form