Sie sind auf Seite 1von 78

Algoritmos Gulosos

1 / 78

Algoritmos Gulosos
Eduardo Camponogara
Departamento de Automao e Sistemas ca Universidade Federal de Santa Catarina

14 de abril de 2010

Algoritmos Gulosos Sumrio a

2 / 78

Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o

Algoritmos Gulosos Introduo ca

3 / 78

Sumrio a

Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o

Algoritmos Gulosos Introduo ca

4 / 78

Introduo ca

Algoritmos Gulosos

Algoritmos para problemas de otimizao tipicamente ca executam uma seqncia de passos, com um conjunto de ue escolhas a cada passo. Um Algoritmo Guloso sempre escolhe a melhor opo para o ca momento. Ele faz uma escolha tima local esperando que esta o leve a o uma soluo tima global. ca o

Algoritmos Gulosos Introduo ca

5 / 78

Introduo ca

Algoritmos Gulosos
Este cap tulo explora os problemas de otimizao que podem ser ca resolvidos por algoritmos gulosos:

Problema de seleo de atividades ca Compresso de dados (Human) a Matrides o Agendamento de tarefas de tempo unitrio com deadlines e a penalidades

Algoritmos Gulosos Introduo ca

6 / 78

Introduo ca

Algoritmos Gulosos
Outros exemplos:

Algoritmo para rvores de espalhamento m a nima Algoritmo de Dijkstra

Algoritmos Gulosos Um problema de seleo de atividades ca

7 / 78

Sumrio a

Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o

Algoritmos Gulosos Um problema de seleo de atividades ca

8 / 78

Um problema de seleo de atividades ca


Denio do problema ca

Dado o conjunto S = {a1 , a2 , . . . , an } de n atividades propostas que desejam utilizar um dado recurso, como uma sala de aula, que pode ser utilizada por apenas uma atividade por vez. Cada atividade ai possui:

instante de in si cio instante de trmino fi e tal que a condio a seguir satisfeita: 0 si < fi < ca e

Algoritmos Gulosos Um problema de seleo de atividades ca

9 / 78

Um problema de seleo de atividades ca

Denio do problema ca

Caso selecionada, a atividade ai posiciona-se no intervalo semi-aberto [si , fi ). Atividades ai e aj so compat a veis se os intervalos [si , fi ) e [sj , fj ) no se sobrepem. a o

Algoritmos Gulosos Um problema de seleo de atividades ca

10 / 78

Um problema de seleo de atividades ca

Problema
Selecione o conjunto tamanho-mximo de atividades mutuamente a compat veis.

Algoritmos Gulosos Um problema de seleo de atividades ca

11 / 78

Um problema de seleo de atividades ca


Exemplo
i si fi

1 1 4

2 3 5

3 0 6

4 5 7

5 3 8

6 5 9

7 6 10

8 8 11

9 8 12

10 2 13

11 12 14

Para este exemplo, {a3 , a9 , a11 } so atividades mutuamente a compat veis. {a1 , a4 , a8 , a11 } so tambm compat a e veis, que o maior e conjunto de atividades mutuamente compat veis Outro conjunto mximo {a2 , a4 , a9 , a11 }. a e

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

12 / 78

Problema de seleo de atividades ca


Subestrutura tima o

Seja Sij = {ak S : fi sk < fk sj } o conjunto das atividades que podem iniciar aps a atividade ai terminar, e o antes de aj iniciar. De fato, Sij consiste de todas as atividades que so a compat veis com:
i) ai e aj ; ii) todas as atividades que terminam antes ou no momento de trmino de ai ; e iii) todas as atividades iniciam no momento ou aps o in de aj . o cio

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

13 / 78

Problema de seleo de atividades ca


Subestrutura tima o

Para representar o problema completo, adicionamos atividades ct cias a0 e an+1 e adotamos a conveno f0 = 0 e sn+1 = . ca Ento, S = S0,n+1 , e os limites para i e j so dados por 0 i, a a j n + 1. Assumiremos tambm que as atividades esto ordenadas em e a ordem monotnica crescente do instante de trmino o e f0 f1 f2 . . . fn fn+1

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

14 / 78

Problema de seleo de atividades ca

Proposio ca
Sij = com i j

Demonstrao ca
Suponha que ak Sij , ento a fi sk < fk sj < fj = fi < fj que uma contradio. e ca

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

15 / 78

