Елајасов код (Шенон-Фано-Елајасов код) је код са структуром стабла променљиве дужине који неограничено дуге низове изворних симбола кодује у неограничено дуге низове кодованих симбола. Операција кодовања има клизајућу структуру, код које, како неколико симбола уђе у кодер тако га неколико кодованих бита и напушта. Број кодованих бита на излазу из декодера након уласка једног изворног симбола је променљив и зависи од структуре низа изворних симбола.
Претпоставимо да имамо извор без меморије Xi који узима вредности из алфабета {1,2,...,L}. Претпоставимо да су вероватноће свих ових симбола строго позитивне p(i)>0, ∀i. Функција расподеле F(i) је дата са:
Модификована функција расподеле која представља суму вероватноћа свих симбола од i, и половину вероватноће симбола i може се записати као:
C обзиром да су све вероватноће позитивне, F(i)≠F(j) за i≠j можемо одредити i ако знамо модификовану функцију расподеле (директно са графика). Вредности модификоване функције расподеле се могу користити као код за i. У општем случају је Fs(i) је реалан број који може да се прикаже само са бесконачним бројем бита у његовом бинарном облику, тако да не можемо да користимо ту вредност као кодну реч.
Претпоставимо да заокружимо бинарну представу Fs(i) на бита што се може записати као:
Сад имамо:
Ако је:
Тада имамо:
Из овога следи да се број L налази у интервалу који одговара вредности i, и да довољан број бита да се опише i износи
Овако конструисани код је префиксан (ниједна кодна реч није префикс друге кодне речи) што ћемо и доказати. Претпоставимо да је кодна реч b1b2…bl. Ови битови представљају интервал
Да би код био префиксан потребно је да интервали који одговарају кодним речима буду дисјунктни. Интервал који одговара кодној речи симбола i има дужину 2-l(i) што је мање од половине корака који одговара симболу i. Почетна тачка интервала се налази у доњој половини корака. Ово значи да се крајња тачка интервала налази испод врха корака. Дакле сви интервали су дисјунктни и код је префиксан.
Елајасов Гама код је најпростија реализација Елајасовог кода који се користи у ситуацијама када највећа кодована вредност није позната унапред, или да би се компримовали подаци у којима се чешће појављују мале вредности него велике вредности.
Кодовање природног броја x є N = {1,2,3,…}:
Број се написе у бинарном облику (да би се број написао у бинарном облику потребно је ⌊log2(x)⌋+1 цифара)
Испред броја у бинарном облику се дописе ⌊log2(x)⌋ нула
Декодовање броја кодованог Елајасовим Гама кодом:
Преброји се број, нпр n, нула на почетку речи до појаве прве јединице. Ако је n=0 онда је декодовани број 1; ако је n≠0, онда декодер чита наредних n+1 бита и декодује одговарајући бинарни број.
Нека се ова два кода користе за кодовање бројева из скупа {1,2,…,N}, N>>1.
Нека је X произвољна случајна променљива са униформном расподелом над {1,2,…,N}, и тада има ентропију
Очекивана дужина Елајасовог Гама кода износи
Знамо да је ⌊⌋>-1,∀, па следи:
Користећи чињеницу:
можемо закључити
За јако велико N очекивана дужина Елајасовог Гама кода се приближава двострукој ентропији што није оптимално.
Очекивана дужина Елајасовог Делта кода износи
како
Знамо да за свако N важи
па можемо закључити:
Овим смо показали да за јако велико N очекивана дужина Елајасовог Делта кода се приближава ентропији, и закључујемо да је делта код асимптотски оптималан.