Кіріспе

PAQ – жоғалтусыз деректерді сығыстыру архивтеушілердің сериясы. Ол бірлесіп жасалған және сығылымына қатысты бірнеше өлшемде жоғары нәтижелерге қол жеткізді (бірақ жылдамдық пен жадты көп пайдалану есебінен). PAQ-тың арнайы нұсқалары Hutter Prize және Calgary Challenge байқауларында жеңіске жетті. PAQ – GNU General Public License лицензиясымен таратылатын ақысыз бағдарламалық қамтамасыз ету.

Арифметикалық кодтау

S сабы [0, 1] ауқымындағы 256 үлкен эндиандық сан x-ті білдіретін ең қысқа байт сабына қысылады, мұнда P(r < s) ≤ x < P(r ≤ s), ал P(r < s) – бұл s-пен бірдей ұзындықтағы кездейсоқ r сабының лексикографиялық жағынан s-тен кіші болу ықтималдығы. x ұзындығы Шеннон шегінен ең көп дегенде бір байтқа ұзын болуы мүмкін, яғни -log2P(r = s) бит. s сабының ұзындығы архивтің тақырыпшасында сақталады. PAQ-тағы арифметикалық кодтау әр болжау үшін x-тің бастапқыда [0, 1] төменгі және жоғарғы шектерін сақтап іске асырылады. Әр болжаудан кейін ағымдағы диапазон P(0) және P(1) пропорциясына сәйкес екіге бөлінеді, бұл s сабының алдыңғы биттерін ескере отырып, келесі битінің тиісінше 0 немесе 1 болу ықтималдығын көрсетеді. Содан кейін келесі бит жаңа диапазон ретінде тиісті субдиапазонды таңдау арқылы кодталады. x саны s сабының алдыңғы биттері белгілі болғандықтан, біт болжаулардың бірдей тізбегін жасау арқылы бастапқы s сабына дейін қысқартылады. Диапазон қысылумен бірдей бөлінеді. x кіретін бөлік жаңа диапазонға айналады, ал сәйкес бит s сабына қосылады. PAQ-та диапазонның төменгі және жоғарғы шектері 3 бөлікте көрсетіледі. Ең маңызды 256 цифры бірдей болғандықтан, оларды x-тің алдыңғы байттары ретінде жазуға болады. Келесі 4 байт жадта сақталады, бірақ алдыңғы байты әртүрлі болады. Соңғы биттер төменгі шек үшін барлық нөлдер, ал жоғарғы шек үшін барлық бірліктер деп есептеледі. Қысылу төменгі шектен тағы бір байтты жазу арқылы аяқталады.

Мәтінді алдын ала өңдеу

PAQ-тың кейбір нұсқалары, атап айтқанда PAsQDa, PAQAR (екеуі де PAQ6 туындылары) және PAQ8HP1-ден PAQ8HP8-ге дейін (PAQ8 туындылары және Hutter жүлдесінің иегерлері) мәтіндік файлдарды сыртқы сөздіктегі сөздерді іздеу арқылы алдын ала өңдейді және оларды 1-ден 3 байтқа дейінгі кодтармен алмастырады. Бұған қоса, үлкен әріптер ерекше белгімен, одан кейін кіші әріппен кодталады. PAQ8HP сериясында сөздік синтаксистік және семантикалық жағынан ұқсас сөздерді топтастыру арқылы құрылады. Бұл модельдерге сөздік кодтарының ең маңызды биттерін ғана контекст ретінде пайдалануға мүмкіндік береді.

Салыстыру

Келесі кесте – Мэтт Махонидің Үлкен мәтіндік сығыстыру сынағынан алынған үлгі. Ол 109 байттан (1 ГБ немесе 0,931 ГиБ) тұратын ағылшын Уикипедиясы мәтінінен тұратын файлды қамтиды. Бағдарлама Сығылған көлем (байт) Бастапқы көлемнен % Сығылу уақыты (нс/байт) Жады (МиБ) PAQ8HP8 133,423,109 64 639 1849 PPMd 183,976,014 880 256 bzip2 254,007,875 379 8 InfoZIP 322,649,703 104 0.1 Жоғалтусыз сығыстыру сынақтарына сілтеме жасау арқылы файлдарды сығыстыру сынақтарының тізімін қараңыз.

Тарих