Problema de seleo de atividades ca


Concluso a

Conclu mos que, assumindo que as atividades esto ordenadas a em ordem monotnica crescente do instante de trmino, o o e subproblema selecionar o conjunto tamanho-mximo de e a atividades mutuamente compat veis de Sij , para 0 i < j n + 1, sabendo que todos os outros Sij so vazios. a Considere o subproblema Sij no vazio, e suponha que a a soluo para Sij inclui alguma atividade ak , de forma que ca fi sk < fk sj .

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

16 / 78

Problema de seleo de atividades ca


Quebrando o problema

Usando a atividade ak , dois subproblemas so gerados: a

Sik : atividades que iniciam depois de ai e terminam antes que ak inicie, Skj : atividades que iniciam depois de ak e terminam antes que aj inicie.

Cada par (Sik , Skj ) consiste de subconjuntos das atividades em Sij . A soluo a unio das solues para Sik e Skj com a ca e a co atividade ak .

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

17 / 78

Problema de seleo de atividades ca

Estrutura tima do problema o

Se uma soluo tima Aij para Sij inclui a atividade ak , ento ca o a as solues Aik para Sik e Akj para Skj tambm devem ser co e timas. o Obtemos portanto uma soluo tima Aij fazendo: ca o Aij = Aik {ak } Akj

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

18 / 78

Problema de seleo de atividades ca


Soluo Recursiva ca

Seja c[i, j] o nmero de atividades em um conjunto u tamanho-mximo de atividades mutuamente compat a veis em Sij . Temos que c[i, j] = 0 sempre que Sij = ; em particular, c[i, j] = 0 para i j Recursivamente: c[i, j] = 0 maxi<k<j {c[i, k] + c[k, j] + 1} se Sij = se Sij =

Algoritmos Gulosos Um problema de seleo de atividades ca Estrutura sub-tima o

19 / 78

Soluo Gulosa ca
Teorema
Considere qualquer subconjunto Sij no vazio, e seja am a a atividade em Sij com menor instante de trmino: e fm = min{fk : ak Sij } Ento: a 1) A atividade am usada em algum conjunto tamanho-mximo e a de atividades mutuamente compat veis em Sij . 2) O subconjunto Sim vazio, e a escolha de am faz com que e Smj seja o unico subproblema no vazio. a

Algoritmos Gulosos Um problema de seleo de atividades ca Soluo gulosa ca

20 / 78

Soluo Gulosa ca
Demonstrao ca

Primeiro, provaremos (2) antes porque mais simples. e Suponha Sim no vazio, de maneira que exista uma atividade a ak tal que fi ak < fk sm < fm Ento ak est tambm em Sij e possui um instante de trmino a a e e anterior a am , que contradiz com a escolha. Conclu mos ento que Sim vazio. a e

Algoritmos Gulosos Um problema de seleo de atividades ca Soluo gulosa ca

21 / 78

Soluo Gulosa ca

Demonstrao ca

Para provar a primeira parte, suponha que Aij um e subconjunto tamanho-mximo de atividades mutuamente a compat veis com Sij Ordene as atividades em Aij em ordem monotonicamente crescente de instante de trmino. e Seja ak a primeira atividade em Aij . Se ak = am , est conclu a do.

Algoritmos Gulosos Um problema de seleo de atividades ca Soluo gulosa ca

22 / 78

Soluo Gulosa ca
Demonstrao ca

Se ak = am , constru mos o subconjunto Aij = (Aij {ak }) {am }

a As atividades Aij so disjuntas, pois as atividades em Aij so a disjuntas, ak a primeria atividade em Aij a terminar, e e fm fk . Note que Aij possui o mesmo nmero de atividades que Aij , u e logo Aij um subconjunto tamanho-mximo de atividades a mutuamente compat veis para Sij que inclui am .

Algoritmos Gulosos Um problema de seleo de atividades ca Soluo gulosa ca

23 / 78

Problema de seleo de atividades ca


Por que este teorema to valioso? e a

Em nossa soluo em programao dinmica, dois ca ca a subconjuntos so usados na soluo tima, e existem j i + 1 a ca o escolhas para resolver Sij . O teorema reduz o nmero de decises signicativamente: u o apenas um subproblema utilizado na soluo tima (o outro e ca o subproblema garantidamente vazio) e Quando buscamos uma soluo para Sij , temos que considerar ca apenas uma escolha: aquela com instante de trmino mais e cedo em Sij .

