Елајасов код

Извор: testwiki
Пређи на навигацију Пређи на претрагу

Елајасов код (Шенон-Фано-Елајасов код) је код са структуром стабла променљиве дужине који неограничено дуге низове изворних симбола кодује у неограничено дуге низове кодованих симбола. Операција кодовања има клизајућу структуру, код које, како неколико симбола уђе у кодер тако га неколико кодованих бита и напушта. Број кодованих бита на излазу из декодера након уласка једног изворног симбола је променљив и зависи од структуре низа изворних симбола.

Математичка интерпретација Елајасовог кода

Датотека:Fja raspodele elajas-koda.jpg
Функција расподеле -{F(i)}-

Претпоставимо да имамо извор без меморије -{Xi}- који узима вредности из алфабета {1,2,...,L}. Претпоставимо да су вероватноће свих ових симбола строго позитивне -{p(i)>0, ∀i}-. Функција расподеле -{F(i)}- је дата са:

F(i)=kip(k)

Модификована функција расподеле која представља суму вероватноћа свих симбола од -{i}-, и половину вероватноће симбола -{i}- може се записати као:

Fs(i)=F ¯(i)=k<ip(k)+12p(i)

C обзиром да су све вероватноће позитивне, -{F(i)≠F(j)}- за -{i≠j}- можемо одредити -{i}- ако знамо модификовану функцију расподеле (директно са графика). Вредности модификоване функције расподеле се могу користити као код за -{i}-. У општем случају је -{Fs(i)}- је реалан број који може да се прикаже само са бесконачним бројем бита у његовом бинарном облику, тако да не можемо да користимо ту вредност као кодну реч.

Претпоставимо да заокружимо бинарну представу -{Fs(i)}- на l(i) бита што се може записати као:

L=F ¯(i)l(i)

Сад имамо:

F ¯(i)F ¯(i)l(i)<12l(i)

Ако је:

l(i)=logp(i)+1

Тада имамо:

12l(i)=2l(i)=2logp(i)12logp(i)1=p(i)2=𝐅 ¯(i)𝐅(i1)F ¯(i)l(i)>F(i1)

Из овога следи да се број -{L}- налази у интервалу који одговара вредности -{i}-, и да довољан број бита да се опише -{i}- износи

l(i)=logp(i)+1

Овако конструисани код је префиксан (ниједна кодна реч није префикс друге кодне речи) што ћемо и доказати. Претпоставимо да је кодна реч -{b1b2…bl}-. Ови битови представљају интервал

[0.b1b2bl,0.b1b2bl+12l]

Да би код био префиксан потребно је да интервали који одговарају кодним речима буду дисјунктни. Интервал који одговара кодној речи симбола i има дужину -{2-l(i)}- што је мање од половине корака који одговара симболу -{i}-. Почетна тачка интервала се налази у доњој половини корака. Ово значи да се крајња тачка интервала налази испод врха корака. Дакле сви интервали су дисјунктни и код је префиксан.

Просечна дужина кодне речи износи:

l ¯=ip(i)l(i)=ip(i)(logp(i)+1)ip(i)(logp(i)+2)=ip(i)logp(i)+2ip(i)

Дакле

l ¯=H(Xi)+2

Елајасов Гама код

Елајасов Гама код је најпростија реализација Елајасовог кода који се користи у ситуацијама када највећа кодована вредност није позната унапред, или да би се компримовали подаци у којима се чешће појављују мале вредности него велике вредности.

Кодовање природног броја x є -{N}- = {1,2,3,…}:

  1. Број се написе у бинарном облику (да би се број написао у бинарном облику потребно је ⌊log2(x)⌋+1 цифара)
  2. Испред броја у бинарном облику се дописе -{⌊log2(x)⌋}- нула

Декодовање броја кодованог Елајасовим Гама кодом:

  1. Преброји се број, нпр -{n}-, нула на почетку речи до појаве прве јединице. Ако је -{n}-=0 онда је декодовани број -{1}-; ако је -{n≠0}-, онда декодер чита наредних -{n+1}- бита и декодује одговарајући бинарни број.

Елајасов Делта код

Елајасов Делта код– сложенији је и користи Елајасов Гама код као основу.

Кодовање природног броја x є -{N}- = {1,2,3,…}:

  1. Број се напише у бинарном облику
  2. Број -{⌊log2x⌋+1}- се напише у бинарном облику (X)
  3. Од бинарног броја добијеног у кораку 1 се одузме водећи бит и преостали бити се записују (Y)
  4. На крај бинарног броја X се дода бинарни број Y
  5. Пребројати број бита добијених под 2 и од тога броја одузети -{1}- и толико нула додати испред.

Декодовање броја кодованог Елајасовим Делта кодом

  1. Преброји се број нула док се не наиђе на прву јединицу. Нека је овај број нула - -{L}-.
  2. Прва јединица се сматра да је прва цифра броја са вредношћу 2l. Прочитамо преосталих -{L}- цифара. Нека је овај број -{N}-.
  3. Ставити -{1}- на првом месту коначног излаза. Прочитамо и додамо преосталих -{N-1}- бита

Поређење Елајасовог Гама и Елајасовог Делта кода

Нека се ова два кода користе за кодовање бројева из скупа -{{1,2,…,N}, N>>1}-.

lγ(x)=2𝐥𝐨𝐠2x+1
lδ(x)=lγ(log2x+1)+log2x=2log2(log2x+1)+1+log2x

Нека је X произвољна случајна променљива са униформном расподелом над {1,2,…,-{N}-}, и тада има ентропију

H(X)=log2Nbitssymbol

Очекивана дужина Елајасовог Гама кода износи

E[lγ(X)]=1NNx=1(2log2x+1)

Знамо да је ⌊a⌋>a-1,∀a, па следи:

E[lγ(X)]=1NNx=1(2log2x1)=2Nloglog(Nx=1x)1=2Nlog2(N!)1

Користећи чињеницу:

limnlog(t!)tlog(t)=1

можемо закључити

limNE[lγ(X)]logN2

За јако велико -{N}- очекивана дужина Елајасовог Гама кода се приближава двострукој ентропији што није оптимално.

Очекивана дужина Елајасовог Делта кода износи

E[lδ(X)]1NNx=1(2log2(log2x+1)+1+log2x)==1Nlog(Nx=1x)+2NNx=1log2(log2x+1)+11Nlog(N!)+2log2(log2N+1)+1,

како

limtlog(logt+1)log(t)=0

Знамо да за свако -{N}- важи

log2(log2x+1)log2(log2N+1)

па можемо закључити:

limNE[lδ(X)]logN=1

Овим смо показали да за јако велико -{N}- очекивана дужина Елајасовог Делта кода се приближава ентропији, и закључујемо да је делта код асимптотски оптималан.

Literatura

Шаблон:Литература-{

  • David J.C. MacKay, 2008.Information Theory,Inference,and Learning Algorithms. Cambridge University Press 2003
  • Thomas M. Cover, Joy A. Thomas, 2006. Elements of Information Theory. JOHN WILEY & SONS, INC.
  • P. Elias, Universal codeword sets and representations of the integers. IEEE Transactions on Information Theory, vol. 21, pp. 194-203 March 1975.
  • Te Sun Han, Kingo Kobayashi, 2001. Mathematics of information and coding.AMS Bookstore, 2001

}-Шаблон:Литература крај

Шаблон:Нормативна контрола