algoritmos e estruturas de dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... ·...

33
1 Estruturas de Algoritmos e Dados Caderno de acetatos da disciplina de Algoritmos e Estruturas de Dados Ano lectivo: 2004/2005 Versão: 0.1 Cursos: Informática de Gestão Docente: Paulo Matos Email: [email protected] Reis Quarteu Email: [email protected] 2 Estruturas de Algoritmos e Dados Apresentação da Disciplina Objectivos Aperfeiçoar e dar a conhecer novas metodologias de programação, reforçando os conhecimentos até aqui adquiridos em programação; Dotar os alunos da experiência necessária à implementação de programas de qualidade, com capacidade de desenvolverem e adaptarem as mais correctas estruturas e algoritmos, na resolução dos mais diversos problemas.

Upload: lyngoc

Post on 23-Dec-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

1

Estruturas de

A lgoritmos e

Dados Caderno de acetatos da disciplina de

Algoritmos e Estruturas de Dados

Ano lectivo: 2004/2005

Versão: 0.1

Cursos: Informática de Gestão

Docente: Paulo Matos

Email: [email protected]

Reis Quarteu

Email: [email protected]

2

Estruturas de

A lgoritmos e

Dados Apresentação da Disciplina

Objectivos

� Aperfeiçoar e dar a conhecer novas metodologias de programação, reforçando os

conhecimentos até aqui adquiridos em programação;

� Dotar os alunos da experiência necessária à implementação de programas de

qualidade, com capacidade de desenvolverem e adaptarem as mais correctas

estruturas e algoritmos, na resolução dos mais diversos problemas.

Page 2: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

3

Estruturas de

A lgoritmos e

Dados Apresentação da Disciplina

Tópicos

� Métodos de avaliação da qualidade do software

� Representação algorítmica

� Estruturas de dados dinâmicas e lineares

� Estruturas de dados dinâmicas não lineares

� Algoritmos de ordenação e pesquisa

4

Estruturas de

A lgoritmos e

Dados Sistema de avaliação para 2004/2005

Mini-trabalhos práticos (3 por aluno) 30%

Trabalho final 30%

Prova escrita 40%

Nota mínima às três componentes de 7.5 valores em 20.

Page 3: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

5

Estruturas de

A lgoritmos e

Dados Bibliografia

Sebenta de Algoritmos e Estruturas de Dados

Paulo Matos

Algorithmics in C++, Sedgewick

Addison-Wesley Publishing Company

Programação em C++ - Algoritmos e Estruturas de Dados

Pimenta Rodrigues, …

FCA

6

Estruturas de

A lgoritmos e

Dados Programa de Algoritmos e Estruturas de Dados

Introdução

Noção de Algoritmo

Eficiência algorítmica

Representação das estruturas de dados x Eficiência algorítmica

Especificação de uma linguagem algorítmica

Representação algorítmica

Representação das estruturas de dados

Do algoritmo ao programa, boas e más técnicas de programação

Page 4: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

7

Estruturas de

A lgoritmos e

Dados Programa de Algoritmos e Estruturas de Dados

Estruturas de Dados Lineares

Listas ligadas simples (revisões)

Listas duplamente ligadas

Stack’s

Queue’s

Tabelas de Hash

8

Estruturas de

A lgoritmos e

Dados Programa de Algoritmos e Estruturas de Dados

Estruturas de Dados Não Lineares

Árvores Genéricas

Árvores Binárias

Árvores Binárias de Pesquisa

Árvores Binárias de Pesquisa Balanceadas

Heaps

Grafos

Page 5: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

9

Estruturas de

A lgoritmos e

Dados Horas de Atendimento

Paulo Matos

Email: [email protected]

Gabinete 92

Segundas-Feiras das 11:00 às 13:00

Quartas-Feiras das 9:00 às 11:00

Reis Quarteu

Email: [email protected]

Gabinete 37

Quartas-Feiras: das 14:00 às 16:00

Quintas-Feiras: das 10:00 às 12:00

10

Estruturas de

A lgoritmos e

Dados Notas e Avisos

� Os alunos devem requisitar no centro de comunicações da ESTiG uma conta para

poderem trabalhar durante as aulas práticas.

� Cada aluno deve comparecer às aulas práticas do turno que lhe foi atribuído pela

secretaria académica.

� Os alunos devem, sempre que necessário, recorrer ao apoio dos docentes

utilizando para tal as horas de atendimento disponíveis, ou colocando as questões