Algoritmos Gulosos Um problema de seleo de atividades ca Soluo gulosa ca

24 / 78

Problema de seleo de atividades ca


Por que este teorema to valioso? e a

O teorema permite que resolvamos o problema de maneira top-down Para resolver o problema Sij :

Escolhemos a atividade am em Sij com o instante de concluso a mais cedo. Ento resolvemos Smj para obter Am,j . a Inclu mos ` soluo {am } o conjunto de atividades Amj a ca utilizadas na soluo tima para o subproblema Smj . ca o

Em outras palavras, Aij = {am } Amj

Algoritmos Gulosos Um problema de seleo de atividades ca Soluo gulosa ca

25 / 78

Problema de seleo de atividades ca


Comportamento Guloso

A atividade am que escolhemos quando resolvemos o subproblema sempre a de menor instante de trmino que e e pode ser legalmente agendada. A atividade escolhida portanto a escolha gulosa no sentido e que ela deixa tanto tempo quanto poss para que as vel atividades restantes sejam agendadas. Isto , uma escolha gulosa aquela que maximiza a e e quantidade de tempo restante no agendada. a

Algoritmos Gulosos Um problema de seleo de atividades ca Algoritmo

26 / 78

Problema de seleo de atividades ca

Um algoritmo guloso recursivo

Entrada do algoritmo:
a) vetores s e f b) ndices i e j do subproblema Sij a resolver

Retorna o conjunto tamanho-mximo de atividades a mutuamente compat veis em Sij . Assumimos que as atividades, de tamanho n, esto ordenadas a de maneira crescente pelo instante de trmino. e

Algoritmos Gulosos Um problema de seleo de atividades ca Algoritmo

27 / 78

Problema de seleo de atividades ca


Algoritmo recursivo
Recursive Activity Selector(s, f , i, j) m i +1 while m < j and sm < fi do m m + 1 if m < j then return {am } Recursive Activity Selector(s, f , m, j) else return

Algoritmos Gulosos Um problema de seleo de atividades ca Algoritmo

28 / 78

Problema de seleo de atividades ca

Algoritmo recursivo

Chamada: Recursive Activity Selector(s, f , 0, n + 1) Assumindo que as atividades j esto ordenadas pelo instante a a de trmino, o algoritmo executa em tempo (n). e

Algoritmos Gulosos Elementos dos algoritmos gulosos

29 / 78

Sumrio a

Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o

Algoritmos Gulosos Elementos dos algoritmos gulosos

30 / 78

Elementos dos algoritmos gulosos

Elementos

Um algoritmo guloso obtm uma soluo tima para um e ca o problema fazendo uma seqncia de escolhas. ue Para cada ponto de deciso no algoritmo, a escolha que a parece ser a melhor para o momento feita. e Esta estratgia heur e stica nem sempre produz a soluo otima, ca mas como vimos no problema de seleo de atividades, ca algumas vezes sim.

Algoritmos Gulosos Elementos dos algoritmos gulosos

31 / 78

Elementos dos algoritmos gulosos


Elementos
Para desenvolver um algoritmo guloso para o problema de seleo ca de atividades, seguimos os seguintes passos: 1) determinar a estrutura tima do problema, o 2) desenvolver uma soluo recursiva, ca 3) provar que em cada estgio da recurso, uma das escolhas a a timas a gulosa, o e 4) mostrar que todos menos um dos subproblemas induzidos por ter feito a escolha gulosa vazio, e

Algoritmos Gulosos Elementos dos algoritmos gulosos

32 / 78

Elementos dos algoritmos gulosos

Elementos
Para desenvolver um algoritmo guloso para o problema de seleo ca de atividades, seguimos os seguintes passos: 5) desenvolver um algoritmo recursivo que implemente a estratgia gulosa, e 6) converter o algoritmo recursivo para iterativo.

Algoritmos Gulosos Elementos dos algoritmos gulosos

33 / 78

Elementos dos algoritmos gulosos


Elementos
De maneira mais geral, desenvolvemos algoritmos gulosos de acordo com a seguinte seqncia de passos: ue 1) converta o problema de otimizao tal que ao fazermos uma ca escolha nos resta apenas um subproblema a resolver, 2) prove que existe sempre uma soluo tima para o problema ca o original que faz a escolha gulosa, ento ela sempre ser segura, a a 3) demonstre que, tendo feito a escolha gulosa, o que resta um e subproblema cuja soluo pode ser combinada ` escolha ca a gulosa de maneira a se chegar a uma soluo tima global. ca o

