Кіріспе
Оң бүтін сандарды кодтаудың әмбебап коды. Ильяс ω кодтау немесе Ильяс омега кодтау – Питер Ильяс әзірлеген оң бүтін сандарды кодтаудың әмбебап коды. Элайстың гамма-кодтау және Элайстың дельта-кодтау сияқты, ол оң бүтін санды оның шамасының әмбебап кодтағы ретімен көрсету арқылы жұмыс істейді. Алайда, басқа екі кодтан айырмашылығы, Ильяс омега осы префиксті рекурсивті түрде кодтайды; сондықтан оларды кейде рекурсивті Ильяс кодтары деп атайды. Омега кодтамасы ең үлкен кодталған мән алдын ала белгісіз болған жағдайларда немесе кіші мәндер үлкен мәндерден әлдеқайда жиі кездесетін деректерді сығымдау үшін қолданылады. N оң бүтін санын кодтау үшін: кодтың соңына "0" белгісін қойыңыз. Егер N = 1 болса, тоқтаңыз; кодтау аяқталды. N-нің екілік өрнегін кодтың басына қойыңыз. Бұл кем дегенде екі биттен тұрады, ал бірінші біт – 1. N – енгізілген биттердің саны минус бір. Жаңа N-нің кодтауын енгізу үшін 2-қадамға оралыңыз. Ильяс омега кодталған оң бүтін санды декодтау үшін: N айнымалысынан бастаңыз, оның мәнін 1 деп белгілеңіз. Егер келесі бит "0" болса, тоқтаңыз. Декодталған сан – N. Егер келесі бит "1" болса, оны N қосымша битпен бірге оқыңыз және осы екілік санды N-нің жаңа мәні ретінде пайдаланыңыз. 2-қадамға оралыңыз.
Elias ω coding or Elias omega coding is a universal code encoding the positive integers developed by Peter Elias. Like Elias gamma coding and Elias delta coding, it works by prefixing the positive integer with a representation of its order of magnitude in a universal code. Unlike those other two codes, however, Elias omega recursively encodes that prefix; thus, they are sometimes known as recursive Elias codes. Omega coding is used in applications where the largest encoded value is not known ahead of time, or to compress data in which small values are much more frequent than large values. To encode a positive integer N:
Place a "0" at the end of the code. If N = 1, stop; encoding is complete. Prepend the binary representation of N to the beginning of the code. This will be at least two bits, the first bit of which is a 1. Let N equal the number of bits just prepended, minus one. Return to Step 2 to prepend the encoding of the new N.
To decode an Elias omega encoded positive integer:
Start with a variable N, set to a value of 1. If the next bit is a "0" then stop. The decoded number is N.
If the next bit is a "1" then read it plus N more bits, and use that binary number as the new value of N. Go back to Step 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% ұзын.
The encoding for 1 googol, 10100, is 11 1000 101001100 (15 bits of length header) followed by the 333 bit binary representation of 1 googol, which is 10010 01001001 10101101 00100101 10010100 11000011 01111100 11101011 00001011 00100111 10000100 11000100 11001110 00001011 11110011 10001010 11001110 01000000 10001110 00100001 00011010 01111100 10101010 10110010 01000011 00001000 10101000 00101110 10001111 00010000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 and a trailing 0, for a total of 349 bits. A googol to the hundredth power (1010000) is a 33,220 bit binary number. Its omega encoding is 33,243 bits long: 11 1111 1000000111000100 (22 bits), followed by 33,220 bits of the value, and a trailing 0. Under Elias delta coding, the same number is 33,250 bits long: 000000000000000 1000000111000100 (31 bits) followed by 33,219 bits of the value. The omega and delta coding are, respectively, 0.07% and 0.09% longer than the ordinary 33,220 bit binary representation of the number.
Кодтың ұзындығы
N оң бүтін санын кодтау үшін қажет биттердің саны, B(N), рекурсивті түрде анықталады: Яғни, бүтін санға арналған Элайс омега кодының ұзындығы – бұл сомадағы мүшелер саны бинарлық итерацияланған логарифммен шектеледі. Нақтырақ айтсақ, бізде кейбір үшін болады, ал кодтың ұзындығы тең. болғандықтан, бізде бар, себебі итерацияланған логарифм кез келген тұрақты үшін барлық функцияларынан баяу өседі, асимптотикалық өсу жылдамдығы -ға тең, онда сома бірден төмен түскенде тоқтатылады.
Since the iterated logarithm grows slower than all for any fixed , the asymptotic growth rate is , where the sum terminates when it drops below one.
Асимптотикалық оптималдық
Элайас омега кодтамасы – асимптотикалық түрде оптималды префикс коды. Дәлелдеу эскизі. Префикс коды Крэфт теңсіздігін қанағаттандыруы керек. Элиас омега кодтамасы үшін Крэфт теңсіздігі былай тұжырымдалады: Енді, қосынды асимптотикалық жағынан интегралға тең, соның нәтижесінде біз аламыз: Егер бөлшектің мәні белгілі бір нүктеде тоқтаса, онда интеграл дивергент болады. Бірақ, егер бөлшектің мәні белгілі бір нүктеде тоқтаса, онда интеграл конвергент болады. Элиас омега коды дивергенция мен конвергенцияның арасындағы шекарада орналасқан.
Жалпылау
Элайс омега кодтамасы нөл немесе теріс бүтін сандарды кодтамайды. Барлық теріс емес бүтін сандарды кодтаудың бір жолы – кодтау алдында 1-ді қосу және декодтаудан кейін 1-ді алу, немесе өте ұқсас Левенштейн кодтауын қолдану. Барлық бүтін сандарды кодтаудың бір жолы – кодтау алдында барлық бүтін сандарды (0, 1, 1, 2, 2, 3, 3, ...) қатаң оң бүтін сандарға (1, 2, 3, 4, 5, 6, 7, ...) сәйкестендіретін биекция құру.