Төменде PAQ алгоритмінің негізгі жетілдірілгендері келтірілген. Сонымен қатар, көптеген инкременттік жақсартулар болды, олар ескерілмеді. PAQ1 2002 жылдың 6 қаңтарында Мэтт Махони шығарды. Ол бекітілген салмақтарды қолданды және аналогты немесе сирету модельін қамтымады. PAQ1SSE/PAQ2 2003 жылдың 11 мамырында Серж Оснах шығарды. Ол болжаушы мен кодтаушының арасында Екінші Символды Бағалау (SSE) кезеңін қосу арқылы сығылуды айтарлықтай жақсартты. SSE қысқа контекст пен ағымдағы болжамды қабылдайды және кестеден жаңа болжамды шығарады. Кесте жазуы нақты бит мәнін көрсету үшін түзетіледі. 2003 жылдың 9 қазанында шыққан PAQ3N сирету модельін қосты. 2003 жылдың 15 қарашасында Мэтт Махони шығарған PAQ4 адаптивті салмақтарды қолданды. PAQ5 (18 желтоқсан 2003 ж.) және PAQ6 (30 желтоқсан 2003 ж.) – жаңа аналогты модельді қоса алғанда, шағын жақсартулар. Осы кезде PAQ ең жақсы PPM компрессорларымен бәсекелесе алды және деректерді сығыстыру қауымдастығының назарын аударды, нәтижесінде 2004 жылдың сәуір айына дейін көптеген инкременттік жақсартулар жасалды. Берто Дестасио модельдерді баптады және биттер санын есептеу кестесін өзгертті. Йохан де Бок пайдаланушы интерфейсін жақсартты. Дэвид А. Скотт арифметикалық кодтаушыны жақсартты. Фабио Буффони жылдамдықты арттырды. 2004 жылдың 20 мамыры мен 27 шілдесі аралығында Александр Ратушняк PAQAR-дың жеті нұсқасын шығарды, олар көптеген жаңа модельдерді, контекст бойынша таңдалған салмағы бар бірнеше араластырғыштарды қосу арқылы сығылуды айтарлықтай жақсартты, әр араластырғыштың шығысына SSE кезеңін қосты және Intel орындалатын файлдарын сығыстыруды жақсарту үшін алдын ала өңдегішті қосты. PAQAR 2004 жылдың соңына дейін ең жоғары рейтингте тұрған компрессор болды, бірақ бұрынғы PAQ нұсқаларына қарағанда айтарлықтай баяу болды. 2005 жылдың 18 қаңтарынан 7 ақпанына дейін Пжемыслав Скибинский PAQ6 және PAQAR негізінде PASqDa-ның төрт нұсқасын шығарды, ағылшын тіліндегі сөздік алдын ала өңдегішімен бірге. Ол Калгари корпусында ең жоғары орын алды, бірақ көптеген басқа өлшемдерде емес. 2004 жылдың 10 қаңтарында Мэтт Махонидің модификацияланған PAQ6 нұсқасы Калгари сынағында жеңіске жетті. Бұл Александр Ратушняк шығарған PAQAR-дың он келесі нұсқасымен жақсартылды. Соңғысы 2006 жылдың 5 маусымында ұсынылды, оның құрамында 589 862 байт көлемінде сығылған деректер мен бағдарламаның бастапқы коды болды. PAQ7 2005 жылдың желтоқсанында Мэтт Махони шығарды. PAQ7 – PAQ6 және оның нұсқаларының (PAQAR, PAsQDa) толық қайта жазылуы. Сығылу қатынасы PAQAR-ға ұқсас, бірақ 3 есе жылдам. Алайда, оған x86 және сөздік болмады, сондықтан ол Windows орындалатын файлдарын және PAsQDa сияқты ағылшын мәтіндік файлдарын жақсы сығымады. Ол түсті BMP, TIFF және JPEG файлдарына арналған модельдерді қамтиды, сондықтан оларды жақсы сығып алады. PAQ6-тан басты айырмашылығы – ол модельдерді біріктіру үшін градиенттік төмендеу араластырғышын емес, нейрондық желіні қолданады. Тағы бір ерекшелігі – PAQ7 Excel, Word және pdf файлдарындағы кіріктірілген jpeg және bitmap кескіндерін сығып алуға қабілетті. PAQ8A 2006 жылдың 27 қаңтарында, PAQ8C 2006 жылдың 13 ақпанында шығарылды. Бұл күтілетін PAQ8-дің эксперименталды алдын ала шығарылымы болды. Ол PAQ7-дегі бірнеше мәселелерді (кейбір жағдайларда нашар сығылу) түзетті. PAQ8A сонымен қатар (x86) орындалатын файлдарды сығыстыруға арналған модельді қамтыды. PAQ8F 2006 жылдың 28 ақпанында шығарылды. PAQ8F, PAQ8A-ға қарағанда 3 жақсартуға ие: жадыны тиімді пайдаланатын контекст моделі, сығылуды жақсарту үшін жаңа жанама контекст моделі және Windows жүйесінде сүйреп тастау мүмкіндігін қолдау үшін жаңа пайдаланушы интерфейсі. Ол PAQ8B/C/D/E нұсқалары сияқты ағылшын тілінің сөздігін қолданбайды. PAQ8G 2006 жылдың 3 наурызында Пжемыслав Скибинский шығарды. PAQ8G – бұл сөздіктер қосылған және басқа да жақсартулар енгізілген, қайта жобаланған мәтін сүзгісі (текст емес файлдардағы сығылу өнімділігін төмендетпейді). PAQ8H 2006 жылдың 22 наурызында Александр Ратушняк шығарды және 2006 жылдың 24 наурызында жаңартылды. PAQ8H PAQ8G негізінде жасалған, модельге бірнеше жақсартулар енгізілген. PAQ8I 2006 жылдың 18 тамызында Павел Л. Холобородко шығарды, 24 тамызда, 4 қыркүйекте және 13 қыркүйекте қателерді түзетті. PGM файлдарына сұр түсті кескін үлгісін қосты. PAQ8J 2006 жылдың 13 қарашасында Билл Петтис шығарды. Ол PAQ8HP5 мәтін моделінің кейбір жақсартуларымен PAQ8F негізінде жасалған. Осылайша, ол PAQ8G-дан немесе PAQ8I-ден мәтіндік сөздіктерді немесе PGM үлгісін қамтыған жоқ. Серж Оснах модельдеудің бірнеше жақсартуларын шығарды: PAQ8JA 2006 жылдың 16 қарашасында, PAQ8JB 21 қарашада және PAQ8JC 28 қарашада. PAQ8JD 2006 жылдың 30 желтоқсанында Билл Петтис шығарды. Бұл нұсқа 32 биттік Windows жүйесіне бірнеше процессорлар үшін, сондай-ақ 32 және 64 биттік Linux жүйелеріне көшірілді. PAQ8K 2007 жылдың 13 ақпанында Билл Петтис шығарды. Ол екілік файлдарға арналған қосымша модельдерді қамтиды. PAQ8L 2007 жылдың 8 наурызында Мэтт Махони шығарды. Ол PAQ8JD негізінде жасалған және DMC моделін қосады. PAQ8O 2007 жылдың 24 тамызында Андреас Морфис шығарды. PAQ8L-ге қарағанда жақсартылған BMP және JPEG модельдерін қамтиды. SSE2 қолдауымен және 64 биттік Linux үшін шартты түрде компиляциялануы мүмкін. Алгоритм 64 биттік операциялық жүйеде айқын өнімділік артықшылықтарына ие. PAQ8P 2008 жылдың 25 тамызында Андреас Морфис шығарды. Жақсартылған BMP моделін қамтиды және WAV моделін қосады. PAQ8PX 2009 жылдың 25 сәуірінде Ян Ондрус шығарды. Ол жақсы WAV сығылымы және EXE сығылымы сияқты әртүрлі жақсартуларды қамтиды. PAQ8KX 2009 жылдың 15 шілдесінде Ян Ондрус шығарды. Ол PAQ8K пен PAQ8PX комбинациясы болып табылады. PAQ8PF 2009 жылдың 9 қыркүйегінде LovePimple шығарды, бастапқы кодсыз (GPL лицензиясы талап ететін). Ол 7% нашар сығылады, бірақ PAQ8PX v66-мен өлшенгенде 7 есе жылдам. PAQ9A 2007 жылдың 31 желтоқсанында Мэтт Махони шығарды. Жаңа эксперименталды нұсқа. Ол нақты файл түрлеріне арналған модельдерді қамтымайды, LZP алдын ала өңдегішіне ие және 2 ГБ-тан асатын файлдарды қолдайды. ZPAQ 2009 жылдың 12 наурызында Мэтт Махони шығарды. Ол болашақ ZPAQ нұсқаларымен жасалған архивтерді декомпрессиялай алатындай етіп жасалған жаңа архив форматын қолданады (жоғарыда тізілген PAQ нұсқалары осылай алға қарай үйлесімді емес). Ол декомпрессия алгоритмін әрбір жасалған архив файлында сақталатын байт-код бағдарламасында көрсетеді.

