Sei sulla pagina 1di 34

Estruturas de Dados 2

Algoritmos Gulosos

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 1/34
Algoritmos Gulosos
Introduo
Tcnica de Projeto de Algoritmos utilizada para
Problemas de Otimizao;
Idia: Quando necessrio fazer uma escolha
durante o processo de otimizao, escolher a opo
que parea ser a melhor no momento.
Ou seja, fazer a escolha tima local, esperando que
isto leve soluo tima global.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 2/34
Algoritmos Gulosos
Introduo:

A escolha realizada por este algoritmo , portanto,
dita gulosa (Greedy Algorithms)
Propriedade da escolha gulosa: deve garantir que a
cada iterao tomada uma deciso que ir levar a
um timo global.
Em um algoritmo guloso uma escolha que foi feita
nunca revista, ou seja, no h qualquer tipo de
reavaliao.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 3/34
Algoritmos Gulosos
Introduo:
Em cada passo a escolha a ser feita deve ser:
Possvel, (satisfaz as restries do problema);
Localmente tima, (deve ser a melhor escolha
possvel dentre as disponveis neste passo);
Irreversvel, (no pode ser alterada nos passos
subseqentes do algoritmo).

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 4/34
Algoritmos Gulosos
Cuidados:
Nem sempre a abordagem Gulosa leva uma

soluo tima do problema ( muitas vezes


considerada uma Tcnica Heurstica)
Em algumas situaes, entretanto, esta tcnica

resolve o problema, e de uma maneira muito


eficiente;
Alternativamente, a tcnica de Programao

Dinmica pode ser utilizada, quando a


abordagem gulosa no for adequada;
Veremos as situaes especficas mais adiante!

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 5/34
Algoritmos Gulosos
Exemplo de Aplicao da Tcnica:

O problema da Seleo de Atividades: dado


um conjunto de atividades, definidas por seus
tempos de incio e fim, alocar o maior nmero
possvel de atividades em um perodo de
tempo definido; (por exemplo, um conjunto de
palestras que devem ser alocadas em um
auditrio)

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 6/34
Algoritmos Gulosos
Exemplo do problema da Seleo de Atividades

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 7/34
Algoritmos Gulosos
Exemplo de Aplicao da Tcnica:

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 8/34
Algoritmos Gulosos
Exemplo de Aplicao da Tcnica:

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 9/34
Algoritmos Gulosos
Exemplo de Aplicao da Tcnica:

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 10/34
Algoritmos Gulosos
Exemplo de Aplicao da Tcnica:

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 11/34
Algoritmos Gulosos
Exemplo de Aplicao da Tcnica:

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 12/34
Algoritmos Gulosos -
Cdigo de Huffman
Outro Exemplo de Aplicao da Tcnica:
Algoritmo Guloso de Huffman

Tcnica para compresso de dados.


A partir de uma tabela das freqncias em que
ocorrem os caracteres, elabora uma
representao mnima para o caractere mais
comum, um pouco maior para o segundo mais
comum, e assim por diante....(Cada caractere
representado como uma cadeia binria).
Ex. Compactar arquivos texto grandes

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 13/34
Algoritmos Gulosos -
Cdigo de Huffman
Exemplo: Armazenar um arquivo de
100.000 caracteres
Representando cada caractere:

cdigo de comprimento fixo (3 bits) = 300.000 bits


cdigo de comprimento varivel = 224.000 bits

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 14/34
Algoritmos Gulosos -
Cdigo de Huffman
Cdigos de Prefixo
Cdigos nos quais nenhuma palavra de cdigo
prefixo de alguma outra palavra de cdigo.

A codificao simples: concatenao das palavras de


cdigo que representam cada caractere do arquivo.

Ex: codificao do arquivo de 3 caracteres abc como


0 .101 . 100 = 0101100, onde . indica concatenao.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 15/34
Algoritmos Gulosos -
Cdigo de Huffman
Cdigos de Prefixo
Como nenhuma palavra de cdigo um prefixo de
qualquer outra, a palavra de cdigo que inicia um
arquivo codificado, no ambgua.

Ex: A cadeia 001011101 = ????

O processo de decodificao precisa de uma


representao conveniente para o cdigo de prefixo,
de forma que a palavra de cdigo inicial possa ser
extrada com facilidade ...(Qual?)

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 16/34
Algoritmos Gulosos -
Cdigo de Huffman
Cdigos de Prefixo
Como nenhuma palavra de cdigo um prefixo de
qualquer outra, a palavra de cdigo que inicia um
arquivo codificado, no ambgua.

Ex: A cadeia 001011101 = ????

O processo de decodificao precisa de uma


representao conveniente para o cdigo de prefixo,
de forma que a palavra de cdigo inicial possa ser
extrada com facilidade

rvore Binria
IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 17/34
Algoritmos Gulosos -
Cdigo de Huffman

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 18/34
Algoritmos Gulosos -
Cdigo de Huffman
Huffman criou um algoritmo guloso que produz um
cdigo de prefixo timo chamado cdigo de Huffman.

No pseudocdigo, C um conjunto de n caracteres e


cada caractere c C um objeto com uma freqncia
definida f [c].

O algoritmo constri de baixo para cima a rvore T


