[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Será que estou certo?



Não sei se entendi algo que já era claro para todos, se estou enganado,
ou se descobri algo novo. Por isto gostaria de opiniões a respeito.
    Fiz a tal árvore de huff (sem a utilização do huff.c) e as letras em
ordem decrescente de frequencias.  Veja abaixo um exemplo (por
conveniencia fiz a ordem decrescente de frequencias ser a ordem
alfabética):
Letra: M        Codigo: 0111110
Letra: L        Codigo: 0111111
Letra: K        Codigo: 111110
Letra: J        Codigo: 111111
Letra: I        Codigo: 011110
Letra: H        Codigo: 11110
Letra: G        Codigo: 01110
Letra: F        Codigo: 1110
Letra: E        Codigo: 0110
Letra: D        Codigo: 110
Letra: C        Codigo: 010
Letra: B        Codigo: 10
Letra: A        Codigo: 00
Então notei que os únicos caractéres significativos são o primeiro e o
último.  Então fiz o seguinte.  Representei os 1´s entre o primeiro e o
último caractér como integers.  Da seguinte forma.  Se existem 0 1´s
entre o primeiro e o úlitmo algarismo do codigo, não imprimo nada, se
existir 1 algarismo imprimo um 0 entre o primeiro e o segunto e assim
por diante.  Veja uma impressão do resultado:
Letra: M        Codigo: 040
Letra: L        Codigo: 041
Letra: K        Codigo: 130
Letra: J        Codigo: 131
Letra: I        Codigo: 030
Letra: H        Codigo: 120
Letra: G        Codigo: 020
Letra: F        Codigo: 110
Letra: E        Codigo: 010
Letra: D        Codigo: 100
Letra: C        Codigo: 000
Letra: B        Codigo: 10
Letra: A        Codigo: 00

Os algarismos centrais agora representam as "alturas" referentes a cada
letra na árvore.  Agora se escrever estes algarismos em binario, estarei
economisando bastante bits.  Veja abaixo:
Letra: M        Codigo: 01000
Letra: L        Codigo: 01001
Letra: K        Codigo: 1110
Letra: J        Codigo: 1111
Letra: I        Codigo: 0110
Letra: H        Codigo: 1100
Letra: G        Codigo: 0100
Letra: F        Codigo: 1100
Letra: E        Codigo: 010
Letra: D        Codigo: 100
Letra: C        Codigo: 000
Letra: B        Codigo: 10
Letra: A        Codigo: 00

Pronto, agora tenho um código bastante "econômico" para cada letra.
E ai?  Algum lapso no meu raciocínio????  Se alguém tiver algum
comentário, por favor!!!

Valeu!

P.S.:  TIMÃO VAI BOTAR PARA QUEBRAR HOJE!

--
krico
krico@kriconet.com.br