Algoritmos Gulosos Elementos dos algoritmos gulosos

34 / 78

Elementos dos algoritmos gulosos

Observaes co
Como podemos dizer se um algoritmo guloso resolver um a problema de otimizao em particular? ca

No existe uma maneira geral, mas a propriedade a greedy-choice e a subestrutura tima so dois ingredientes o a chaves.

Algoritmos Gulosos Elementos dos algoritmos gulosos

35 / 78

Elementos dos algoritmos gulosos

Propriedade greedy-choice
O primeiro elemento chave a propriedade greedy-choice: e

uma soluo tima global pode ser atingida fazendo escolhas ca o timas locais (gulosas). o Em outras palavras, quando consideramos qual escolha a fazer, fazemos a que parece melhor no momento, sem considerar os resultados dos subproblemas.

Algoritmos Gulosos Elementos dos algoritmos gulosos

36 / 78

Elementos dos algoritmos gulosos

DP algoritmos gulosos

Em programao dinmica, fazemos uma escolha a cada ca a passo, mas a escolha usualmente depende da soluo dos ca subproblemas. Consequentemente, resolvemos problemas de programao ca dinmica de maneira bottom-up, progredindo de subproblemas a menores para maiores.

Algoritmos Gulosos Elementos dos algoritmos gulosos

37 / 78

Elementos dos algoritmos gulosos

DP algoritmos gulosos

Em algoritmos gulosos, fazemos a escolha que parece ser melhor no momento e ento resolvemos o subproblema a Portanto, ao contrrio da programao dinmica, que resolve a ca a o problema de maneira bottom-up, a estratgia gulosa e usualmente progride de maneira top-down, fazendo uma escolha gulosa aps a outra, reduzindo cada instncia do o a problema em uma menor.

Algoritmos Gulosos Elementos dos algoritmos gulosos

38 / 78

Elementos dos algoritmos gulosos


Subestrutura tima o

Um problema possui subestrutura otima se uma soluo ca tima do problema contm solues timas para os o e co o subproblemas Esta propriedade o ingrediente chave para a aplicao de e ca programao dinmica, assim como algoritmos gulosos. ca a Exemplo: Se uma soluo tima para o subproblema Sij ca o inclui uma atividade ak , ento ela deve conter solues timas a co o para os subproblemas Sik e Skj .

Algoritmos Gulosos Elementos dos algoritmos gulosos Problema da mochila

39 / 78

Elementos dos algoritmos gulosos


O problema da mochila
O problema 0 1 da mochila colocado como: e

um ladro roubando uma loja encontra n itens; a o i-simo item vale vi reais e pesa wi quilogramas. e vi e wi so inteiros. a desejamos carregar o mximo de valor poss a vel, mas podemos carregar no mximo w quilogramas na mochila para algum w a inteiro.

Problema
Quais itens devem ser levados?

Algoritmos Gulosos Elementos dos algoritmos gulosos Problema da mochila

40 / 78

Elementos dos algoritmos gulosos

O problema da mochila

O problema da mochila possui subestrutura tima. o Para o problema 0 1, considere que a carga mais valiosa a ser carregada pesa no mximo w quilogramas. a Se removermos o item j da mochila, o restante deve ser a carga mais valiosa que pese no mximo w wj que o ladro a a pode levar dos n 1 itens originais excluindo j.

Algoritmos Gulosos Cdigos Human o

41 / 78

Sumrio a

Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o

Algoritmos Gulosos Cdigos Human o

42 / 78

Cdigos Human o
Indroduo ca

Os cdigos tipo Human so amplamente usados, o a constituindo uma tcnica efetiva para compresso de dados. e a Ttais cdigos podem economizar de 20% a 90%, dependendo o das caracter sticas dos dados. O algoritmo guloso de Human utiliza uma tabela de frequncia das ocorrncias dos caracteres para construir um e e vetor timo que representa cada caracter com um conjunto de o bits.

Algoritmos Gulosos Cdigos Human o

43 / 78

Cdigos Human o
Exemplo

