You can edit almost every page by Creating an account. Otherwise, see the FAQ.

Elias gamma coding

Uit EverybodyWiki Bios & Wiki
Ga naar:navigatie, zoeken

Elias γ-code of Elias gamma code is een universele code voor het coderen van positieve gehele getallen ontwikkeld door Peter Elias.[1] Het wordt meestal gebruikt voor het coderen van gehele getallen wiens bovengrens niet vooraf bepaald kan worden.

Codering[bewerken]

Om een getal x ≥ 1 te coderen:

  1. Laat de hoogste macht van 2 zijn die het bevat, dus 2Nx < 2N+1.
  2. Schrijf nullen, dan
  3. Voeg de binaire vorm van toe, een -bits binaire getal.

Een equivalente manier om hetzelfde proces uit te drukken:

  1. Codeer in [unary|Unary numeral system]; dat wil zeggen, als nullen gevolgd door een één.
  2. Voeg de resterende binaire cijfers van toe aan deze representatie van .

Om een getal weer te geven, gebruikt Elias gamma (γ) bits.[1]

De code begint (de impliciete kansverdeling van de code is toegevoegd voor duidelijkheid):

Getal Binaire γ-codering Impliciete kans
1 = 20 + 0 1 1 1/2
2 = 21 + 0 1 0 0 1 0 1/8
3 = 21 + 1 1 1 0 1 1 1/8
4 = 22 + 0 1 00 00 1 00 1/32
5 = 22 + 1 1 01 00 1 01 1/32
6 = 22 + 2 1 10 00 1 10 1/32
7 = 22 + 3 1 11 00 1 11 1/32
8 = 23 + 0 1 000 000 1 000 1/128
9 = 23 + 1 1 001 000 1 001 1/128
10 = 23 + 2 1 010 000 1 010 1/128
11 = 23 + 3 1 011 000 1 011 1/128
12 = 23 + 4 1 100 000 1 100 1/128
13 = 23 + 5 1 101 000 1 101 1/128
14 = 23 + 6 1 110 000 1 110 1/128
15 = 23 + 7 1 111 000 1 111 1/128
16 = 24 + 0 1 0000 0000 1 0000 1/512
17 = 24 + 1 1 0001 0000 1 0001 1/512

Decodering[bewerken]

Om een Elias gamma-gecodeerd geheel getal te decoderen:

  1. Lees en tel de nullen van de stream tot je de eerste 1 bereikt. Noem deze telling van nullen N.
  2. Beschouw de één die bereikt is als de eerste cijfer van het gehele getal, met een waarde van 2N, lees de resterende N cijfers van het gehele getal.

Toepassingen[bewerken]

Gamma codering wordt gebruikt in toepassingen waar de grootste gecodeerde waarde niet vooraf bekend is, of om gegevens te comprimeren in situaties waar kleine waarden veel voorkomen dan grote waarden.

Gamma codering kan in die situaties efficiënter zijn in termen van grootte. Bijvoorbeeld, merk op dat in de bovenstaande tabel, als een vaste grootte van 8 bits wordt gekozen om een klein getal als 5 op te slaan, het resulterende binaire getal 00000101 zou zijn, terwijl de γ-codering met variabele bits 00 1 01 zou zijn, met 3 bits minder nodig. Aan de andere kant, grotere waarden, zoals 254 opgeslagen in een vaste grootte van 8 bits, zou 11111110 zijn, terwijl de γ-codering met variabele bits 0000000 1 1111110 zou zijn, met 7 extra bits nodig.

Gamma codering is een bouwsteen in de Elias delta code.

Algemeen[bewerken]

Gamma codering codeert geen nul of negatieve gehele getallen. Een manier om nul te verwerken is door 1 toe te voegen voor het coderen en vervolgens 1 af te trekken na het decoderen. Een andere manier is om elke niet-nul code vooraf te gaan met een 1 en dan nul te coderen als een enkele 0.

Een manier om alle gehele getallen te coderen is door een bijectie op te zetten, waarbij gehele getallen (0, −1, 1, −2, 2, −3, 3, ...) worden toegewezen aan (1, 2, 3, 4, 5, 6, 7, ...) vóór het coderen. In software wordt dit het gemakkelijkst gedaan door niet-negatieve invoer toe te wijzen aan oneven uitvoer, en negatieve invoer aan even uitvoer, zodat het minst significante bit een geïnverteerd [tekenbit|sign bit] wordt:

Exponential-Golomb coding generaliseert de gamma code tot gehele getallen met een "vlakkere" machtswetverdeling, net als Golomb coding de unary code generaliseert. Het betekent het delen van het getal door een positieve deler, meestal een macht van 2, het schrijven van de gamma code voor één meer dan de quotiënt, en het uitschrijven van de rest in een gewone binair code.

Zie ook[bewerken]

Referenties[bewerken]

Fout in uitdrukking: operand voor < ontbreekt.

  1. 1,0 1,1 Citefout: Onjuist label <ref>; er is geen tekst opgegeven voor referenties met de naam Elias


Read or create/edit this page in another language[bewerken]