Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ШПООООР-Сагындык.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.46 Mб
Скачать

23. Lzss алгоритмі. Алгоритмнің ұтымды жақтары және кемшіліктері.

LZSS коды таңбаланған символдан өзгеше бірбитті префикстен басталады. Таңба екі символдан тұрады: ығысу мен ұзындықтан, LZ77дегідей. LZSS-та терезе сәйкес жолдан тура ұзындығына жылжиды, немесе егер буферде сөздіктегідей сәйкес жол болмаса 1-ге жылжиды. Жол ұзындығы әрқашан нөлден көп, сондықтан жол ұзындығы үшін екілік код ұзындығы – бұл буфердің ұзындығынан көп, бүтін жаққа дөңгеленген екілік логарифмі. Айқын кемшіліктер:

1. сөздік ұзындығынан үлкен қашықтықта бір-бірінен тұрған жолдарды таңбалау мүмкін емес;

2. таңбалауға болатын жол ұзындығы буфердің мөлшерімен шектелген.

Егер сөздік пен буфердің мөлшерін өсіре берсек, онда таңбалаудың тиімділігі азаяды, яғни осы шамалар өскен сайын, ығысу мен ұзындықтың кодтар ұзындығы да өсе бастайды, ал бұл кішкентай жолдардың кодтарын өте үлкен қылады.Сонымен қатар алгоритм-кодердің жұмыс жасау уақыты көбейеді.

«Кері_кернеу» жолды таңбалау

Сөздік (8 бит)

Буфер (5бит)

таңба

ұзындық

1

2

3

4

5

6

7

8

КЕРІ_

0,К

9

К

ЕРІ_К

0,Е

9

К

Е

РІ_КЕ

0,Р

9

К

Е

Р

І_КЕР

0,І

9

К

Е

Р

І

_КЕРН

0, _

9

К

Е

Р

І

_

КЕРНЕ

3,3

7

К

Е

Р

І

_

К

Е

Р

НЕУ..

0,Н

9

Е

Р

І

_

К

Е

Р

Н

ЕУ...

0,1

7

Р

І

_

К

Е

Р

Н

Е

У....

7

Алынған таңба ұзындығы: 6*9+3*7=75 бит

24. LZ78 алгоритмі. Алгоритмнің ұтымды жақтары және кемшіліктері.

LZ77 алгоритмі 1977 ж. жарияланған. Якоб Зив жəне Авраам Лемпель ғалымдармен құрылған. Бірнеше информацияны сығу программалары LZ алгоритмнің түрлерін қолданады. LZ алгоритмнің əйгілілігі, жоғары сығу тиімділігіндегі олардың қарапайымдылығында. LZ77 негізгі ойы келесіде: мəліметтегі бір символдар жолдың үзіндігі екінші жəне келесі кірулері оның бірінші кіруінің сілтеуімен ауыстырылады. LZ77 мəліметтің қаралған бөлігін сөздік ретінде қолданады. Сығу үшін, алгоритм мəліметтің келесі үзіндігін сөздіктің ішіндегі сілтеумен ауыстыруға тырысады. LZ77 мəліметтің үстімен өтетін, екі бірдей емес бөлікке бөлінген, жылжымалы терезені қолданады. Бірінші бөлік, көп мөлшерлі, мəліметтің қаралынған бөлігінен қабылдайды. Екінші, аз мөлшерлі, буфер – мəліметтің əлі таңбаланбаған символдардан тұрады. Негізі терезенің мөлшері бірнеше килобайт, ал буфердің мөлшері – жүз байттан аспайды. Алгоритм сөздіктен (терезенің үлкен бөлігінен) буфердің ішіндегісімен сай келетін жолды іздеуді тырысады. LZ77 алгоритмі үш элементтен тұратын код шығарады: • буфердегі жол үзіндіктің басы мен, сөздіктегі жолға сəйкес келетін, оның ығысуы; • сəйкес келген жолдың ұзындығы; • жолдан кейінгі буфердегі бірінші символ.

LZ77 алгоритмнің кемшіліктері: 1. сөздіктің мөлшері өскен сайын алгоритм-кодердің жұмыс істеу жылдамдығы пропорционал азаяды; 2. жалғыз симводарды таңбалау өте тиімсіз.

Мысал. “КРАСНАЯ КРАСКА” жолды LZ77 алгоритмі бойынша таңбалау.

СӨЗДІК (8)

БУФЕР (5)

КОД

КРАСН

0,0,К

К

РАСНА

0,0,Р

КР

АСНАЯ

0,0,А

КРА

СНАЯ_

0,0,С

КРАС

НАЯ_К

0,0,Н

КРАСН

АЯ_КР

5,1,Я

КРАСНАЯ

_КРАС

0,0,_

КРАСНАЯ_

КРАСК

0,4,К

АЯ_КРАСК

А

0,0,А

Соңғы жолында “А” əріп соңғы болғандықтан, сөздіктен алынбайды.

Кодтың ұзындығы былай есептеледі: жолдың ұзындығы буфер мөлшерінен үлкен бола алмайды, ал ығысу сөздіктің мөлшерінен – 1 үлкен бола алмайды. Сондықтан, ығысудың екілік кодының ұзындығы log2(сөздіктің мөлшері) бүтін үлкен жағына қарай дөңгеленген мəніне тең, ал жолдың екілік кодының ұзындығы log2(буфердің мөлшері + 1) бүтін үлкен жағына қарай дөңгеленген мəніне тең. Ал символ 8 битпен таңбаланады (ASCII бойынша). Мысалымызда кодтың ұзындығы: 9*(3+3+8) = 126 бит, бастапқысы: 14*8 = 112 бит.

1982 ж. Сторер (Storer) жəне Шиманский (Szimanski) LZ77 негізінде LZSS алгоритммін құрды, ол LZ77 ден шыққан кодтарымен ерекшеленді. LZSS коды таңбаланбаған символдан өзгеше бірбитті префикстен басталады. Таңба екі символдан тұрады: ығысу мен ұзындық, LZ77 дегідей. LZSSта терезе сəйкес жолдын тура ұзындығана жылжиды, немесе 1, егер буферде сөздіктегідей сəйкес жол болмаса. LZSSта жолдың ұзындығы əрқашан нольден көп, сондықтан жол ұзындығы үшін екілік кодтың ұзындығы – бұл буфердің ұзындығынан көп, бүтін жаққа дөңгеленген екілік логарифмі.

LZ77 жəне LZSS алгоритмдердің айқын кемшіліктері: 1. сөздік ұзындығынан үлкен қашықтықта бір-бірінен тұрған жолдарды таңбалауды мүмкін еместігі, 2. таңбалауға болатын жолдың ұзындығы буфердің мөлшерімен шектелген. Егер сөздік пен буфердің мөлшерін өсіреберсек, онда таңбалаудың тиімділігі азаяды, яғни өсы шамалар өскен сайын, ығысу мен ұзындықтың кодтар ұзындығы да өсе бастайды, ал бұл кішкентай жолдардың кодтарын өте үлкен қылады. Тағы да алгоритм-кодердің жұмыс жасау уақыты көбейеді.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]