correspondente ao cdigo timo.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 19/34
Algoritmos Gulosos -
Cdigo de Huffman
Comea com um conjunto de |C| folhas e executa uma
seqncia de |C|1 operaes de intercalao para criar
a rvore final.

Uma fila de prioridade mnima Q, tendo f como chave,


usada para identificar os dois objetos menos freqentes
a serem intercalados. O resultado da intercalao um
novo objeto cuja freqncia a soma das freqncias
dos 2 objetos que foram intercalados.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 20/34
Algoritmos Gulosos -
Cdigo de Huffman

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 21/34
Algoritmos Gulosos -
Cdigo de Huffman

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 22/34
Algoritmos Gulosos
Outro Exemplo de Aplicao da Tcnica:
O problema do cmbio: como trocar uma

determinada quantidade de dinheiro no menor


nmero de moedas possveis;

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 23/34
Algoritmos Gulosos
Outro Exemplo de Aplicao da Tcnica:
O problema da mochila fracional:Voc um

ladro, que consegue entrar no cofre de um


banco carregando uma mochila com
capacidade para X quilos. Dados sacos
contendo X,Y e Z quilos de p de metais
valiosos (ouro, prata, bronze), maximize seu
roubo, colocando o maior valor possvel em
sua mochila!

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 24/34
Algoritmos Gulosos
Problema da Mochila Fracional
Podemos pegar uma frao de um item.
Ambos possuem uma subestrutura tima.
O problema da mochila fracional tem a propriedade
da escolha gulosa.
Para resolver o problema fracional, ordenar itens
pelo valor/peso: vi /wi .
Seja v /w v /w para todo i.
i i i+1 i+1

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 25/34
Algoritmos Gulosos
O problema da mochila fracional:

Tempo: O(n lg n) para ordenar, O(n) da em diante.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 26/34
Algoritmos Gulosos
Outro Exemplo ( possvel aplicar da Tcnica?)
O problema da mochila binria(No

fracionvel):Voc um ladro, que consegue


entrar no cofre de um banco carregando uma
mochila com capacidade para X quilos(ou x
metros cbico). No cofre h X, Y e Z barras de
metais valiosos (ouro, prata, bronze), cada um
a com tamanho X1, Y1, Z1). Maximize seu
roubo, colocando o maior valor possvel em
sua mochila!

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 27/34
Algoritmos Gulosos
Outro Exemplo ( possvel aplicar da Tcnica?)
O problema da mochila binria(No

fracionvel): Como no possvel pegar


apenas uma parte de uma barra, para
preencher o espao restante da mochila, este
problema no possui a propriedade da escolha
gulosa, no gerando soluo tima ao aplicar
esta tcnica.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 28/34
Algoritmos Gulosos
Exemplo do problema da mochila binria:

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 29/34
Algoritmos Gulosos
Exemplo do problema da mochila binria:

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 30/34
Algoritmos Gulosos - Resumo
1. Formule o problema como um problema de otimizao no qual
uma escolha feita, restando-nos ento um nico subproblema a
resolver.
2. Provar que existe sempre uma soluo tima do problema que

atende escolha gulosa, ou seja, a escolha feita pelo algoritmo guloso


segura.
3. Demonstrar que, uma vez feita a escolha gulosa, o que resta a

resolver um subproblema tal que se combinarmos a resposta otina


deste subproblema com o(s) elemento(s) da escolha gulosa, chega-se
soluo tima do problema original.
Esta a parte que requer mais engenhosidade ! Normalmente a

prova comea com uma soluo tima genrica e mostra que ela
pode ser modicada (possivelmente aps vrios passos) at que ela
inclua o(s) elemento(s) identificado(s) pela escolha gulosa.
IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 31/34
Algoritmos Gulosos -
Agradecimentos
Estes slides so baseados no material
disponibilizado pelos profs. Cid Carvalho de
Souza e Cndida Nunes da Silva, da
UNICAMP.

Qualquer incorretude , entretanto, de inteira


responsabilidade do prof. Joo Alberto Fabro,
da UTFPR.

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 32/34
Algoritmos Gulosos - Exerccios
Apagando e Ganhando:
Apagando e Ganhando um programa de auditrio
muito inteligente. Os participantes so selecionados
por sorteio, e o apresentador escreve em uma lousa
um nmero de N dgitos. O participante deve ento
apagar D dgitos do nmero que est na lousa. Os
nmeros que restarem equivalem ao prmio em
dinheiro que ele leva para casa!

Exemplo: Nmero na lousa: 1 2 3 1 2 3 9


Dgitos a serem apagados: 3
Total a ser levado para casa: 1 2 3 1 2 3 9 = 3239!

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 33/34
Algoritmos Gulosos - Exerccios
Apagando e Ganhando:
Outro Exemplo:
Nmero na lousa: 1 0 0 0 0 0 1 9
Dgitos a serem apagados: 4
Total a ser levado para casa: 1 0 0 0 0 0 1 9= 1019!

Desenvolva um algoritmo utilizando a abordagem


gulosa para resolver este problema!

IF64C Estruturas de Dados 2 Engenharia da Computao Prof. Joo Alberto Fabro - Slide 34/34

Potrebbero piacerti anche