Кіріспе

Оң бүтін сандарды кодтаудың әмбебап коды. Ильяс ω кодтау немесе Ильяс омега кодтау – Питер Ильяс әзірлеген оң бүтін сандарды кодтаудың әмбебап коды. Элайстың гамма-кодтау және Элайстың дельта-кодтау сияқты, ол оң бүтін санды оның шамасының әмбебап кодтағы ретімен көрсету арқылы жұмыс істейді. Алайда, басқа екі кодтан айырмашылығы, Ильяс омега осы префиксті рекурсивті түрде кодтайды; сондықтан оларды кейде рекурсивті Ильяс кодтары деп атайды. Омега кодтамасы ең үлкен кодталған мән алдын ала белгісіз болған жағдайларда немесе кіші мәндер үлкен мәндерден әлдеқайда жиі кездесетін деректерді сығымдау үшін қолданылады. N оң бүтін санын кодтау үшін: кодтың соңына "0" белгісін қойыңыз. Егер N = 1 болса, тоқтаңыз; кодтау аяқталды. N-нің екілік өрнегін кодтың басына қойыңыз. Бұл кем дегенде екі биттен тұрады, ал бірінші біт – 1. N – енгізілген биттердің саны минус бір. Жаңа N-нің кодтауын енгізу үшін 2-қадамға оралыңыз. Ильяс омега кодталған оң бүтін санды декодтау үшін: N айнымалысынан бастаңыз, оның мәнін 1 деп белгілеңіз. Егер келесі бит "0" болса, тоқтаңыз. Декодталған сан – N. Егер келесі бит "1" болса, оны N қосымша битпен бірге оқыңыз және осы екілік санды N-нің жаңа мәні ретінде пайдаланыңыз. 2-қадамға оралыңыз.

Мысалдар

Омега кодтарын бірнеше "топтар" деп қарастыруға болады. Топ – кодты аяқтайтын бір 0 биті немесе 1 санынан басталатын екі немесе одан көп биттер, одан кейін басқа топ. Алғашқы бірнеше код төменде көрсетілген. Бұл кодтау ең аз мөлшердегі кодты беретін мәндердің үлестірілімін сипаттайтын, яғни ымқылдастырылған үлестірілімді қамтиды; егжей-тегжейлі мәлімет алу үшін әмбебап кодтардың практикалық сығылуға қатынасын қараңыз. Мән Код Ымқылдастырылған ықтималдық 1 0 1/2 2 10 0 1/8 3 11 0 1/8 4 10 100 0 1/64 5 10 101 0 1/64 6 10 110 0 1/64 7 10 111 0 1/64 8 11 1000 0 1/128 9 11 1001 0 1/128 10 11 1010 0 1/128 11 11 1011 0 1/128 12 11 1100 0 1/128 13 11 1101 0 1/128 14 11 1110 0 1/128 15 11 1111 0 1/128 16 10 100 10000 0 1/2048 17 10 100 10001 0 1/2048 100 10 110 1100100 0 1/8192 1000 11 1001 1111101000 0 1/131,072 10,000 11 1101 10011100010000 0 1/2,097,152 100,000 10 100 10000 11000011010100000 0 1/268,435,456 1,000,000 10 100 10011 11110100001001000000 0 1/2,147,483,648 Гуголдың жүздік дәрежесі (1010000) – бұл 33 220 биттік бинарлық сан. Омега кодтамасының ұзындығы 33,243 бит: 11 1111 1000000111000100 (22 бит), содан кейін 33,220 бит мәні және соңғы 0 болады. Элиас дельта кодтамасы бойынша, сол санның ұзындығы 33,250 бит: 000000000000000 1000000111000100 (31 бит) содан кейін 33,219 бит мәні. Омега және дельта кодтамалары санның қарапайым 33,220 биттік бинарлық бейнелеуінен сәйкесінше 0,07% және 0,09% ұзын.

Кодтың ұзындығы

N оң бүтін санын кодтау үшін қажет биттердің саны, B(N), рекурсивті түрде анықталады: Яғни, бүтін санға арналған Элайс омега кодының ұзындығы – бұл сомадағы мүшелер саны бинарлық итерацияланған логарифммен шектеледі. Нақтырақ айтсақ, бізде кейбір үшін болады, ал кодтың ұзындығы тең. болғандықтан, бізде бар, себебі итерацияланған логарифм кез келген тұрақты үшін барлық функцияларынан баяу өседі, асимптотикалық өсу жылдамдығы -ға тең, онда сома бірден төмен түскенде тоқтатылады.

Асимптотикалық оптималдық

Элайас омега кодтамасы – асимптотикалық түрде оптималды префикс коды. Дәлелдеу эскизі. Префикс коды Крэфт теңсіздігін қанағаттандыруы керек. Элиас омега кодтамасы үшін Крэфт теңсіздігі былай тұжырымдалады: Енді, қосынды асимптотикалық жағынан интегралға тең, соның нәтижесінде біз аламыз: Егер бөлшектің мәні белгілі бір нүктеде тоқтаса, онда интеграл дивергент болады. Бірақ, егер бөлшектің мәні белгілі бір нүктеде тоқтаса, онда интеграл конвергент болады. Элиас омега коды дивергенция мен конвергенцияның арасындағы шекарада орналасқан.

Жалпылау

Элайс омега кодтамасы нөл немесе теріс бүтін сандарды кодтамайды. Барлық теріс емес бүтін сандарды кодтаудың бір жолы – кодтау алдында 1-ді қосу және декодтаудан кейін 1-ді алу, немесе өте ұқсас Левенштейн кодтауын қолдану. Барлық бүтін сандарды кодтаудың бір жолы – кодтау алдында барлық бүтін сандарды (0, 1, 1, 2, 2, 3, 3, ...) қатаң оң бүтін сандарға (1, 2, 3, 4, 5, 6, 7, ...) сәйкестендіретін биекция құру.