por email.

Page 6: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

11

Estruturas de

A lgoritmos e

Dados Introdução

Noção de Algoritmo

Um algoritmo consiste numa sequência de operações bem definidas e sem

ambiguidades, que descreve uma solução exequível computacionalmente, de um

problema, independentemente da linguagem de programação a utilizar.

A implementação prática de um algoritmo pode variar com a linguagem a utilizar e de

programador para programador, no entanto para um mesmo estado inicial e conjunto

de dados de entrada (definidos como instância inicial do problema) deve produzir

sempre a mesma solução.

12

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica

Uma forma de avaliar um algoritmo consiste em determinar o esforço computacional

do mesmo, através do qual se pode comparar a eficiência entre algoritmos.

O esforço computacional é obtido através da Ordem de Complexidade do algoritmo,

que é definida da seguinte forma:

Um algoritmo tem como Ordem de Complexidade O(f(n)), quando o número de

operações primitivas executadas para obter a solução para a instância do problema,

cujo tamanho é n, não exceder uma constante vezes f(n), para um n suficientemente

grande.

Page 7: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

13

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica

Seja g(n) a função que determina o tempo de execução das primitivas de um algoritmo,

pode-se então definir f(n) como a função que resulta de:

n'n,f(n)K*g(n) ≥∀≤

Onde K e n' são duas quaisquer constantes que satisfaçam a condição anterior.

NOTA: n' permite salvaguardar a condição para problemas de dimensão reduzida.

14

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

Pretende-se avaliar a ordem de complexidade da solução fornecida, para a resolução de

um problema de ordenação de uma sequência de n números, por comparações

sucessivas.

Page 8: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

15

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

Problema de tamanho 3:

SE seq.get( 1 ) > seq.get( 2 ) ENTÃO

seq.swap( 1, 2)

FIMSE

SE seq.get( 2 ) > seq.get( 3 ) ENTÃO

swap(seq, 2, 3)

FIMSE

SE seq.get( 1) > seq.get( 2) ENTÃO

seq.swap( 1, 2)

FIMSE

16

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

Problema de dimensão n:

PARA i � n ATÉ 2 DE –1 EM –1 FAZER

PARA j � 1 ATÉ i-1 FAZER

SE seq.get( j ) > seq.get( j+1) ENTÃO

seq.swap( j, j+1)

FIMSE

FIMPARA

FIMPARA

Page 9: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

17

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

De onde se obtêm os seguintes valores de g(n):

n 2 3 4 5 ...

g(n) 1 1+2 1+2+3 1+2+3+4 ...

18

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

É possível converter a série num somatório, que por sua vez pode ser convertido numa

equação em ordem a n:

2)1n(*n

*n

1ii*)n(g

−=∑

== ττ

Em que τ representa o tempo de execução por ciclo. O seu valor é no entanto

irrelevante para os restantes cálculos, uma vez que pode ser absorvido pela constante

K, pelo que é eliminado.

Page 10: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

19

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

Para determinar a ordem do algoritmo é necessário encontrar um f(n) tal que:

)n(f*K)n(g ≤

Propondo f(n) = n2, obtém-se a seguinte inequação:

2n*K2

)1n(*n ≤−

de onde é possível concluir que, para valores de K ≥ 0.5, a inequação é sempre

verdadeira (n = 2,3,4,...). Pelo que o f(n) proposto garante sempre que K* f(n) é um

majorante de g(n).

20

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

Diz-se assim que a ordem do algoritmo é:

)n(O))n(f(O 2=Ou seja, no pior dos casos a ordem de complexidade do algoritmo é quadrática.

Page 11: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

21

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

No entanto uma análise mais atenta permite concluir que a solução proposta é

determinística, isto é, para um sequência de tamanho n demora sempre o mesmo tempo

a executar, independentemente desta já estar, ou não, ordenada (ou parcialmente

ordenada). Pelo que o tempo é dado pela equação:

2)1n(*n

*n

1ii*)n(g

−=∑

== ττ

22

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

Poder-se-á então perguntar o porquê de utilizar a Ordem de Complexidade como

forma de avaliação de algoritmos. A resposta é simples, é que apesar de muitos

algoritmos serem determinísticos, muitos outros há em que tal não acontece e é para

estes últimos que esta forma de avaliação é útil, uma vez que permite obter uma

função que serve de majorante para o tempo de execução.

Page 12: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

23

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exemplo

Valores típicos para a ordem de complexidade são:

� Constante O(1)

� Logarítmica O(log n)

� Linear O(n)

� n log n O(n log n)

� Quadrática O(n2)

� Cúbica O(n3)

� Exponencial O(2n)

24

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica

� A ordem de complexidade apenas permite comparar algoritmos de ordens

distintas. Caso contrário é necessário ter em conta a soma dos tempos de execução

das instruções primitivas e eventualmente uma análise detalhada da estratégia de

cada um dos algoritmos.

� Nem sempre um algoritmo de ordem elevada (n3, 2n) é um mau algoritmo.

Exemplos são alguns dos algoritmos utilizados na resolução de problemas NP-

Completos.

� Por vezes, ocorre que um algoritmo de ordem elevada se revele na prática bastante

eficiente, o que normalmente se deve a heurísticas que permitem “desprezar”

grande parte do espaço de soluções, tornando a sua eficiência comparável à um

algoritmo de ordem inferior.

Page 13: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

25

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica

� A Ordem de Complexidade é uma medida a priori, ou seja, permite antever a

eficiência da implementação prática do algoritmo.

� Existem outras medidas para avaliar a qualidade de uma solução e que se aplicam

a posteriori, ou seja, medem o tempo que a implementação do algoritmo leva a

executar. A este tipo de estratégia designa-se por bench marketing.

� Ocorre, por vezes, que o domínio dos valores de entrada de um algoritmo é muito

grande e diversificado, não sendo possível medir a eficiência da solução para

todas as hipóteses de entrada. Torna-se então necessário escolher um sub-domínio

representativo que permita avaliar a qualidade da solução.

26

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exercícios

a) O seguinte algoritmo descreve uma solução utilizada na pesquisa de um elemento

numa sequência. Determine a ordem de complexidade para: o corpo principal do

algoritmo, a função Pesquisar(...) e o conjunto das duas.

ALGORITMO Pesquisa numa sequência

VARIÁVEL i, val, n, x , : INTEIRO

VARIÁVEL lista : seq(INTEIRO)

INÍCIO

ESCREVER(“Qual o tamanho da sequência?”)

LER(n)

PARA i � 1 ATÉ n FAZER

lista.set( LER(), i)

FIMPARA

ESCREVER(“Valor a pesquisar?”)

LER(val)

x � Pesquisar( lista, n, val)

ESCREVER(O valor encontra-se na posição “, x)

FIM ALGORITMO

Page 14: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

27

Estruturas de

A lgoritmos e

Dados Introdução

Eficiência algorítmica - Exercícios

PROCEDIMENTO Pesquisar

(lista : seq(INTEIRO), n, val : INTEIRO) : INTEIRO

VARIÁVEL meio, x : INTEIRO

INÍCIO

SE n = 1 ENTÃO

SE lista.get( n) = val ENTÃO

RETORNAR 1

SENÃO

RETORNAR 0

FIMSE

FIMSE

meio � n/2 + n MOD 2

x � Pesquisar(lista<1...meio>, meio, val)

SE x ENTÃO

RETORNAR x

FIMSE

RETORNAR

(meio + Pesquisar(lista<meio+1....n>, n-meio, val))

FIM

28

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

Na representação algorítmica as estruturas de dados são normalmente apresentadas

como entidades abstractas, principalmente no caso das estruturas mais complexas

como por exemplo: as sequências, conjuntos, stack’s, etc.

A implementação do algoritmo passa por escolher as estruturas de dados que melhor se

adequam à execução do mesmo, pois depende destas grande parte da eficiência da

implementação final, pode-se mesmo afirmar que existe uma dependência directa entre

a eficiência e as estruturas de dados utilizadas. Para exemplificar esta dependência,

apresenta-se o seguinte caso:

Page 15: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

29

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

Os alunos da Escola Superior de Tecnologia e Gestão do Instituto Politécnico de

Bragança inscrevem-se pela ordem de chegada. Existe um programa responsável por

armazenar a informação referente a cada aluno numa base de dados pela ordem pela

qual estes se inscrevem. Esse programa é ainda responsável por fornecer uma lista

ordenada dos alunos pelo número mecanográfico.

Solução:

� Utilizar um algoritmo de ordenação, tipo o do exemplo anterior (2

)1n(*n)n(g

−= );

� Ou manter um lista indexada.

30

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

� A segunda solução não necessita de qualquer tipo de procedimento uma vez que

os elementos já se encontram ordenados. Apenas é necessário garantir que os

índices são actualizados, o que se consegue através de um processo de inserção

ordenada, percorrendo a sequência de índices à procura da posição a ocupar pelo

novo aluno.

� No pior dos casos, esta solução percorre os n-1 elementos da lista, pelo que se

trata de uma rotina de ordem linear O(n). No entanto como este procedimento é

executado para cada um dos n alunos, perfaz um total n x n (no pior dos casos),

correspondendo assim a uma solução de ordem de complexidade quadrática.

Page 16: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

31

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

A segunda solução necessita ainda de uma sequência de índices, a qual como é obvio

ocupa espaço em memória. No caso se utilize uma lista ligada simples para

implementar a sequência de índices, é necessário por cada aluno mais:

1 apontador (4 bytes) + 1 inteiro (4 bytes) = 8 bytes.

32

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

A seguinte tabela apresenta os valores comparativos entre as duas soluções:

n (Alunos) 100 1000 10000

1ª Solução Espaço 0 0 0

Tempo 4950 4995E2 49995E3

2ª Solução Espaço 800 bytes 8 Kbytes 80 Kbytes

Tempo 1E4 1E6 1E8

A partir da tabela poder-se-ia concluir que a primeira solução é a melhor, uma vez que é

da mesma ordem que a segunda, mas não necessita da lista de índices permitindo assim

economizar o espaço por esta ocupado.

Page 17: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

33

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

No entanto uma análise mais detalhada permite ver que apesar de o primeiro algoritmo

demorar exactamente 2

)1n(*n*

−τ , o segundo fica muito aquém desse valor. É que no

pior dos casos, que é inserir os alunos por ordem crescente da chave de ordenação, a

segunda solução, ao inserir um aluno na sequência de índices, tem que percorrer

apenas o número total de elementos existentes na sequência e não n. O que perfaz para

o total dos alunos a seguinte soma:

Ordem do aluno 1º 2º 3º 4º ... nº

Nº ciclos/aluno = 0 + 1 + 2 + 3 + ... + (n-1)

Total = 2

)1n(*n −

34

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

O que parecia inicialmente uma solução pior, é na realidade muito mais eficiente, uma

vez que, no pior dos casos, demora tanto quanto a primeira solução. Mas como é muito

pouco provável que os alunos se inscrevam exactamente pela ordem crescente do

número mecanográfico, acaba por acontecer que o tempo total de execução seja na

realidade bastante inferior.

Para um cálculo mais aproximado, é legítimo considerar que em média o número de

elementos da sequência a percorrer até se encontre a posição onde inserir o novo

índice é de metade, o que perfaz um tempo total de 4

)1(* −nn .

Page 18: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

35

Estruturas de

A lgoritmos e

Dados Introdução

Representação das estruturas de dados x Eficiência algorítmica

O seguinte quadro mostra o tempo de execução e o espaço ocupado por ambas as

soluções, onde se pode verificar que para valores de n suficientemente elevados, a

primeira solução possui uma performance bastante inferior à segunda.

n (Alunos) 100 1000 10000

1ª Solução Espaço 0 0 0

Tempo 4950 4995E2 49995E3

2ª Solução Espaço 800 bytes 8 Kbytes 80 Kbytes

Tempo 2475 2497.5E2 24997.5E3

36

Estruturas de

A lgoritmos e

Dados Notação algorítmica

MAIÚSCULAS e a negrito Palavras reservadas

[...] Partes opcionais da gramática

El ���� Er Expressão do lado esquerdo (El) deriva na frase

do lado direito (Er)

“ “ Símbolos reservados dentro da sintaxe

a | b Expressão opcional entre a e b

expressão_exemplo� PROCEDIMENTO /PROC nome

Page 19: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

37

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Algoritmo � ALGORITMO nome

[Declaração_variáveis]

[Declaração_de_constantes]

[INÍCIO]

Sequência_de_instruções

FIM .

38

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Declaração_variáveis � VARIÁVEL/VAR lista_variáveis “ :” tipo_variável

[Declaração_variáveis] .

lista_variáveis � variável [“,” lista_variáveis] .

tipo_variável � INTEIRO /INT | REAL | ...

Declaração_constantes� CONSTANTE/CONST lista_atribuição_constantes .

lista_atribuição_constantes � nome_constante “����” valor

[“,” lista_atribuição_constantes] .

Page 20: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

39

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Sequência_de_instruções � instrução [Sequência_de_instruções] .

instrução � instrução_simples |

instrução_Se |

instrução_Enq |

instrução_Rep |

instrução_Para .

40

Estruturas de

A lgoritmos e

Dados Notação algorítmica

instrução_simples � SKIP |

ABORT [mensagem] |

Atribuição |

Invocação_de_procedimentos |

RETORNAR /RET [ expressão ] |

descrição_informal .

descrição_informal � “ [“ texto “ ]” |

// texto .

Page 21: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

41

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Atribuição � Variável “����” expressão

Invocação_de_procedimentos� nome função “(“ lista_valores “)”

instrução_Se � SE expressãoENTÃO

Sequência_de_instruções

[ SENÃO Sequência_de_instruções]

FIMSE .

42

Estruturas de

A lgoritmos e

Dados Notação algorítmica

instrução_Enq � ENQUANTO /ENQ expressão FAZER

Sequência_de_instruções

FENQ

instrução_Rep � REPETIR /REP

Sequência_de_instruções

ATÉ expressão .

instrução_Para � PARA variável “����” expressão_sequencial FAZER

Sequência_de_instruções

FPARA .

Page 22: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

43

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Definição_de_funções � PROCEDIMENTO/PROC nome

“(“ [ lista_parâmetros] “ )” [“ :” tipo de retorno]

[Declaração_variáveis]

[Declaração_de_constantes]

INÍCIO

Sequência_de_instruções

FIM .

44

Estruturas de

A lgoritmos e

Dados Notação algorítmica

lista_parâmetros � [IN :| OUT:| INOUT :] parâmetro “:” tipo_de_parâmetro

[ “,” lista_parâmetros]

ALGORITMO Ordenar lista

VARIÁVEL i, j, n, : INTEIRO

VARIÁVEL lista : seq(INTEIRO)

INÍCIO

LER(n)

PARA i � 1 ATÉ n FAZER

PARA j � 1 ATÉ n-2

SE lista.get(j) > lista.get(j+1) ENTÃO

lista.swap(j, j+1)

FIMSE

FPARA

FPARA

FIM

Page 23: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

45

Estruturas de

A lgoritmos e

Dados

Notação algorítmica

Conjunto (Set)

Estrutura abstracta que permite guardar um conjunto de elementos do mesmo tipo sem

existirem duplicados. Não existe qualquer noção de ordenação ou organização.

VARIÁVEL conjA : Set(INTEIROS)

A H

CP

Z

46

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Conjunto (Set)

new: � Set(DATA) //Cria, inicializa e devolve umconjunto vazio

free: Set(DATA) � ∅ //Destrói o conjunto

φ: � Set(DATA) //Conjunto vazio

∪: Set(DATA) x Set(DATA) � Set(DATA) //União de conjuntos

∩: Set(DATA) x Set(DATA) � Set(DATA) //Intersecção de conjuntos

\: Set(DATA) x Set(DATA) � Set(DATA) //Diferença de conjuntos

∈: Set(DATA) x DATA � Bool //Se o elemento do tipo DATApertence ao Set(DATA)

⊂: Set(DATA) x Set(DATA) � Bool //Se Set(DATA) ⊂ Set(DATA)

⊃: Set(DATA) x Set(DATA) � Bool //Se Set(DATA) ⊃ Set(DATA)

Page 24: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

47

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Sequências (Seq)

Estrutura abstracta que permite guardar um conjunto de elementos do mesmo tipo,

com possibilidade de existirem duplicados. Os elementos encontram-se organizados

sequencialmente e associados a um índice.

VARIÁVEL seqA : Seq(INTEIROS)

C Z H P A I

1 2 3 4 5 6

48

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Sequências (Seq)

new: � Seq(DATA) //Cria uma sequência vazia

free: Seq(DATA) � ∅ //Destroi a sequência

<>: � Seq(DATA) //Devolve a sequência vazia

<_._>: Seq(DATA) x DATA � Seq(DATA) //Acrescenta DATA à sequência

∧: Seq(DATA) x Seq(DATA) � Seq(DATA) //Concatenação de sequências

head: Seq(DATA) � DATA //Devolve o elemento do topo

tail: Seq(DATA) � Seq(DATA) //Devolve a cauda da sequência

get: Seq(DATA) x I � DATA //Devolve o elemento da

posição indicada pelo índice I

set: Seq(DATA) x DATA x I � Seq(DATA) //Insere DATA na posição indicada pelo índice I

swap: Seq(DATA) x I 1 x I 2 � Seq(DATA) //Troca o elemento da posiçãoI 1

com o da posição I 2

Page 25: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

49

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Produtos cartesianos (tuplos, records, structs)

Forma de representação abstracta de estruturas com vários tipos de dados num mesmo

elemento.

Nome tuplo = A x B x C x ...

VARIÁVEL tvar : Nome tuplo

Exemplo:

Arvbin = raiz x esq x dir

raiz : DATA

esq, dir : Arvbin

50

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Produtos cartesianos (tuplos, records, structs)

raiz: Arvbin � DATA // Devolve o valor de raiz

getEsq: Arvbin � Arvbin // Devolve o valor de esq

setEsq: Arvbin1 x Arvbin2 � Arvbin // Atribui Arvbin2 a esq

getDir: Arvbin � Arvbin // Devolve o valor de dir

setDir: Arvbin1 x Arvbin2 � Arvbin // Atribui Arvbin2 a dir

mkarvbin: DATA x Arvbin x Arvbin � Arvbin // Cria uma ArvBin

Page 26: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

51

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Stack (Pilha)

Estrutura abstracta que permite guardar um conjunto de elementos do mesmo tipo e

cujo funcionamento obedece a uma organização do tipo LIFO (Last In Firts Out).

VARIÁVEL stackA : Stack(INTEIROS)

push pop

52

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Stack (Pilha)

new: � Stack(DATA) //Cria uma stack vazia

free: Stack(DATA) � ∅ //Destroi a stack

top: Stack(DATA) � DATA //Devolve o elemento do topo

push: Stack(DATA) x DATA � Stack(DATA) //Coloca o elemento do tipo DATAno topo da stack

pop: INOUT: Stack(DATA) � DATA //Retira o elemento que está no

topo

Page 27: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

53

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Queue (Fila)

Estrutura abstracta que permite guardar um conjunto de elementos do mesmo tipo e

cujo funcionamento obedece a uma organização do tipo FIFO (First In Firts Out).

VAR queueA : Queue(INTEIROS)

QInsertQRemove

54

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Queue (Fila)

new: � Queue(DATA) //Cria uma queue vazia

free: Queue(DATA) � ∅ //Destroi a queue

front: Queue(DATA) � DATA //Retorna o elemento da frente

insert: Queue(DATA) x DATA � Queue(DATA) //Coloca DATA na queue

remove: INOUT: Queue(DATA) � DATA //Retira o elemento da frente

Page 28: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

55

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Sacolas (Bags)

new: � Bag(DATA) //Cria uma sacola vazia

free: Bag(DATA) � ∅ //Destroi a sacola

φ: � Bag(DATA) //Devolve a sacola vazia

add: Bag(DATA) x DATA � Bag(DATA) //Acrescenta DATA à sacola

remove: Bag(DATA) x DATA � Bag(DATA) //Remove DATA da sacola

count: Bag(DATA) x DATA � INTEIRO //Conta quantos DATA há na sacola

size: Bag(DATA) � INTEIRO //Dá o tamanho da sacola

∧: Bag(DATA) x Bag(DATA) � Bag(DATA) //Concatenação de sacolas

∈: Bag(DATA) x DATA � BOOL //Indica se DATA existe na

sacola

56

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Dicionários (Dictionary)

new: � Dictionary(KEY,DATA)

free: Dictionary(KEY,DATA) � ∅

φ: � Dictionary(KEY,DATA)

add: Dictionary(KEY,DATA) x KEY x DATA � BOOL

remove: Dictionary(KEY,DATA) x KEY � BOOL

size: Dictionary(KEY,DATA) � INTEIRO

get: Dictionary(KEY,DATA) x KEY � DATA

set: Dictionary(KEY,DATA) x KEY x DATA � BOOL

has: Dictionary(KEY,DATA) x KEY � BOOL

Page 29: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

57

Estruturas de

A lgoritmos e

Dados Notação algorítmica

Dicionários com 2 Chaves (TwoKeysDict)

new: � TwoKeysDict(KEY1,KEY2,DATA)

free: TwoKeysDict(KEY1,KEY2,DATA) � ∅

φ: � TwoKeysDict(KEY1,KEY2,DATA)

add: TwoKeysDict(KEY1,KEY2,DATA) x KEY1 x KEY2 x DAT A � BOOL

remove: TwoKeysDict(KEY1,KEY2,DATA) x KEY1 x KEY � BOOL

size: TwoKeysDict(KEY1,KEY2,DATA) � INTEIRO

count: TwoKeysDict(KEY1,KEY2,DATA) x KEY1 � INTEIRO

get: TwoKeysDict(KEY1,KEY2,DATA) x KEY1 x KEY2 � DATA

set: TwoKeysDict(KEY1,KEY2,DATA) x KEY1 x KEY2 x DAT A � BOOL

has: TwoKeysDict(KEY1,KEY2,DATA) x KEY1 x KEY2 � BOOL

58

Estruturas de

A lgoritmos e

Dados Do algoritmo ao programa

Algoritmo

ALGORITMO Ordenar sequênciaVAR i, j, n : INTVAR lista : Seq(INT)INÍCIO

LER(n)// Preencher sequênciaPARA i <- n-1 ATÉ 1 SALTO -1 FAZER

PARA j <- 1 ATÉ i FAZERSE lista.get(j)>lista.get(j+1) ENTÃO

lista.swap(j,j+1)FSE

FPARAFPARA

FIM

Page 30: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

59

Estruturas de

A lgoritmos e

Dados Do algoritmo ao programa

Programa

void swap(int lista[],int i, int j){int t = lista[i];lista[i] = lista[j];lista[j] = t;

}

void main(){const int NELEM = 10;int lista[NELEM], n;cout << "N. elementos da sequencia?\n";cin >> n;

// Preenchimento de listafor (int i = n - 1; i > 0; i--)

for (int j = 0; j < i; j++)if (lista[j] > lista[j + 1])

swap(lista, j, j + 1);}

60

Estruturas de

A lgoritmos e

Dados Truques e Dicas

Simplificação Algébrica de Expressões

i + 0 = 0 + i = i - 0 = i

0 - i = -i

i * 1 = 1 * i = i / 1 = i

i * 0 = 0 * i = 0

- ( - i ) = i

i + ( -j) = i - j

b v T = T v b = T

b v F = F v b = b

f << 0 = f >> 0 = f

f << w = f >> w = f , Se bitlen(f)=w/n, n ∈ N

i ^ 2 = i * i

2 * i = i + i

i * 5 => t1 = i << 2;

t2 = t1 + i;

i * 7 => t1 = i << 3;

t2 = t1 – i;

Page 31: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

61

Truques e Dicas

Propriedade distributiva dos operadores

( i - j ) + ( i - j ) + ( i - j ) + ( i - j ) = 4 * i - 4 * j = 4 * ( i -j )

Expressões equivalentes

Read(i)

j � i +1

k � i

l � k +1

Propagação de constantes

a � 3

b � 4 * a b � 12

62

Truques e Dicas

Propagação de cópias

x � y

r � x * 4 +2 r � y * 4 + 2

s � y+5*x s � y + 5 * y s � 6*y

Eliminação de expressões comuns

p � i*4

x � a + i*4 x � a + p

y � (i*4)/3 y � p/3

Page 32: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

63

Truques e Dicas

Colocar expressões comuns em evidência

SE a > 0 ENTÃO SE a > 0 ENTÃO

a � a-1 a � a-1

b � a-c SENÃO

SENÃO a � a+1

a � a+1 FIMSE

b <- a-c b <- a-c

FIMSE

64

Truques e Dicas

Remoção de expressões constantes de dentro de ciclos

ENQ b > 0 FAZER c � x + z

c � x + z ENQ b > 0 FAZER

... ...

[Não ocorre qualquer atribuição de x ou z dentro do ciclo]

FENQ FENQ

Page 33: Algoritmos e Estruturas de Dados - ipb.ptreis.quarteu/aed2005/pdfs/acetatos/acetatos_paulo... · Estruturas de dados dinâmicas e lineares Estruturas de dados dinâmicas não lineares

65

Truques e Dicas

Reordenação do encadeamento de estruturas

PARA i � 1 ATÉ 100 FAZER SE x > 0 ENTÃO

SE x > 0 ENTÃO PARA i � 1 ATÉ 100 FAZER

a( i ) � a ( i) +1 a( i ) � a ( i) +1

SENÃO FPARA

a( i ) � a ( i) –1 SENÃO

FIMSE PARA i � 1 ATÉ 100 FAZER

FPARA a( i ) � a ( i) –1

FPARA

FIMSE