Suponha que temos um arquivo com 100.000 caracteres que desejamos comprimir. Os caracteres no arquivo ocorrem com freqncias dadas pela ue tabela: Freqncia ue Cdigo xo o Cdigo varivel o a a 45 000 0 b 13 001 101 c 12 010 100 d 16 011 111 e 9 100 1101 f 5 101 1100

Algoritmos Gulosos Cdigos Human o

44 / 78

Cdigos Human o

Exemplo

Se utilizarmos uma codicao de tamanho xo, precisaremos ca de 3 bits para representar 6 caracteres. Este mtodo requer 300.000 bits para codicar o arquivo. e A codicao de tamanho varivel consideravelmente melhor ca a e que a de tamanho xo, designando aos caracteres frequentes cdigos curtos, e longos aos infrequentes. o

Algoritmos Gulosos Cdigos Human o

45 / 78

Cdigos Human o

Exemplo
Para a codicao de tamanho varivel da tabela, o cdigo requer ca a o (45 1 + 13 3 + 12 3 + 16 3 + 9 4 + 5 4) 1000 = = 224.000 bits Uma economia de aproximadamente 25%. De fato, esta uma e codicao tima. ca o

Algoritmos Gulosos Cdigos Human o

46 / 78

Cdigos Human o

Prex Code

Consideramos cdigos onde nenhum cdigo prexo de outro. o o e Estes cdigos so chamados de prex codes o a E poss demostrar que a compresso de dados tima de vel a o uma codicao pode sempre ser gerada por prex codes, ca ento no existe perda de generalidade em se restringir a a a ateno aos prex codes. ca

Algoritmos Gulosos Cdigos Human o

47 / 78

Cdigos Human o

Prex Code

Codicar simples: basta concatenar os cdigos que e o representam cada caracter. abc [0|101|100] 0101100

Algoritmos Gulosos Cdigos Human o

48 / 78

Cdigos Human o

Prex Code

Cdigos prexo so desejveis porque eles simplicam a o a a codicao. ca Uma vez que nenhum cdigo prexo de outro, o cdigo que o e o inicia um arquivo codicado unico. e Decodicamos o primeiro cdigo, e repetimos o processo at o o e nal do arquivo.

Algoritmos Gulosos Cdigos Human o

49 / 78

Cdigos Human o
Decodicao ca

O processo de decodicao necessita de uma representao ca ca conveniente para decodicao, de maneira que o cdigo ca o inicial possa ser facilmente extra do. Uma rvore binria, em que as folhas representam os a a caracteres nos d uma representao adequada. a ca Interpretamos o cdigo de um caracter como o caminho da o raiz ao caracter, onde 0 signica ir para o lho ` esquerda, e a 1 ir para o lho ` direita. a

Algoritmos Gulosos Cdigos Human o

50 / 78

Cdigos Human o
Arvore de tamanho xo
100 0 86 0 58 0 a : 45 1 b : 13 0 c : 12 1 28 1 d : 16 0 e:9 14 1 f :5 0 1 14

Algoritmos Gulosos Cdigos Human o

51 / 78

Cdigos Human o
Arvore de tamanho varivel a
100 0 a : 45 0 25 0 c : 12 1 b : 13 0 f :5 0 14 1 e:9 1 55 1 30 1 d : 16

Algoritmos Gulosos Cdigos Human o

52 / 78

Cdigos Human o
Observaes co

