12b. Huffmanboom

2021-03-19
slides.com/jod/pt_12b

Docent: Jo Devriendt

Assistent: Ann Philips

Coördinator: Joost Vennekens

voornaam.achternaam@kuleuven.be

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Centraal idee

  • Bouw binaire boom met karakters als leafs
  • Labels "1" op linker- en "0" op rechtertakken
  • Paden vanuit root naar leaf geven bitcode
    • pad = opeenvolging van takken zonder splitsing

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m
e
t
n

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Centraal idee

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m  111
e
t
n
  • Bouw binaire boom met karakters als leafs
  • Labels "1" op linker- en "0" op rechtertakken
  • Paden vanuit root naar leaf geven bitcode
    • pad = opeenvolging van takken zonder splitsing

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Centraal idee

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m  111
e 0
t
n
  • Bouw binaire boom met karakters als leafs
  • Labels "1" op linker- en "0" op rechtertakken
  • Paden vanuit root naar leaf geven bitcode
    • pad = opeenvolging van takken zonder splitsing

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Centraal idee

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m  111
e 0
t 10
n
  • Bouw binaire boom met karakters als leafs
  • Labels "1" op linker- en "0" op rechtertakken
  • Paden vanuit root naar leaf geven bitcode
    • pad = opeenvolging van takken zonder splitsing

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Centraal idee

  • Bouw binaire boom met karakters als leafs
  • Labels "1" op linker- en "0" op rechtertakken
  • Paden vanuit root naar leaf geven bitcode
    • pad = opeenvolging van takken zonder splitsing

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m  111
e 0
t 10
n 110

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Prefix-eigenschap

  • Als A en B twee verschillende paden zijn, dan is A een prefix van B enkel als A eindigt bij een interne node
  • Door de karakters in de leafs te steken garanderen we dat geen enkele bitcode een prefix is van een andere

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m  111
e 0
t 10
n 110

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Frequentie-eigenschap

  • Zorg dat frequente karakters korte paden hebben
    • "bovenaan" in de Huffmanboom

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m  111
e 0
t 10
n 110

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

.

.

.

e

t

n

m

0
1
1
1
0
0
 
1110010100110100110 

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
 
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
 
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  m
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  m
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  me
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  me
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  mee
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  mee
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  mee
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  mee t
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Decodering

.

.

.

e

t

n

m

0
1
1
1
0
0
  mee t te  n te  n
1110010100110100110 

Bit "1" betekent links, bit "0" rechts

  1. Loop over de geëncodeerde bitstring vanaf de root
  2. Tot in een leaf die een karakter voorstelt
  3. Ga terug naar de root en herhaal

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Hoe Huffmanboom construeren?

Zie presentatie 12c :)

.

.

.

e

t

n

m

0
1
1
1
0
0
karakter bitcode
m 111
e 0
t 10
n 110

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Samenvatting

  • Huffmanboom is een binaire boom met karakters in leafs
  • Paden naar karakters stellen bitcodes voor
  • Twee paden naar leafs zijn geen prefixes van elkaar
  • Hoogfrequente karakters moeten in bladeren dicht bij de root zitten, om korte paden te hebben
  • Kan gebruikt te worden om zowel te coderen als decoderen