Sunteți pe pagina 1din 13

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Apresentao

Introduo
Paradigmas
Recursividade
Algoritmos tentativa e erro
Diviso e conquista
Programao dinmica
Algoritmos gulosos
Algoritmos aproximados

Pedro Augusto Munari Junior e Thiago A. S. Pardo 1

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Introduo

O projeto de algoritmos requer abordagens


adequadas

A forma como um algoritmo aborda o problema


pode levar a um desempenho ineficiente

Em certo casos, o algoritmo pode no conseguir


resolver o problema em tempo vivel

Pedro Augusto Munari Junior e Thiago A. S. Pardo 2

1
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Introduo

Infelizmente, no existe um paradigma que


seja o melhor dentre todos!

Um problema pode ser resolvido de maneira


mais eficiente adotando-se um paradigma do
que outro

Um paradigma pode levar a um algoritmo O(2n)


e outro paradigma a um algoritmo O(n3), para a
resoluo de um mesmo problema

Pedro Augusto Munari Junior e Thiago A. S. Pardo 3

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Introduo

Por exemplo
Como ordenar um vetor de inteiros?
Como realizar o produto entre n matrizes de
modo que o nmero de operaes seja o
menor possvel?
Problema da mochila
Considere n itens a serem levados para uma
viagem, dentro de uma mochila de capacidade L que
no pode comportar todos os itens. Cada item tem
um peso wi e uma utilidade ci. Quais itens escolher,
de modo que a utilidade total dos itens levados seja
a maior possvel?

Pedro Augusto Munari Junior e Thiago A. S. Pardo 4

2
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Apresentao

Recursividade
Algoritmos tentativa e erro
Diviso e conquista
Programao dinmica
Algoritmos gulosos
Algoritmos aproximados

Pedro Augusto Munari Junior e Thiago A. S. Pardo 5

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Recursividade

Paradigma ou tcnica de programao?

Alguns critrios devem ser observados


Definio recursiva do problema
Condio de parada
Garantia de terminar

Solues mais elegantes e claras

Pedro Augusto Munari Junior e Thiago A. S. Pardo 6

3
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Apresentao

Recursividade
Algoritmos tentativa e erro
Diviso e conquista
Programao dinmica
Algoritmos gulosos
Algoritmos aproximados

Pedro Augusto Munari Junior e Thiago A. S. Pardo 7

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos tentativa e erro

Um algoritmo tentativa e erro aquele que testa


exaustivamente todas as solues possveis de
um problema, de modo a obter a desejada

As solues so testadas indiscriminadamente


No utiliza critrios para eliminar outras solues
que no podero ser melhores que a obtida no
estgio considerado

Pedro Augusto Munari Junior e Thiago A. S. Pardo 8

4
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos tentativa e erro

As solues so enumeradas de modo


semelhante ao percurso em uma rvore que
possua todas as solues

Muitas vezes a rvore de solues cresce


exponencialmente!

Pedro Augusto Munari Junior e Thiago A. S. Pardo 9

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos tentativa e erro

Exerccio:
Qual o menor caminho da cidade a at a c?

Pedro Augusto Munari Junior e Thiago A. S. Pardo 10

5
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos tentativa e erro

Exerccio:
TODOS os caminhos so enumerados:
a  b  c : 21
a  b  d  c : 32
a  b  f  d  c : 51
...

Pedro Augusto Munari Junior e Thiago A. S. Pardo 11

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Apresentao

Recursividade
Algoritmos tentativa e erro
Diviso e conquista
Programao dinmica
Algoritmos gulosos
Algoritmos aproximados

Pedro Augusto Munari Junior e Thiago A. S. Pardo 12

6
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Diviso e conquista

Passos bsicos
1. Dividir o problema a ser resolvido em
subproblemas menores e independentes
2. Encontrar solues para as partes
3. Combinar as solues obtidas em uma
soluo global

Os algoritmos podem utilizar recurso para


dividir e combinar

Pedro Augusto Munari Junior e Thiago A. S. Pardo 13

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Diviso e conquista

Processo (geralmente recursivo)

dada uma entrada, se ela suficientemente


simples, obtemos diretamente uma sada
correspondente

caso contrrio, ela decomposta em entradas


mais simples, para as quais aplicamos o
mesmo processo, obtendo sadas
correspondentes que so ento combinadas
em uma sada para a entrada original
Pedro Augusto Munari Junior e Thiago A. S. Pardo 14

7
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Diviso e conquista

Exemplos de algoritmos
?

Pedro Augusto Munari Junior e Thiago A. S. Pardo 15

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Diviso e conquista

Exemplos de algoritmos
Busca binria
Mergesort, Quicksort
Maior elemento de uma seqncia
Fibonacci recursivo

Pedro Augusto Munari Junior e Thiago A. S. Pardo 16

8
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Apresentao

Recursividade
Algoritmos tentativa e erro
Diviso e conquista Luca
Programao dinmica
Algoritmos gulosos
Algoritmos aproximados

Pedro Augusto Munari Junior e Thiago A. S. Pardo 17

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Apresentao

Recursividade
Algoritmos tentativa e erro
Diviso e conquista
Programao dinmica
Algoritmos gulosos
Algoritmos aproximados

Pedro Augusto Munari Junior e Thiago A. S. Pardo 18

9
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos gulosos

So tipicamente usados para resolver


problemas de otimizao

Por exemplo, o algoritmo para encontrar o


caminho mais curto entre duas cidades
Um algoritmo guloso escolhe a estrada que
parece mais promissora no instante atual e
nunca muda essa deciso, independentemente
do que possa acontecer depois

Pedro Augusto Munari Junior e Thiago A. S. Pardo 19

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos gulosos

A cada iterao
seleciona um elemento conforme uma funo
gulosa
marca-o para no consider-lo novamente nos
prximos estgios
atualiza a entrada
examina o elemento selecionado quanto a sua
viabilidade
decide a sua participao ou no na soluo

Pedro Augusto Munari Junior e Thiago A. S. Pardo 20

10
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos gulosos

Exerccio: Calcule o menor caminho da cidade


a at a c, utilizando um algoritmo guloso.

Pedro Augusto Munari Junior e Thiago A. S. Pardo 21

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Apresentao

Recursividade
Algoritmos tentativa e erro
Diviso e conquista
Programao dinmica
Algoritmos gulosos
Algoritmos aproximados

Pedro Augusto Munari Junior e Thiago A. S. Pardo 22

11
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos aproximados

Gera solues aproximadas, que podem no


ser timas, mas so prximas delas

Faz-se necessria uma medida de qualidade

Exemplos?

Pedro Augusto Munari Junior e Thiago A. S. Pardo 23

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Algoritmos aproximados

Gera solues aproximadas, que podem no


ser timas, mas so prximas delas

Faz-se necessria uma medida de qualidade

Exemplos?
Caixeiro viajante (menor caminho entre
cidades)
Traduo automtica

Pedro Augusto Munari Junior e Thiago A. S. Pardo 24

12
SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Consideraes finais

Outros paradigmas?

Pedro Augusto Munari Junior e Thiago A. S. Pardo 25

SCC-214 Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Consideraes finais

Outros paradigmas?
Induo matemtica
Balanceamento (ou tcnica?)
Algoritmos paralelos

Pedro Augusto Munari Junior e Thiago A. S. Pardo 26

13

S-ar putea să vă placă și