Кіріспе
Код жүйесінің түрі. Префикс коды – жүйедегі кез келген басқа код сөзінің префиксі (бастапқы сегменті) болатын толық код сөзінің болмауын қамтамасыз ететін "префикс қасиетімен" ерекшеленетін код жүйесінің түрі. Бұл тұрақты ұзындығы бар код үшін тривиальды, сондықтан тек өзгермелі ұзындығы бар кодты қарастыру қажет. Мысалы, {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 сымсыз стандартында қолданылатын екінші синхрондау кодтары және көптеген компьютерлік микроархитектуралардың нұсқаулар жиынтығы (машина тілі) – префикс кодтары болып табылады. Префикс кодтары қателерді түзету кодтары емес. Іс жүзінде, хабарды алдымен префикс кодымен қысып, содан кейін каналдық кодтаумен (қателерді түзетуді қоса алғанда) қайтадан кодтауға болады. Кез келген бірегей түрде декодталатын кодқа сәйкес код сөздерінің ұзындығы бірдей префикс коды бар. Крэфт теңсіздігі бірегей түрде декодталатын кодта мүмкін код сөздерінің ұзындығы жиынтығын сипаттайды.
A prefix code is a type of code system distinguished by its possession of the "prefix property", which requires that there is no whole code word in the system that is a prefix (initial segment) of any other code word in the system. It is trivially true for fixed length code, so only a point of consideration in variable length code. For example, a code with code words {9, 55} has the prefix property; a code consisting of {9, 5, 59, 55} does not, because "5" is a prefix of "59" and also of "55". A prefix code is a uniquely decodable code: given a complete and accurate sequence, a receiver can identify each word without requiring a special marker between words. However, there are uniquely decodable codes that are not prefix codes; for instance, the reverse of a prefix code is still uniquely decodable (it is a suffix code), but it is not necessarily a prefix code. Prefix codes are also known as prefix free codes, prefix condition codes and instantaneous codes. Although Huffman coding is just one of many algorithms for deriving prefix codes, prefix codes are also widely referred to as "Huffman codes", even when the code was not produced by a Huffman algorithm. The term comma free code is sometimes also applied as a synonym for prefix free codes but in most mathematical books and articles (e. g.) a comma free code is used to mean a self synchronizing code, a subclass of prefix codes. Using prefix codes, a message can be transmitted as a sequence of concatenated code words, without any out of band markers or (alternatively) special markers between words to frame the words in the message. The recipient can decode the message unambiguously, by repeatedly finding and removing sequences that form valid code words. This is not generally possible with codes that lack the prefix property, for example {0, 1, 10, 11}: a receiver reading a "1" at the start of a code word would not know whether that was the complete code word "1", or merely the prefix of the code word "10" or "11"; so the string "10" could be interpreted either as a single codeword or as the concatenation of the words "1" then "0". The variable length Huffman codes, country calling codes, the country and publisher parts of ISBNs, the Secondary Synchronization Codes used in the UMTS W CDMA 3G Wireless Standard, and the instruction sets (machine language) of most computer microarchitectures are prefix codes. Prefix codes are not error correcting codes. In practice, a message might first be compressed with a prefix code, and then encoded again with channel coding (including error correction) before transmission. For any uniquely decodable code there is a prefix code that has the same code word lengths. Kraft's inequality characterizes the sets of code word lengths that are possible in a uniquely decodable code.
Техникалар
Егер кодтағы әрбір сөздің ұзындығы бірдей болса, код белгіленген ұзындықтағы код немесе блок-код деп аталады (бірақ блок-код термині арналық кодтауда белгіленген мөлшердегі қателерді түзету кодтары үшін де қолданылады). Мысалы, 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' кодындағы сөздердің ұзындығы болса, онда .