1 Estrutura de Dados e Algoritmos (boeres/ed.html) Tópicos Introdução/Revisão Algoritmos,...

Post on 17-Apr-2015

108 views 0 download

Transcript of 1 Estrutura de Dados e Algoritmos (boeres/ed.html) Tópicos Introdução/Revisão Algoritmos,...

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

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 , MIT Press.

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 resultados esperados

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:

cor do cabelo, estatura, peso

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

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 representação

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 de detalhe

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 concentrar nas características do problema

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

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

podem ser executadas sobre esses dados

11

Algoritmo Tipo Abstrato de dados: exemplo

estrutura do tipo alunostruct aluno{

int matricula;

int nome;

char outras_info[1024]; } operação:

procura_aluno_matricula ( aluno.matricula )

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 Dados

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

Algoritmos e Estruturas de Dados No processo de construção de

programas:

formulação do algoritmo definição de estruturas de dados

estão intimamente ligadas

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:

estático e dinâmico

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 resolvidas usando essas entidades e operações

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 tempo

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

Algoritmo Deve utilizar Estruturas Básicas de controle

formas naturais de pensar e adequadas à construção de algoritmos inteligíveis

SE ......... ENTÃO ..........SENÃO ........

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 ação: o interesse é decorrente do efeito

produzido

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

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 certo efeito desejado

23

Apresentação dos Algoritmos

formato livre com comandos das linguagens estruturadas estrutura de blocos identação funções

Linguagem C

24

Processamento de um Programa

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

Compilador +Linkeditor

programa.c

programa.exe

A é maior

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

Interpretação1. 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 PC3. Decodificar a instrução4. Executar a instrução

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

Compilação Logicamente, a tradução pode ser

dividida em 2 grandes partes: análise do programa fonte (dados de

entrada) síntese do programa objeto executável

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 executável pronto para rodar

30

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

Compilador

pgm3.c

programa.exe

A é maior

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

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

pgm1.c

pgm2.c

Linkeditor

pgm1.o

pgm2.o

pgm3.o

31

Síntese do programa objeto Linkedição

um procedimento para finalizar a resolução de referências

programas podem ser traduzidos separadamente

ou utiliza-se uma biblioteca

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

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? Que tipos de números soma?

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

Exibir o valor SOMA ao usuário

35

Modelo de um Programa

Este é um modelo seguido pelos programas

Um programa tem que ser capaz de armazenar sua entrada em algum lugar

Entrada Processa a Entrada Produz a Saída

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 dados

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 Constantes

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

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 memória para armazenar seus valores

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 daqui a 6 meses

41

Identificadores Identificador: Um elemento básico

da Linguagem identificadores válidos: A, AB, A1B12C identificador inválido: 1AB

Identificadores dão nomes a: Variáveis Trechos de Programa

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 diferentemente

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

são delimitados por { }

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

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 assumir

46

Tipo de Dados Em programas, 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 saber qual a sua representação

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

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

Definição de Variáveis

int X1

float A, B;

char Nome;

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

A e B só podem conter variáveis do tipo real

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;b e c float então a deve ser float

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; mod : resto da divisão inteira

53

Expressões Operadores Lógicos

dentro das relações lógicas, usaremos conectivos lógicos usuais

E (&&) OU (||) NEGAÇÃO (!)

Conectivos relacionais >, <, >=, <=, ==, !=

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

Comentários Uma anotacão Servem para ajudar a explicar a

codificação Seu programa deve ser compreendido

por qualquer outro programador /* ………COMENTÁRIO ………..*/ // …… comentário até o fim da linha

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 Não devem ser óbvios

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 Sintáxe: identificador = valor ;

58

Entrada / Saída Origem da Entrada

teclado disco - arquivo

Destino da Saída vídeo impressora disco - arquivo

59

Operações Especiais do “C” Incrementando 1:

i++; ++i;

Decrementando 1: i--; --i;

60

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 depende dos dados de entrada

61

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: uma certa espécie de algoritmos

62

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;

63

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;

if ( condição) {...} else {...}

64

Instruções Condicionais if (NaoAguentaCalor)

{if (JanelaNaoAbre){

FiqueForaDaCozinha;}

}else { LavePratos;}

65

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 da linguagem

66

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 é um valor lógico

67

Comandos Básicos do C Repetição

enquanto <condição> façaC1;C2;C3;C4;fim enquanto;

68

Comandos Básicos do C Repetição - “C”

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

69

Comandos Básicos do C Repetição

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

70

Comandos Básicos do C Repetição “C “

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

71

Comandos Básicos do C Repetição

for (i=0; i<N; i++){ C1; C2; C3; C4;};

72

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

73

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

74

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 :=, +, -, *, /

75

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 operações

76

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’;

77

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] #define nome ”Maria”