Кіріспе

Диапазондық кодтау (немесе диапазондық енкодирование) – 1979 жылы G. Nigel N. Martin-нің 1979 жылғы мақаласында сипатталған энтропиялық кодтау әдісі, ол Ричард Кларк Паско 1976 жылы алғаш енгізген FIFO арифметикалық кодын қайта ашты. Символдар тізбегі мен олардың ықтималдықтары берілген жағдайда, диапазондық кодтаушы осы символдарды ұсыну үшін ғарышты тиімді түрде сақтайтын биттер ағынын жасайды, ал ағын мен ықтималдықтарды пайдаланып, диапазондық декодер осы процесті кері қайтарады. Диапазондық кодтау арифметикалық кодтауға өте ұқсас, бірақ кодтау биттермен емес, кез келген негіздегі сандармен жүзеге асырылады, сондықтан үлкен негіздерді (мысалы, байтты) қолданғанда сығылу тиімділігінің азаюымен бірге жылдамдық артады. Алғашқы (1978) арифметикалық кодтау патентының мерзімі біткеннен кейін, диапазондық кодтау патенттік шектеулерден бос болып көрінді. Бұл, әсіресе, ашық кодты қауымдастықта осы техникаға қызығушылықты арттырды. Одан бері әртүрлі танымал арифметикалық кодтау техникаларына да патенттердің мерзімі бітті.

Қашықтық кодтамасының жұмыс істеу тәсілі

Диапазондық кодтау хабардың барлық символдарын бір санға кодтайды, Хаффман кодтауынан өзгеше, ол әрбір символға бит үлгісін тағайындап, барлық бит үлгілерін тізбектей біріктіреді. Осылайша, диапазондық кодтау Хаффман кодтауындағы символ үшін бір биттен кем емес төменгі шекке қарағанда жоғары сығылу коэффициенттерін қол жеткізе алады және Хаффманның екінің дәрежесі емес ықтималдықтармен жұмыс істегенде туындайтын тиімсіздіктерге ұшырамайды. Диапазондық кодтаудың негізгі идеясы мынада: жеткілікті үлкен бүтін сандар диапазоны және символдардың ықтималдығын бағалау болғанда, бастапқы диапазонды олардың мөлшері олар көрсететін символдың ықтималдығына пропорционалды кіші диапазонға бөлуге болады. Содан кейін хабардың әрбір символы келесі кодталатын символға сәйкес келетін сол кіші диапазонға ағымдағы диапазонды қысқарту арқылы өз кезегінде кодталады. Декодер кодтаушы қолданған ықтималдық бағалауын дәл білуі керек, ол алдын ала жіберілуі, бұрын жіберілген деректерден шығарылуы немесе компрессор мен декомпрессордың құрамына кіруі мүмкін. Барлық символдар кодталғаннан кейін, жалпы хабарды жеткізу үшін тек кіші диапазонды анықтау жеткілікті (әрине, декодер барлық хабарды алған кезде хабарланады деп есептесек). Кіші диапазонды анықтау үшін бір бүтін сан жеткілікті, тіпті бүтін санды толығымен жіберудің қажеті де болмауы мүмкін; егер цифрлардың тізбегі болса, онда осы префикстің басталатын әрбір саны кіші диапазонға кірсе, онда кіші диапазонды анықтау үшін және осылайша хабарды жіберу үшін тек префикс қана жеткілікті.

Арифметикалық кодтаумен байланыс

Арифметикалық кодтау аралық кодтаумен бірдей, бірақ бүтін сандар бөлшектердің алымы ретінде қарастырылады. Бұл бөлшектердің ортақ белгісі бар, сондықтан барлық бөлшектер [0,1) аралығына түседі. Сәйкесінше, алынған арифметикалық кодтың басы имплицитті түрде "0" деп түсіндіріледі. Бұл екі кодтау әдісінің әртүрлі интерпретациясы болғандықтан және нәтижедегі арифметикалық және аралық кодтар бірдей болғандықтан, әр арифметикалық кодтаушы – сәйкес аралық кодтаушы, және керісінше. Яғни, арифметикалық кодтау мен аралық кодтау – бір нәрсені түсінудің екі, сәл ғана ерекшеленетін тәсілі. Бірақ практикада, аралық кодтаушылар деп аталатындар көбінесе Мартиннің мақаласында сипатталғандай іске асырылады, ал арифметикалық кодтаушылар көбінесе аралық кодтаушылар деп аталмайды. Мұндай аралық кодтаушылардың жиі аталатын ерекшелігі – бір уақытта бір бит емес, бір уақытта бір байтты нормалауға бейімділік (әдеттегідей). Басқаша айтқанда, аралық кодтаушылар биттердің орнына байттарды кодтау цифрлары ретінде пайдаланады. Бұл қол жеткізілетін сығылу мөлшерін өте аз ғана төмендетсе де, әр бит үшін нормалау орындауға қарағанда жылдам.