Post on 17-Apr-2015
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”