Кіріспе

Код жүйесінің түрі. Префикс коды – жүйедегі кез келген басқа код сөзінің префиксі (бастапқы сегменті) болатын толық код сөзінің болмауын қамтамасыз ететін "префикс қасиетімен" ерекшеленетін код жүйесінің түрі. Бұл тұрақты ұзындығы бар код үшін тривиальды, сондықтан тек өзгермелі ұзындығы бар кодты қарастыру қажет. Мысалы, {9, 55} код сөздері бар кодтың префикс қасиеті бар; {9, 5, 59, 55} кодтан тұратын код жоқ, себебі "5" – "59" және "55" префиксі болып табылады. Префикс коды – бірегей түрде декодталатын код: толық және дәл тізбек берілген кезде, қабылдаушы әр сөзді сөздер арасында арнайы маркерді қажет етпей анықтай алады. Дегенмен, префикс коды емес, бірегей түрде декодталатын кодтар бар; мысалы, префикс кодтың керісі де бірегей түрде декодталады (ол суффикс коды), бірақ ол міндетті түрде префикс коды емес. Префикс кодтары префикссіз кодтар, префикс шарты бар кодтар және жылдам кодтар деп те аталады. Хаффман кодтамасы – префикс кодтарын алудың көптеген алгоритмдерінің бірі ғана, бірақ код Хаффман алгоритмімен жасалмаған жағдайда да префикс кодтары көбінесе "Хаффман кодтары" деп аталады. Коммасыз код термині кейде префикссіз кодтардың синонимі ретінде қолданылады, бірақ көптеген математикалық кітаптар мен мақалаларда (мысалы) коммасыз код – өзін-өзі синхрондау кодын, префикс кодтарының кіші класын білдіреді. Префикс кодтарын пайдалану арқылы хабарды код сөздерінің біріктірілген тізбегі ретінде, сыртқы белгілерсіз немесе (басқаша айтқанда) хабардағы сөздерді бөлу үшін сөздер арасында арнайы белгілерсіз беруге болады. Алушы хабарламаны дұрыс код сөздерін құрайтын тізбектерді қайта-қайта тауып, жою арқылы қатесіз декодтай алады. Бұл, әдетте, префикс қасиеті жоқ кодтармен мүмкін емес, мысалы {0, 1, 10, 11}: код сөзінің басында "1" дегенді оқыған қабылдаушы бұл толық код сөзі "1" ме, әлде тек "10" немесе "11" код сөзінің префиксі ме екенін білмейді; сондықтан "10" тізбегі бір код сөзі ретінде немесе "1" және "0" сөздерінің біріктірілуі ретінде түсіндірілуі мүмкін. Айналмалы ұзындығы бар Хаффман кодтары, елдік телефон кодтары, ISBN-ның елдік және баспагер бөлімдері, UMTS W-CDMA 3G сымсыз стандартында қолданылатын екінші синхрондау кодтары және көптеген компьютерлік микроархитектуралардың нұсқаулар жиынтығы (машина тілі) – префикс кодтары болып табылады. Префикс кодтары қателерді түзету кодтары емес. Іс жүзінде, хабарды алдымен префикс кодымен қысып, содан кейін каналдық кодтаумен (қателерді түзетуді қоса алғанда) қайтадан кодтауға болады. Кез келген бірегей түрде декодталатын кодқа сәйкес код сөздерінің ұзындығы бірдей префикс коды бар. Крэфт теңсіздігі бірегей түрде декодталатын кодта мүмкін код сөздерінің ұзындығы жиынтығын сипаттайды.

Техникалар

Егер кодтағы әрбір сөздің ұзындығы бірдей болса, код белгіленген ұзындықтағы код немесе блок-код деп аталады (бірақ блок-код термині арналық кодтауда белгіленген мөлшердегі қателерді түзету кодтары үшін де қолданылады). Мысалы, ISO 8859-15 әріптері әрқашан 8 биттен тұрады. UTF-32/UCS-4 әріптері әрқашан 32 биттен тұрады. ATM жасушаларының ұзындығы әрқашан 424 бит (53 байт) болады. Белгілі бір ұзындығы k бит болатын код, бастапқы символдардың санына дейін кодтай алады. Белгіленген ұзындығы бар код міндетті түрде префикс коды болып табылады. Кез келген кодты, ең ұзын префикстің ұзындығына сәйкес ету үшін, қысқа префикстерге тұрақты символдарды қосу арқылы белгіленген ұзындықтағы кодқа айналдыруға болады. Мұндай қосымша кодтар автоматты түзетуді және/немесе синхрондауды қамтамасыз ететін артық ақпаратты енгізу үшін қолданылуы мүмкін. Дегенмен, кейбір сөздердің басқаларына қарағанда берілу ықтималдығы жоғары жағдайларда, белгіленген ұзындықтағы кодтаулар тиімсіз болады. Қысқартылған екілік кодтау – белгілердің саны n екінің дәрежесі болмаған жағдайларда жұмыс істеу үшін белгіленген ұзындықтағы кодтардың тікелей жалпылануы. Көз символдарына ұзындығы k және k+1 болатын кодты сөздер беріледі, мұнда k 2k < n ≤ 2k+1 шартын қанағаттандыру үшін таңдалады. Хаффман кодтау – өзгермелі ұзындықтағы префикс кодтарын құрудың күрделі әдісі. Хаффман кодтау алгоритмі кодты сөздердің жиілігін кіріс ретінде қабылдайды және кодты сөз ұзындығының салмақты орташасын азайтатын префикс кодын құрастырады. (Бұл энтропияны азайтумен тығыз байланысты.) Бұл энтропиялық кодтауға негізделген жоғалтусыз деректерді сығу түрі. Кейбір кодтар код сөзінің соңында арнайы "үтір" символымен (сонымен қатар "Sentinel" мәні деп аталады) белгіленеді, ол қалыпты деректерден ерекшеленеді. Бұл сөйлемдегі сөздердің арасындағы бос орындарға ұқсас; олар бір сөздің аяқталып, екінші сөздің басталатынын көрсетеді. Егер әрбір код сөзі үтірмен аяқталса және үтір код сөзінің басқа бөлігінде пайда болмаса, код автоматты түрде префикссіз болады. Дегенмен, барлық таңбаны тек үтір ретінде пайдалану тиімсіз болуы мүмкін, әсіресе таңбалар саны аз тілдерде. Морзе коды – үтірлі, өзгермелі ұзындықтағы кодтың күнделікті мысалы. Әріптер мен сөздердің арасындағы ұзақ үзілістер адамдарға бір әріптің (немесе сөздің) қайда аяқталып, қайда басталатынын анықтауға көмектеседі. Сол сияқты, Фибоначчи кодтау әрбір код сөзінің соңында "11" белгісін қолданады. Өзін-өзі синхрондау кодтары – кадрлық синхрондауға мүмкіндік беретін префикс кодтары.

Қарым-қатынас ұғымдары

Суффикс коды — ешқайсысы басқа сөздің соңына (суффиксі) сай келмейтін сөздер жиынтығы; немесе, эквивалентті түрде, префикс кодының кері жиынтығы. Префикс коды сияқты, мұндай сөздердің тізбегі арқылы жасалған бір тізбектің бейнелеуі бірегей болады. Бификс коды — префикс және суффикс кодының екеуі де болатын сөздер жиынтығы. Оптималды префикс коды — ең аз орташа ұзындығы бар префикс коды. Яғни, n символдан тұратын әліпбиді қарастырайық, олардың әрқайсысының ықтималдығы бар. Егер C' тағы бір префикс коды болса және C' кодындағы сөздердің ұзындығы болса, онда .