introprog_cap3

61
M o d . A F T E B I . P - 0 5 2 . r e v 0 2 CURSO: CET/DPM DISCIPLINA: Intro. à Programação ANO LECTIVO: 2011/2013 CET/DSAS {IntroProg} CET/DSAS {IntroProg} Joel Carvalho - 29.09.2011 Joel Carvalho - 29.09.2011 Capítulo 3 Algoritmos FORMAÇÃO TECNOLÓGICA

Upload: joel-carvalho

Post on 22-Feb-2015

59 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

CET/DSAS {IntroProg}CET/DSAS {IntroProg}Joel Carvalho - 29.09.2011Joel Carvalho - 29.09.2011

Capítulo 3Algoritmos

FORMAÇÃO TECNOLÓGICA

Page 2: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Síntesei. Importânciaii. Tipos de Algoritmos

i. Ordenaçãoii.Pesquisa

iii.Recursividade

FORMAÇÃO TECNOLÓGICA

Page 3: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

i. Importância

Page 4: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

O que é um algoritmo?

– “Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito e com uma quantidade de esforço finita”. In wikipédia.

Page 5: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

O que é um algoritmo?– Podemos comparar um algoritmo a uma receita de

culinária:– Por exemplo: Fazer um bolo de chocolate

• Pesar 100g de chocolate.• Derreter o chocolate.• Juntar 6 gemas de ovos.• Deitar 500gr de Farinha.• Mexer bem até ficar uma solução uniforme.• Deitar para a forma e levar ao forno a 300ºC.

Page 6: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Importância

– O algoritmo não representa necessariamente um programa de computador.

– Através de um algoritmo podemos delinear as mais variadas tarefas, passíveis de serem elaboradas, quer por um computador, quer por uma pessoa, etc.

– Ajuda na compreensão real do problema.

Page 7: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Importância na Computação

– Método de resolução de problemas, ou seja, conseguimos através dele definir a estratégia.

– Demonstra-se a viabilidade de resolução de um problema.

– Facilitar a implementação.– É uma ferramenta essencial para o Programador.

Page 8: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Representação dos Algoritmos

– Os algoritmos podem ser representados por:• Fluxogramas.• Pseudo-código.• Linguagem Natural.

– Posteriormente os algoritmos são traduzidos em programas, numa determinada linguagem, para serem executados pelo computador.

Page 9: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Exemplos– Fluxograma

LâmpadaFundida?

Sim

Não

Sim

LâmpadaEnroscada?

Não

Page 10: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Exemplos– Pseudo-código para testar se um número é maior que zero e

escrever sempre o número positivo:início

ler(x);

se x >=0 então

y ← x;

senão

y ← -x;

fim se

escrever(y);

fim

Page 11: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Características de um Algoritmo– Sequência ordenada (todos os passos podem ser

numerados).– Instruções não-ambíguas e bem definidas (cada

instrução tem que ser distinguível e passível de ser automaticamente executada).

– Realização de uma tarefa (objectivo final do algoritmo).– Tempo de execução finito (o algoritmo tem um princípio

e um fim definidos).

Page 12: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Categorias de Operações Algorítmicas1. Operações Sequenciais

– Todas as instruções têm uma ordem pela qual são executadas.

2. Operações Condicionais– Existe uma estrutura de controlo que efectua um teste

lógico binário e selecciona a próxima instrução a ser executada.

3. Operações Iterativas– Uma instrução de controlo repete a execução de um

bloco (Conjunto de instruções).

Page 13: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

ii.Tipos de

Algoritmos

Page 14: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Tipos de Algoritmos– Existem várias formas de classificar os algoritmos, quanto ao

paradigma, campo de estudo, complexidade, etc. De seguida são apresentados alguns tipos de algoritmos classificados por campo de estudo.

• Algoritmos de Ordenação• Algoritmos de Pesquisa• Algoritmos de Análise Combinatória• Algoritmos de Criptografia• Algoritmos de Compressão de Dados• Etc.

Page 15: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Algoritmos de Ordenação– Os algoritmos de ordenação são algoritmos que permitem

ordenar a informação segundo um determinado critério.– Efectuam a ordenação de um ou mais elementos.– Podem ser aplicados a diferentes tipos de dados:

• Inteiros• Strings• Etc.

– Exemplos: Bubble sort, Quick sort, Merge sort, Selection sort, etc.

Page 16: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Exercício

– Sem se preocuparem com nomes ou definições Ordenem as seguintes listas de inteiros (de forma crescente, mais pequeno para o maior), utilizando técnicas diferentes no processo de ordenação

