Кіріспе

Сөздік кодтаушы, кейде ауыстыру кодтаушы деп те аталады, – деректерді жоғалтусыз сығыстыру алгоритмдерінің бір класы. Олар сығылмайтын мәтін мен кодтаушы сақтайтын дерек құрылымындағы ("сөздік") тізбектер жиынтығы арасындағы сәйкестіктерді іздеу арқылы жұмыс істейді. Кодтаушы мұндай сәйкестікті тапқанда, тізбектің дерек құрылымындағы орнына сілтеме қояды.

Әдістер мен қолдану

Кейбір сөздік кодтаушылар кодтау басталғанға дейін толық жолдар жиынтығы анықталатын және кодтау процесінде өзгермейтін "статикалық сөздікті" қолданады. Бұл тәсіл көбінесе кодталатын хабарлама немесе хабарламалар жиынтығы тұрақты және үлкен болған кезде қолданылады; мысалы, кітап мазмұнын PDA-ның шектеулі сақтау кеңістігінде сақтайтын қосымша әдетте мәтіннің конкордансынан статикалық сөздік жасайды, содан кейін осы сөздікті тарауларды сығыстыру үшін қолданады. Конкордансқа индекстерді көрсету үшін Хаффман кодтамасын қолданудың бұл схемасы "Хаффворд" деп аталды. Байланысты және жалпы әдіс бойынша сөздік дерек ортасынан (әртүрлі кіріс ағындарынан) алынған артық ақпараттан құрылады, содан кейін сөздік қосымша кіріс ағынын сығыстыру үшін статикалық түрде қолданылады. Мысалы, сөздік ескі ағылшын мәтіндерінен жасалып, кітапты сығыстыру үшін қолданылады. Көбінесе сөздік алдын ала белгіленген күйде басталады, бірақ мазмұны кодтау процесінде өзгеріп, кодталған деректерге негізделеді. LZ77 және LZ78 алгоритмдері осы қағида бойынша жұмыс істейді. LZ77-де "қозғалмалы терезе" деп аталатын дөңгелек буфер соңғы N байтты өңделген деректерді сақтайды. Бұл терезе сөздік ретінде қызмет етеді, соңғы N байт ішінде пайда болған әрбір іштеме сөздік жазбалары ретінде сақталады. Сөздіктің бір жазуын анықтайтын бір индекс орнына екі мән қажет: ұзындығы, сәйкес мәтіннің ұзындығын көрсетеді және ығысу (сонымен қатар арақашықтық деп аталады), сәйкес келудің жылжымалы терезеде ағымдағы мәтіннен бұрынғы ығысу байттан басталатынын көрсетеді. LZ78 сөздік құрылымын нақты қолданады; кодтау процесінің басында сөздік бос болады. Индекс мәні нөлді жолдың соңы ретінде қолданады, сондықтан сөздіктің бірінші индексі бір. Кодтау процесінің әр қадамында, егер сәйкес келмейтін болса, онда соңғы сәйкес келетін индекс (немесе нөл) және таңба сөздікке қосылады және сығылған ағынға шығарылады. Егер сәйкестік болса, жұмыс индексі сәйкестік индексіне жаңартылады және ештеңе шығарылмайды. LZW LZ78-ге ұқсас, бірақ сөздік барлық мүмкін символдарға инициализацияланған. Типтік іске асыру 8 биттік символдармен жұмыс істейді, сондықтан hex 00-ден hex FF-ге (ондық 255) дейінгі сөздік "кодтары" алдын ала анықталады. Сөздіктегі жазулар кодтық мәнге 100-ден басталады. LZ78-ден айырмашылығы, егер сәйкестік табылмаса (немесе деректер аяқталса), онда тек сөздік коды шығарылады. Бұл әлеуетті мәселені тудырады, өйткені декодер шығысы сөздіктен бір қадам қалыс қалады. Бұл мәселе қалай шешілетінін LZW-ге қараңыз. LZW-ге жасалған жетілдірілімдерге 8 биттен басқа символ өлшемін беру және сөздікті қалпына келтіру және деректердің аяқталуын көрсету үшін резервтелген кодтар кіреді.