Гуттер сыйлықтары

PAQ8HP1 сериясынан PAQ8HP8 сериясына дейін Александр Ратушняк 2006 жылдың 21 тамызынан 2007 жылдың 18 қаңтарына дейін Гуттер сыйлығына ұсынылған жұмыстар ретінде жариялады. Гуттер сыйлығы – бұл 100 МБ көлемдегі ағылшын және XML деректерінен тұратын, Википедия дереккөздерінен алынған мәтінді сығыстыру байқауы. PAQ8HP сериясы PAQ8H-тан туындады. Бағдарламаларға мәтінді алдын ала өңдеуге арналған сөздіктер және нақты сынаққа бейімделген модельдер кіреді. Барлық мәтіндік емес модельдер алынып тасталды. Сөздіктер синтаксистік және семантикалық жағынан байланысты сөздерді, сондай-ақ ортақ жұрнақтары бар сөздерді топтастыру үшін құрылды. Алғашқы стратегия сығылуды жақсартады, себебі байланысты сөздер (ұқсас контекстте пайда болуы мүмкін) олардың сөздік кодтарының жоғары біттеріне сәйкес модельделуі мүмкін. Екінші стратегия сөздікті оңайырақ сығылуына мүмкіндік береді. Декомпрессия бағдарламасының және сығылған сөздіктің көлемі байқау рейтингіне қосылады. 2006 жылдың 27 қазанында PAQ8HP5 адам білімін жоғалтпай сығыстыру бойынша Гуттер сыйлығының 3416 еуросын жеңіп алғаны жарияланды. 2007 жылдың 30 маусымында Ратушняктың PAQ8HP12 бағдарламасы екінші Гуттер сыйлығын, 1732 еуроны жеңіп алды, бұл оның бұрынғы көрсеткішін 3,46%-ға жақсартты.