• 3 2 9 7• 7 9 2 3

Page 17: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Bubble Sort– Analise e interprete o algoritmo Bubble Sort aplicado no

video abaixo (a ordenação é crescente).

Page 18: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Bubble Sort– Em Português, ordenação em bolha ou por flutuação.– Este algoritmo consiste em realizar diversas passagens

por uma lista até que esta esteja totalmente ordenada:• Trocar o elemento actual com o seguinte, se a

condição de ordenação se verificar.• Repete-se processo até que não seja elaborada

outra troca de elementos (numa passagem completa pela lista).

Page 19: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Bubble Sort– http://en.wikipedia.org/wiki/File:Bubble-sort-example-300px.gif

Page 20: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Bubble Sort (Ordenação Crescente)4 8 1 0 4 > 8 Condição Falsa

4 8 1 0 8 > 1 Condição Verdadeia (trocar)

4 1 8 0 8 > 0

4 1 0 8 4 > 1

1 4 0 8 4 > 0

1 0 4 8 4 > 8 Condição Falsa

Condição Verdadeia (trocar)

Condição Verdadeia (trocar)

Condição Verdadeia (trocar)

1 0 4 8 1 > 0

0 1 4 8 1 > 4

Condição Verdadeia (trocar)

Condição Falsa

Page 21: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Bubble Sort (Ordenação Crescente)

– Na 12ª iteração foi concluída uma passagem pela lista de valores sem que nenhuma troca tenha sido feita.

– Assim sendo a lista após 12 iterações, encontra-se ordenada por ordem crescente.

0 1 4 8 4 > 8 Condição Falsa

0 1 4 8 0 > 1

0 1 4 8 1 > 4

0 1 4 8 4 > 8

Condição Falsa

Condição Falsa

Condição Falsa (FIM)

Page 22: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Selection Sort– Algoritmo de ordenação baseado na