Uma codicao tima para um arquivo sempre ca o e representada por uma rvore binria completa, em que cada a a n que no uma folha possui dois lhos. o a e A codicao de tamanho xo do nosso exemplo no tima ca a eo uma vez que sua rvore no completa. a a e Restringindo nossa ateno `s rvores completas, podemos ca a a dizer que se C o alfabeto em que os caracteres so extra e a dos, a rvore tima de codicao tem exatamente |C | folhas, uma a o ca para cada letra do alfabeto, e exatamente |C | 1 ns internos. o

Algoritmos Gulosos Cdigos Human o

53 / 78

Cdigos Human o

Seja T uma rvore cdigo-prexo. a o Para cada caracter c do alfabeto C , seja f (c) uma funo que ca denota a freqncia de c no arquivo. ue Seja dT (c) a profundidade de c na rvore T . a Note que dT (c) tambm o comprimento do cdigo para c. e e o Portanto, o nmero de bits necessrios para codicar o u a arquivo : e f (c)dT (c) B(T ) =
cC

que denido como o custo da rvore T . e a

Algoritmos Gulosos Cdigos Human o

54 / 78

Cdigos Human o

Construindo o Human code

Human inventou um algoritmo guloso que constri uma o rvore de prexos tima chamada de Human tree. a o O algoritmo constri a rvore T correspondente ao cdigo o a o timo de maneira bottom-up. o Inicia com um conjunto de |C | folhas e executa uma seqncia ue de |C | 1 operaes de unio/intercalao (merge) para criar co a ca a rvore nal. a

Algoritmos Gulosos Cdigos Human o

55 / 78

Cdigos Human o
Construindo o Human code

No pseudocdigo assumimos que C um conjunto de n o e caracteres e que cada caracter c C um objeto com uma e freqncia denida f [c]. ue Uma la de prioridades Q, indexada por f , utilizada para e identicar os dois objetos de menor freqncia a serem ue intercalados. O resultado desta unio um novo objeto, cuja freqncia a a e ue e soma das freqncias dos outros dois. ue

Algoritmos Gulosos Cdigos Human o

56 / 78

Cdigos Human o
Algoritmo
Human(C ) n |C | QC for i 1 to n 1 do z Allocate Node() x left[z] Extract Min(Q) y right[z] Extract Min(Q) f [z] f [x] + f [y ] Insert(Q, z) return Extract Min(Q)

Algoritmos Gulosos Cdigos Human o

57 / 78

Cdigos Human o

Exemplo
f :5 e:9 c : 12 b : 13 d : 16 a : 45

Algoritmos Gulosos Cdigos Human o

58 / 78

Cdigos Human o

Exemplo
c : 12 b : 13 0 14 1 d : 16 a : 45

f :5

e:9

Algoritmos Gulosos Cdigos Human o

59 / 78

Cdigos Human o

Exemplo
14 0 1 d : 16 0 25 1 a : 45

f :5

e:9

c : 12

b : 13

Algoritmos Gulosos Cdigos Human o

60 / 78

Cdigos Human o
Exemplo
25 0 1 0 14 0 1 30 1 a : 45

c : 12

b : 13

d : 16

f :5

e:9

Algoritmos Gulosos Cdigos Human o

61 / 78

Cdigos Human o
Exemplo
a : 45 0 55 1

25 0 1 0 14 0

30 1

c : 12

b : 13

d : 16 1

f :5

e:9

Algoritmos Gulosos Cdigos Human o

62 / 78

Cdigos Human o
Exemplo
100 0 a : 45 0 25 0 c : 12 1 b : 13 0 f :5 0 14 1 e:9 1 55 1 30 1 d : 16

Algoritmos Gulosos Cdigos Human o

63 / 78

Cdigos Human o

Anlise a

Construir Heap O(n) (n 1) iteraes, cada uma com 3O(lg n) co Portanto, o algoritmo executa em tempo O(n lg n)

Algoritmos Gulosos Cdigos Human o

64 / 78

Corretude do Algoritmo

Lema 2

Seja C um alfabeto onde cada caracter c C possui freqncia f [c]. ue Sejam x e y dois caracteres em C de menor freqncia. ue Ento existe um cdigo de prexo timo para C tal que os a o o cdigos para x e y tm o mesmo comprimento e diferem o e apenas no ultimo bit.

Algoritmos Gulosos Cdigos Human o

65 / 78

Corretude do Algoritmo

Demonstrao ca

A idia da prova pegar uma rvore T que representa um e e a cdigo prexo timo arbitrrio. o o a Modicar T e obter outra rvore tima, T , onde os caracteres a o x e y apaream como folhas irms de profundidade mxima. c a a Se conseguirmos, ento seus cdigos tero o mesmo a o a comprimento e sero diferentes apenas no ultimo bit. a

Algoritmos Gulosos Cdigos Human o

66 / 78

Corretude do Algoritmo

Demonstrao ca

Sejam b e c dois caracteres que so folhas irms de a a profundidade mxima em T . a Sem perda de generalidade, assumimos que f [b] f [c] e f [x] f [y ]. Uma vez que f [x] e f [y ] so as folhas de menor freqncia, a ue em ordem, e f [b] e f [c] so duas freqncias arbitrrias, nesta a ue a ordem, temos que, f [x] f [b] e f [y ] f [c].

Algoritmos Gulosos Cdigos Human o

67 / 78

Corretude do Algoritmo
Demonstrao ca
T T T

x y b c y x c

b c x y

trocamos x por b para produzir T , e y por c para T .

Algoritmos Gulosos Cdigos Human o

68 / 78

Corritude do Algoritmo
Demonstrao ca
1 = B(T ) B(T ) =
cC

f (c)dT (c)
cC

f (c)dT (c)

= f [x]dT (x) + f [b]dT (b) f [x]dT (x) f [b]dT (b) = = = = f [x]dT (x) f [b]dT (b) + f [b]dT (b) f [x]dT (x) f [x]dT (x) f [b]dT (x) + f [b]dT (b) f [x]dT (b) f [x] f [b] dT (x) + f [b] f [x] dT (b) f [b] f [x] dT (b) dT (x)

Algoritmos Gulosos Cdigos Human o

69 / 78

Corretude do Algoritmo
Demonstrao ca

A diferena dos custos entre B(T ) e B(T ) foi calculada c como 1 . Similarmente, como a troca de y por c no aumenta o custo, a ) B(T ) no negativo. 2 = B(T e a Portanto, B(T ) B(T ) B(T ), e como T timo, eo B(T ) B(T ), que impica B(T ) = B(T ). Portanto, T uma rvore tima em que x e y aparecem e a o como folhas irms de profundidade mxima, provando o lema. a a

Algoritmos Gulosos Cdigos Human o

70 / 78

Corretude do Algoritmo

Observaes co
O Lema 2 nos diz que a construo de uma rvore tima com ca a o unies pode, sem perda de generalidade, comear com uma escolha o c gulosa para unir os caracteres de menor freqncia. ue

Algoritmos Gulosos Cdigos Human o

71 / 78

Corretude do Algortimo
Lema 3

Seja T uma rvore binria completa que representa um cdigo a a o sobre um alfabeto C , onde a freqncia f [c] denida para ue e cada caracter c C . Considere quaisquer dois caracteres x e y que so folhas irms a a de T e seja z o pai. Ento, considerando z como um caracter com freqncia a ue f [z] = f [x] + f [y ], a rvore T = T {x, y } representa um a cdigo prexo timo para C = (C {x, y }) {z}. o o

Algoritmos Gulosos Cdigos Human o

72 / 78

Corretude do Algoritmo

Demonstrao ca
Primeiro mostraremos que o custo B(T ) da rvore T pode ser a expresso em termos do custo B(T ) da rvore T considerando os a custos que compem a equao: o ca B(T ) =
cC

f (c)dT (c)

Algoritmos Gulosos Cdigos Human o

73 / 78

Corretude do Algoritmo

Demonstrao ca
Para cada c C {x, y }, temos dT (c) = dT (c) Logo, f [c]dT (c) = f [c]dT (c)

Algoritmos Gulosos Cdigos Human o

74 / 78

Corretude do Algoritmo

Demonstrao ca
Uma vez que dT (x) = dT (y ) = dT (z) + 1, temos f [x]dT (x) + f [y ]dT (y ) = (f [x] + f [y ])(dT (z) + 1) = f [z]dT (z) + (f [x] + f [y ]) Assim conclu mos que: B(T ) = B(T ) + f [x] + f [y ]

Algoritmos Gulosos Cdigos Human o

75 / 78

Corretude do Algoritmo

Demonstrao ca

Se T representa um cdigo prexo no timo para o alfabeto o a o , ento existe uma arvore T cujas folhas so caracteres em C a a C de maneira que B(T ) < B(T ). Uma vez que z tratado como um caracter em C , z aparece e como uma folha em T .

Algoritmos Gulosos Cdigos Human o

76 / 78

Corretude do Algoritmo
Demonstrao ca

Se adicionarmos x e y como lhos de z em T , ento a obtemos o cdigo prexo para C com custo o B(T ) + f [x] + f [y ] < = B(T ) + f [x] + f [y ] = B(T ) B(T ) + f [x] + f [y ] < B(T )

contradizendo a otimalidade de T .

Portanto, T deve ser timo para o alfabeto C . o

Algoritmos Gulosos Cdigos Human o

77 / 78

Corretude do Algoritmo

Teorema
O procedimento de Human produz um cdigo prexo timo. o o

Algoritmos Gulosos Cdigos Human o

78 / 78

Algoritmo Gulosos

Fim! Obrigado pela presena c

Das könnte Ihnen auch gefallen