passagem do menor valor da lista para a primeira posição (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posição, e assim sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos.

Page 23: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Insertion Sort– Algortimo de Ordenação simples que a cada repetição

remove o elemento seleccionado da lista e insere-o de novo mas na posição correcta, tendo em conta apenas parte da lista que já foi ordenada

– A escolha do elemento a remover é arbitrária desde que seja feita na parte da lista não ordenada.

Page 24: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort– Analise e interprete o algoritmo Quick Sort aplicado no

video abaixo (a ordenação é crescente).

Page 25: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort– Trata-se de um algoritmo de ordenação que tem por

premissa: “Dividir para conquistar”.– Cria por Tony Hoare (Sir Charles Antony Richard Hoare)

em 1960.– É um dos mais famosos algoritmos de ordenação.– Tem como base o uso da recursividade, embora

também exista a versão iterativa.

Page 26: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort (Algoritmo)– Algoritmo (ordenação crescente):

• Escolhe-se um elemento da lista, denominado pivô;• É reordenada a lista de forma a que todos os

elementos:– Inferiores ao pivô fiquem à esquerda do mesmo.– Superiores ao pivô fiquem à direita do mesmo.

• No fim deste processo o pivô estará na sua posição final e haverá duas sub-listas não ordenadas;

Page 27: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort (Algoritmo)– Continuação...

• A operação de separação é denominada por partição;

• Recursivamente ordenemos as sub-lista dos elementos menores e a sub-lista dos elementos maiores;

• O algoritmo acaba quando atingirmos listas de tamanho zero ou um. Pois estão sempre ordenadas.

Page 28: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort

– Que garantias existem de que o processo termina?• A cada iteração pelo menos um elemento é colocado

na sua posição final.• Temos a garantia que esse elemento não irá ser

alterado. • Com o processo de partição estamos sempre a criar

um novo processo de tamanho n/2.

Page 29: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort– http://en.wikipedia.org/wiki/File:Quicksort-example.gif

Page 30: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort

Page 31: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Quick Sort (Dicas)– Escolher o elemento mais à esquerda ou mais à direita

como pivot não se revela a solução mais eficiente para listas de grande dimensão.

– Neste caso o ideal é identificar sempre o elemento que divide a lista e sub-listas em duas partes iguais.

– Esta situação só é relevante para listas de grande dimensão, em termos de implementação é mais simples escolher sempre o mesmo elemento (o mais à esquerda, direita, etc.

Page 32: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Algoritmos de Pesquisa– Os algoritmos de pesquisa são algoritmos que permitem ao

utilizador, ter acesso à informação independentemente da forma como esta se encontra armazenada.

– Efectuam a pesquisa de um ou mais elementos.– Podem ser aplicados a diferentes tipos de dados:

• Inteiros• Strings• Etc.

– Exemplos: Pesquisa Sequencial, Pesquisa Binária

Page 33: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Pesquisa Sequencial– A procura é feita sequencialmente num conjunto de

elementos não ordenados.– A ideia base é:

• Percorrer o vector, comparando os elementos que o constituem, com o elemento que desejamos procurar.

• Começamos pelo primeiro elemento, depois segundo, etc. até encontrarmos o elemento que desejamos.

• Encontrado esse elemento devolvemos a posição.• Caso não tenha sido encontrado devolvemos uma

mensagem, por exemplo: “Elemento não encontrado”.

Page 34: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Pesquisa Sequencial (exemplo)– Pesquisar o número 7 nas listas seguintes:

5 = 7 Condição Falsa

3 = 7

2 = 7

7 = 7

Condição Falsa

Condição Falsa

Condição Verdadeia (Retorno 3)

5 = 7

3 = 7

Condição Falsa

Condição Falsa (Retorno “Elemento Não Encontrado”).

5 3 2 7 8 4

5 3

Page 35: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Pesquisa Binária

– É bastante simples de utilizar mas só pode ser aplicado a listas ordenadas.

– É mais eficiente que a pesquisa sequencial mas mais limitativo uma vez que a lista tem de estar previamente ordenada.

– A ideia base desta pesquisa é:• Ir dividindo o intervalo de busca ao meio, de forma a

torna-lo mais pequeno.

Page 36: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Pesquisa Binária (Algoritmo)– Primeiro tem de ser calcular a posição central:

• Vector de n elementos:– Meio = Nº de elementos / 2;

– Se o elemento na posição do meio for o desejado, termina aqui a pesquisa.

– Caso contrário, verifica-se se o elemento da pesquisa é maior ou menor que o elemento do meio.

– Se for maior continua-se para o vector superior.– Se for menor continua-se para o vector inferior.– Repete-se isto até se encontrar o elemento pretendido.

Page 37: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Inf. M. Sup.

– Inicialmente– Meio = 8 / 2 = 4

Ana Bia Cid Eva Gil Ivo Lia Rui

Page 38: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ana Bia Cid Eva Gil Ivo Lia Rui

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Inf. M. Sup.

Eva = Rui

Condição Falsa

Page 39: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ana Bia Cid Eva Gil Ivo Lia Rui

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Inf. M. Sup.

Eva > Rui

Condição Falsa

Page 40: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ana Bia Cid Eva Gil Ivo Lia Rui

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Inf. M. Sup.

Ivo = Rui

Condição Falsa

Page 41: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ana Bia Cid Eva Gil Ivo Lia Rui

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Inf. M. Sup.

Ivo > Rui

Condição Falsa

Page 42: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ana Bia Cid Eva Gil Ivo Lia Rui

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Inf. M. Sup.

Lia = Rui

Condição Falsa

Page 43: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ana Bia Cid Eva Gil Ivo Lia Rui

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Inf. M. Sup.

Lia > Rui

Condição Falsa

Page 44: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ana Bia Cid Eva Gil Ivo Lia Rui

Pesquisa Binária (Exemplo)– Encontrar a palavra “Rui” no seguinte vector:

Rui = Rui

Condição Verdadeira

Page 45: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Pesquisa Sequencial Vs Binária– Sequencial:

• Elementos podem não estar ordenados.• Mais lento.• Requer um maior número de iterações.

– Binária:• Elementos têm de estar ordenados.• Mais rápido.• Requer um menor número de iterações.

Page 46: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Tabelas de Hash– Estruturas de armazenamento de informação, para

grandes quantidades de informação e com uma facilidade extrema de implementação.

– A outra ideia fundamental corresponde à facilidade de procura inerente às tabelas de Hash. Através delas a informação torna-se bastante fácil de encontrar.

– Estas estruturas já estão definidas em muitas linguagens de programação pelo que a sua utilização varia consoante cada linguagem.

Page 47: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Tabelas de Hash

– As tabelas de Hash servem para• Armazenar:

– A informação de um modo simples e intuitivo.– Eficiente para grandes quantidades de dados.

• Pesquisar:– Tornam a pesquisa muito mais eficiente.– A procura é rápida.

Page 48: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Tabelas de Hash– Como funcionam?

• Separação da informação por relevância (criação de uma função).

• Armazenam essa informação com base na função anterior.

• É gerada uma chave para a posição onde essa mesma informação irá ser guardada.

• Por fim a pesquisa é feita através dessa mesma chave.

Page 49: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Componentes das Tabelas de Hash– Função de Hash:

• Mapea entre o valor das chaves e as entradas na tabela.• Fornece o local onde se insere/procura o elemento pretendido.• Se nessa posição houver mais do que um elemento aplica-se

uma pesquisa sequencial ao vector.– Tabela de Hash:

• Armazena a informação.• Permite o acesso à informação.• O armazenamento pode ser um único vector, ou uma estrutura

mais complexa.

Page 50: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Vantagens das Tabelas de Hash– Simplicidade

• É muito fácil de definir um algoritmo para implementar.– Escalabilidade

• Possibilidade de adequar o tamanho da tabela ao número de elementos a armazenar.

– Eficiência• Para grande número de elementos, por exemplo um problema

com 100'000 dados e uma tabela de 1'000 entradas, temos uma divisão do espaço de procura de 100'000/1'000 = 100.

– Aplicabilidade• Funcionamento imediato para arquivos.

Page 51: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Desvantagens das Tabelas de Hash– Importância da função de Hash

• Uma boa função de hash tem de dividir o universo de dados de uma maneira equitativa.

• Uma má escolha origina um maior número de colisões.

– Ineficiência Parcial• Quanto maior o número de elementos de uma

entrada da tabela, maior o tempo de pesquisa aos últimos elementos dessa entrada.

Page 52: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

iii. Recursividade

Page 53: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Recursividade– Mecanismo que permite que uma função se chame a

ela própria.– Técnica de programação que serve como base para

muitos algoritmos.• Por exemplo: Programação Dinâmica.

– É baseado na ideia de “Dividir para conquistar”:• Dividir o problema inicial em subproblemas• Em que o processo de resolução é o mesmo.

Page 54: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Como funciona a Recursividade– 1º Verifica-se se o problema pode ser dividido em

subproblemas idênticos.– 2º Definem-se os critérios de paragem do problema,

que são eles:• Caso(s) base – corresponde ao caso onde o

problema tem sempre de chegar.• Erro – corresponde a uma situação onde o problema

nunca poderá chegar.

Page 55: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Recursividade (Exemplo)

– Factorial: 5!=5*4!; 4!=4*3!; … por sua vez 5!=5*4*3*2*1– 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880,...– Função Factorial

• n!=n*(n-1)!• Critérios de Paragem:

– 0!=1– (-n)! = “Erro”

Page 56: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Recursividade (Pseudo-Código)– Função Factorial (i)

Inicio Função//Condição de errose i ≤ 0 então

escreve(“Erro”);retorna -1;

fim se

Page 57: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Recursividade (Pseudo-Código)– Função Factorial (i)

//Caso Basese i = 1 então

retorna 1;fim seretorna Factorial(i-1)*i;

Fim Função

Page 58: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Referências– http://pt.wikipedia.org/wiki/Algoritmo– http://pt.wikipedia.org/wiki/Pesquisa_binária– http://pt.wikipedia.org/wiki/Algoritmo_de_ordenação– http://pt.wikipedia.org/wiki/Bubble_sort– http://pt.wikipedia.org/wiki/Quick_sort– http://www.claymath.org/millennium/index.php– http://pt.wikipedia.org/wiki/Tabela_hash– http://pt.wikipedia.org/wiki/Recursividade_(ciência_da_computação)– http://pt.wikipedia.org/wiki/Complexidade_computacional

Page 59: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Perguntas?

{Obrigado e Bom Trabalho!}

Page 60: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Perguntas– O que é um algoritmo e qual a sua importância?– Indique os três modos de representação de um algoritmo?– Diga quantos tipos de Pesquisa conhece? E indique em duas

linhas o funcionamento geral das mesmas.– O quick sort e o bubble sort pertencem a que grupo de algoritmos?– Descreva o modo de funcionamento de um algoritmo de ordenação

à sua escolha.– Indique quais as vantagens e desvantagens da pesquisa

sequencial e binária.– Defina Recursividade e indique os dois critérios de paragem.

Page 61: IntroProg_Cap3

Mo d

.AFT

EBI .P

- 052

.rev0

2

CURSO: CET/DPMDISCIPLINA: Intro. à ProgramaçãoANO LECTIVO: 2011/2013

Ipsa scientia potestas Ipsa scientia potestas estest

{O saber é poder}

FORMAÇÃO TECNOLÓGICA