Uploaded by Muxtorxoja Urmanov

1-Mustaqil ish Urmanov

advertisement
0 ‘ZBEKIST0N RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR
VAZIRLIGI MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT
AXBOROT TEXNOLOGIYALARI UNIVERSITETI
Axborot va kodlash nazarryasi fanidan
1-M u staq il ish
Mavzu: Siqish algoritmi asosida ma'lumotlami siqish usullarining
samaradorligini hisoblash
Bajardi: 042-2l-guruh talabasi:
Urmanov M uxtorxo‘ja
Tekshirdi: Jabbarov Shuxrat
TOSHKENT 2024
ABAADDD-
0
Siqish a lg o r itm i a so sid a m a ’lu m o tlarni siqish u su lla rin in g sa m a r a d o r lig in i h isoblash
Lempel - Ziva algoritmlarini iboralar b o ‘yicha arxivlovchi algoritmlar deyiladi, chunka ushbu algoritmlarda
axborotdagi iboralar yoki xarflar birlashmasi uzidan olidinrok kaytarilgan xuddui shunday ibora yeki xarflar
birlashmasi bilan almashtirishga asoslangan. Iboralar b o ’yicha y o ’q otishsiz arxivlovchi algoritmlarni ayrim
adabiyotlarda jadval asosida arxivlovchi algoritmlar ham deyiladi. Ushbu algoritmlarni asoschilari Yakoba
Ziva (Jakob Ziv) va Abraxam Lempel (Abraham Lempel) xisoblanadi. Iboralar buycha arxivlovchi
algoritmlar dastlabkisi 1977 yilda paydo b o ’ldi va ushbu algoritmnig nomi LZ77 deb nomlangan.
Keyinchalik bir yildan so‘ng ushbu algoritmning modifikatsiyalangan varianti yaratildi va algoritm nomi
LZ78 deb atala boshlandi.
Masalan ushbu axborotni kodlashtirish talab qilsin "aaabbabaabaaabab". Ushbu axborotni jadval
4.1 k o ’rsatilganidek yettita mayda iboralarga (xarflar birlashmasi) b o ’lamiz. Axborotdagi har bir xarf yoki
iboralar (harflar birlashmasi) o ’zidan oldin qaytarilgan iboralar (xarflar birlashmasi) va kushuv mavjud
bo'lgan belgi bilan kodlanadi. Masalan, oxirgi uchta belgi 4 ("b") iborasi sifatida kodlshtiriladi. Jadval 4.1
LZ78 algoritmi yordamida "aaabbabaabaaabab" axborotni kodlashtirish natijalari keltirilgan.
Jadval 4.1.
Axborotni iboralarga b o ‘lish
a
aa
b
ba
baa
baaa
bab
Raqamlarga ajratish
1
2
3
4
5
6
7
Natija
(0,a)
(1-a)
(0,b)
(3,a)
(4-a)
(5-a)
(4,b)
Xozirgi kunga kelib LZ oilasiga mansub b o ‘lgan algoritmlar ichida eng samarali usullaridan biri bu LZSS
algoritmi hisoblanadi. Ushbu algoritm 1982 yilda Storer va Jimanskilar tomonidan LZ77 algoritmini
modifikatsiyalash natijasida paydo b o ’ldi. Ushbu algoritm vositasida axboroni kodlashtirilsa siqish
koeffitsientining qiymati bir necha marta katta. LZSS algoritmi vositasi axborotni kodlashtirshga misol
sifatida quyidagi N=30 ta belgilar ketm a-ketligini olamiz:
«ABAADDDDDBAABAACCCCEAFFFFDAAAA»
4.2-jadval
Siljuvchi oyna
Iboralar
J
Takror- Kod
langan
iboralar
Bufer
f
BAADDDD
0
B
AADDDDD
0
A
ADDDDDB
0
A
DDDDDBA
0
D
DDDDBAA
0
D
A
AB
ABA
ABAA
ABAAD
DDDBAAB DD 12
2
ABAADD
DBAABAA
0
D
ABAADDDD
BAABAAC BBA 1
3
8
BAACCCC BAA 1
3
3
ABAADDDDD
ABAADDDDDBAA
CCCCEAF
0
C
CCCEAFF
0
C
ABAADDDDDBAABAA
ABAADDDDDBAABAAC
CCEAFFF CC 12
2
ABAADDDDDBAABAACC
EAFFFFD
0
E
AFFFFDA
0
A
FFFFDAA
0
F
FFFDAAA
0
F
ABAADDDDDBAABAACCCC
ABAADDDDDBAABAACCCCE
ABAADDDDDBAABAACCCCEA
ABAADDDDDBAABAACCCCEAF
2
FFDAAAA FF 12
ABAADDDDDBAABAACCCCEAFFFF DAAAA
ABAADDDDDBAABAACCCCEAFFFFD AAAA AA 1
ABAADDDDDBAABAACCCCEAFFFFDA AA
f - bayroqcha;
i - takrorlangan iboraning uzunligi;
j - takrorlangan iboraning nechi qadam oldin qaytarilganligi; s - ochiq
xolatda uzatilgan belgi.
D
0
2
AA 12
13
2
Nchiq = 14*(1+8)+7*( 1+3+5) = 189 (bit)
Nkir = 30*8=240 bita.
Axborot xajmini kamaytirish natijasida olingan yutuq 240-189= 51 bit ga teng.
Siqish koeffisienti - siqish algoritmining asosiy xarakteristikasi hisoblanadi. U dastlabki siqilmagan
ma'lumotlar hajmining siqilgan ma'lumotlar hajmiga nisbati sifatida aniqlanadi, ya'ni.
bu yerda: Nkir- dastlabki ma'lumotlarning hajmi , a Nchiq- siqilgan hajmi.
Kodlangan simvolning o ’rtacha uzunligi:
Entropiya k o ’rsatkich qiymatini hisoblaymiz.
Qabul qilingan kodning ortiqchalik koeffitsientini hisoblash formulasi:
Mustaqil ishlash uchun topshiriqlar
Variant xabarlar
1
BBCCCCBBEEEEFFFFBCCEFFFFFFDDDDD
2
DFABBBEECEDDEFFFAEBBCBBBBBBC
3
CCCCCCCCCCCBBBBBAAAADDDDEEEF
4
BCDEEFAACCADEEDDDEDBAAEEEDDD
5
AAAAAAAABBAAAABBBCCCCCDDDDDEEE
6
CEDDBCEF ABBBFDDF AEBAADDDEEA AA
7
BBCBBDBBDEEFDABBDABBBBACACCEG
8
DDFEBBCAADAEFFBEGHAABFFBD
9
BBCBBB CDDEDAAADDFF GGHHEEHH
10
DDECBFFEEEAAADBBBEEEAAAAABBB
11
CAADDDAEDADDEAAEBEEBEDEFEEA
12
FFFBBCDEEAAFDFF GBBGF AD AAB FFFF
13
CEEFFDDDEBB AAAEDEDAECB AADDD
14
EEEEBBBEEEEBBCCCCDDDDFFFF AEEEE
15
GBDBBBADDABADAAAFFFEEEEBBBEE
16
BBBAAAEDDAAABBFEFFDDEEGAAAAA
17
FFFBBCDEEAAFDFF GBBGFADAAACDE
18
GFFFFBBBBAAAACCFFFFFCCDDEBAA
19
ABBCEHAB CAEGAAAAAADADDDDB CA
20
AAAAAAABBCCDDEEFF GGHHHAAAA
21
ABBBCEDDEFFFAEBBCCCCADAAABB
22
DDDDDDDDAAABBBCCCDDDEEEFFF
23
FFFBB CDEEAACCCDDDEEEFFF CDEE
24
ABBCEAABCAEAAAAAADADDDCEA
25
CAEADDDDAACADAAFFF CDEEFFF
Ma'lumotlarni yozish yoki uzatishda ko'pincha qayta ishlanayotgan ma'lumotlar hajmini kamaytirish foydali
bo'ladi. Ushbu maqsadga erishadigan texnologiya ma'lumotlarni siqish deb ataladi. Ma'lumotlarni siqishning
ko'plab usullari mavjud bo'lib, ularning har biri o'ziga xos dastur sohasiga ega, ularda u eng yaxshi yoki
aksincha, eng yomon natijalarni beradi.
Ishlash uzunligini kodlash usuli
Agar siqilishi kerak bo'lgan ma'lumotlar bir xil qiymatlarning uzun ketma-ketliklaridan iborat bo'lsa, ish uzunligini kodlash
eng yaxshi natijalarni beradi. Aslini olganda, bunday kodlash usuli aynan shunday ketma-ketliklarni ma'lum bir qatordagi
takroriy qiymat va uning takrorlanish sonini aniqlaydigan kod qiymati bilan almashtirishdan iborat. Masalan, bit ketmaketligi 253 tadan, undan keyin 118 ta noldan va yana 87 tadan iborat bo'lgan kodlangan ma'lumotni yozish uchun ushbu
458 bitning barchasini sanab o'tishdan ko'ra ancha kam joy talab qilinadi.
Misol. Seriya uzunligini kodlash usulidan foydalanib, ketma-ketlik: 111111111100000000000000000
- quyidagicha ifodalanishi mumkin: 10.
Nisbiy kodlash usuli
Ba'zi hollarda ma'lumotlar ma'lumotlar bloklaridan iborat bo'lishi mumkin, ularning har biri avvalgisidan bir oz farq qiladi.
Misol tariqasida ketma-ket video ramkalar bo'lishi mumkin. Bunday holatlar uchun nisbiy kodlash usuli qo'llaniladi. Ushbu
yondashuv ketma-ket ma'lumotlar bloklari o'rtasida mavjud bo'lgan farqlarni qayd etishni o'z ichiga oladi, bu bloklarning
o'zini qayd etish o'rniga, ya'ni. har bir blok oldingi blokga munosabati nuqtai nazaridan kodlangan.
Misol. Nisbiy kodlash usulidan foydalanib, raqamlar ketma-ketligi: 1476; 1473; 1480; 1477 - quyidagicha ifodalanishi
mumkin: 1476; -3; +7; -3.
Chastotaga bog'liq kodlash
Ma'lumotni siqishning ushbu usuli chastotaga bog'liq kodlashdan foydalanishni o'z ichiga oladi, bunda ma'lumotlar
elementini ifodalovchi bit naqshining uzunligi element ishlatilgan chastotaga teskari proportsionaldir. Bunday kodlar
o'zgaruvchan uzunlikdagi kodlar guruhiga kiritilgan, ya'ni. ushbu kodlardagi ma'lumotlar elementlari turli uzunlikdagi bit
naqshlari bilan ifodalanadi. Agar biz chastotaga bog'liq usul yordamida kodlangan inglizcha matnni oladigan bo'lsak, u
holda eng keng tarqalgan belgilar [e, t, a, i] qisqa bit birikmalari bilan, kamroq tarqalgan belgilar esa uzunroq bit
kombinatsiyalari bilan ifodalanadi. Natijada, biz Unicode yoki ASCII kabi oddiy kodlardan foydalangandan ko'ra butun
matnning qisqaroq tasvirini olamiz. Chastotaga bog'liq kodlarni loyihalashda keng qo'llaniladigan algoritmning qurilishi
Devid Xaffmanga tegishli, shuning uchun bunday kodlar ko'pincha Huffman kodlari deb ataladi. Hozirgi kunda
ishlatiladigan chastotaga bog'liq kodlarning aksariyati Huffman kodlari.
Misol. Ketma-ketlikni kodlash talab qilinsin: chastotaga bog'liq usuldan foydalanib, to'rtta a, b, g va l belgilardan iborat
bo'lgan agababababa: Bundan tashqari, bu ketma-ketlikda a 15 marta, b - 6 marta, g - 2 marta va l - 1 marta uchraydi.
Huffman usuliga muvofiq belgilarni ifodalash uchun quyidagi ikkilik kodni tanlaylik:
a- 1b
- 01 g
- 001
l - 000
Lempel-Ziv usuli
Bu usul uning yaratuvchilari Avraam Lempel va Yakob Ziv sharafiga nomlangan. Lempel-Ziv kodlash tizimlari adaptiv
lug'at kodlash texnologiyasidan foydalanadi. Shu nuqtai nazardan, lug'at atamasi siqilgan xabar tuzilgan qurilish bloklari
to'plamini anglatadi. Agar inglizcha matn siqilgan bo'lsa, qurilish bloklari alifbo belgilari bo'lishi mumkin. A gar siz
kompyuteringizda saqlanadigan ma'lumotlar hajmini kamaytirmoqchi bo'lsangiz, unda qurilish bloklari nolga va birlarga
aylanishi mumkin. Moslashuvchan lug'at kodlash jarayonida lug'at tarkibi o'zgarishi mumkin. Misol uchun, ingliz tilidagi
matnni siqishda lug'atga oxirini va maqolani qo'shish tavsiya etiladi. Bunday holda, tugatish va maqolaning kelajakdagi
nusxalari egallagan joyni uchta turli havolalar birikmasi o'rniga bitta havola sifatida yozish orqali kamaytirish mumkin.
Lempel-Ziv kodlash tizimlari kodlash yoki siqish paytida lug'atni moslashtirishning murakkab va yuqori samarali
usullaridan foydalanadi. Xususan, kodlash jarayonining istalgan nuqtasida lug'at allaqachon kodlangan [siqilgan]
kombinatsiyalardan iborat bo'ladi.
Misol sifatida, LZ77 deb nomlanuvchi ma'lum bir Lempel-Ziv tizimi yordamida xabarlarni siqishni qanday amalga
oshirishingiz mumkinligini ko'rib chiqing. Jarayon amalda xabarning boshlang'ich qismini qayta yozishdan boshlanadi,
ammo ma'lum bir vaqtda, har biri ikkita butun sondan keyin matnning bitta belgisidan iborat bo'lgan uchlik yordamida
kelajakdagi segmentlarni ko'rsatishga o'tish amalga oshiriladi. Har bir uchlik xabarning keyingi qismi qanday
tuzilganligini tasvirlaydi. Masalan, ochilmagan matn quyidagicha ko'rinadi deylik:
араарлр
Ababa satri allaqachon xabarning ochilmagan qismidir. Xabarning qolgan qismini ochish uchun, avvalo, unda mavjud
bo'lgan qismni biriktirib, chiziqni kengaytirishingiz kerak. Uchlikdagi birinchi raqam qo'shilgan segmentning birinchi
belgisini topish uchun qatorda qancha belgilarni orqaga qarab sanash kerakligini ko'rsatadi. Bunday holda, qarama-qarshi
yo'nalishda 5 ta belgini hisoblash kerak va biz allaqachon ochilgan satrning chap tomonidagi ikkinchi a belgisiga o'tamiz.
Uchlikdagi ikkinchi raqam qo'shilgan segmentni tashkil etuvchi bosh harfning o'ng tomonidagi ketma-ket belgilar sonini
bildiradi. Bizning misolimizda bu raqam 4 ga teng, ya'ni qo'shilgan segment aab bo'ladi. Uni satr oxirigacha ko'chiring va
xabarning ochilmagan qismining yangi qiymatini oling: ababab.
Nihoyat, oxirgi element [bizning holatda, bu a belgisi] kengaytirilgan qatorning oxiriga joylashtirilishi kerak, buning
natijasida biz to'liq ochilmagan xabarni olamiz: ababababa.
Tasvirlarni siqish
Zamonaviy raqamli tasvir konvertorlarida ishlatiladigan bitmap formati tasvirlarni piksel boshiga uch bayt formatda
kodlaydi, bu esa bitmap fayllari bilan ishlash uchun noqulay, noqulay yaratishga olib keladi. Ko'pgina siqish sxemalari
ushbu format uchun maxsus ishlab chiqilgan bo'lib, ular diskdagi bunday fayllar egallagan joyni qisqartirish uchun
mo'ljallangan. Shunday sxemalardan biri CompuServe tomonidan ishlab chiqilgan GIF. Unda ishlatiladigan usul
pikselning rang soyalari sonini 256 tagacha kamaytirishdan iborat bo'lib, buning natijasida har bir pikselning rangi uchta
o'rniga bir bayt bilan ifodalanishi mumkin. Ranglar palitrasi deb ataladigan jadvaldan foydalanib, har
bir haqiqiy piksel ranglari qizil-yashil-ko'k ranglaming bir nechta kombinatsiyasi bilan bog'langan. Amaldagi palitrani
o'zgartirish orqali siz tasvirda ko'rinadigan ranglarni o'zgartirishingiz mumkin.
Odatda, GIF palitrasidagi ranglardan biri "shaffoflik" ma'nosida talqin qilinadi. Bu shuni anglatadiki, tasvirning ushbu rang
bilan to'ldirilgan joylarida u joylashgan fonning rangi ko'rsatiladi. Bu va tasvirlardan foydalanishning nisbatan qulayligi
tufayli GIF formati o'sha kompyuter o'yinlarida keng tarqaldi, bu erda ko'plab turli xil rasmlar ekran bo'ylab harakatlanadi.
Rasmni siqish tizimining yana bir misoli JPEG formatidir. Bu ISO tashkiloti doirasida qo'shma fotosuratlar bo'yicha
ekspertlar guruhi [shuning uchun bu standartning nomi] tomonidan ishlab chiqilgan standartdir. JPEG formati rangli
fotosuratlarni taqdim etishning samarali usuli ekanligini isbotladi. Aynan shuning uchun ushbu standart zamonaviy raqamli
kameralar ishlab chiqaruvchilari tomonidan qo'llaniladi. Kelajakda raqamli tasvir sanoatiga sezilarli ta'sir ko'rsatishi
kutilmoqda.
Aslida, JPEG standarti tasvirni aks ettirishning bir necha usullarini o'z ichiga oladi, ularning har biri o'z maqsadiga ega.
Misol uchun, tasvirning maksimal aniqligi talab qilinganda, JPEG formati "yo'qotishsiz" rejimni taklif qiladi, uning nomi
to'g'ridan-to'g'ri tasvirni kodlash jarayoni hech qanday ma'lumot yo'qotmasdan bajarilishini ko'rsatadi. Ushbu rejimda bo'sh
joy har bir pikselning yorqinligini alohida emas, balki ketma-ket piksellar orasidagi farqlarni saqlash orqali saqlanadi.
Nazariyaga ko'ra, aksariyat hollarda qo'shni piksellar orasidagi farq darajasini alohida piksellarning haqiqiy yorqinligi
qiymatlariga qaraganda qisqaroq bit naqshlarida kodlash mumkin. Mavjud farqlar o'zgaruvchan uzunlikdagi kod
yordamida kodlangan bo'lib, u xotiradan foydalanishni yanada kamaytirish uchun ishlatiladi.
Afsuski, "yo'qotishsiz" rejimdan foydalanganda, yaratilgan rastr tasvir fayllari juda katta bo'lib, ularni zamonaviy
texnologiyalar yordamida qayta ishlash qiyin va shuning uchun amalda kam qo'llaniladi. Ko'pgina mavjud ilovalar JPEG
formatining boshqa standart usulidan foydalanadi - asosiy rejim. Ushbu rejimda piksellarning har biri uchta komponent
bilan ifodalanadi, ammo bu holda u allaqachon bitta yorqinlik komponenti va ikkita rang komponentidir. Taxminan
aytganda, agar biz faqat yorug'lik komponentlaridan tasvir yaratadigan bo'lsak, unda biz tasvirning qora va oq versiyasini
ko'ramiz, chunki bu komponentlar faqat pikselning yorug'lik darajasini aks ettiradi.
Rang va yorqinlik o'rtasidagi bu farqning mantiqiy sababi shundaki, inson ko'zining yorqinligi o'zgarishiga ranglardan
ko'ra ko'proq sezgir. Misol uchun, ikkita bir xil rangdagi ko'k to'rtburchaklarni ko'rib chiqaylik, ulardan birida kichik
yorqin nuqta bo'lsa, ikkinchisida ko'k fon bilan bir xil yorqinlikdagi kichik yashil nuqta bor. K o'z uchun yashil rangni
emas, balki yorqin nuqtani aniqlash osonroq bo'ladi. JPEG standartining asosiy rejimi har bir pikselning yorqinlik
komponentini kodlash, lekin to ‘rt pikselli bloklar uchun rang komponentlarini o‘rtacha hisoblash va faqat shu bloklar
uchun rang komponentlarini yozish orqali ushbu xususiyatdan foydalanadi. Natijada, yakuniy tasvir taqdimoti
yorqinligidagi keskin o'zgarishlarni saqlab qoladi, lekin keskin rang o'zgarishlarini loyqa qoldiradi. Ushbu sxemaning
afzalligi shundaki, to'rt pikselli har bir blok uchta qiymatdan iborat sxemadan foydalanganda talab qilinadigan o'n ikkita
emas, balki faqat oltita qiymat bilan ifodalanadi [yorqinlik uchun to'rtta qiymat va ranglar uchun ikkitasi] piksel boshiga.
Kitobdan Kompyuter 100. Windows Vista bilan ishlashni boshlash m uallif Zozulya Yuriy
NTFS fayllarini siqish NTFS fayl tizimi bilan bo'limlardan foydalanganda fayllami siqish uchun uning imkoniyatlaridan
foydalanishingiz mumkin. Bu ZIP yoki RAR arxivlarini ishlatishdan ko'ra zaifroq siqilishga olib keladi, lekin bu juda
tezdir. NTFS bilan siqilgan fayllar
Sound Forge 9 kitobidan m uallif Kvint Igor
Ovozni siqish WAVE formati asl analog signalning ma'lumotlarini juda aniq saqlaydi, lekin ishg'ol qilingan ma'lumotlar
miqdori jihatidan juda isrof qiladi. Biroq, bu format audio ma'lumotlarni dastlabki yozib olish uchun afzallik beriladi
Microsoft Windows SharePoint Services 3.0 kitobidan. Rus versiyasi. 9-16-boblar m uallif Olga Londer
Access 2007 ma'lumotlar bazasidan SharePoint ro'yxatiga ma'lumotlarni eksport qilish Access 2007 sizga jadval yoki
boshqa ma'lumotlar bazasi ob'ektini tashqi fayl, dBase yoki Paradox ma'lumotlar bazasi, Lotus fayl 1 -2-3, Excel 2007 ishchi
kitobi kabi turli formatlarda eksport qilish imkonini beradi.
, Word fayli 2007 RTF, Matn fayli, XML hujjati
Referat, kurs ishi, kompyuterda diplom kitobidan m uallif Balovsyak Nadejda Vasilevna Grafik fayl formatlari. Tasvirni
siqish Photoshop-da tasvirlar bilan ishlashda siz faylni bir nechta tasvir formatlaridan birida saqlashingiz mumkin.
Ulardan eng ommaboplari JPEG, TIFF va PSD.JPEG eng kichigi bilan eng kichik faylni yaratish imkonini beruvchi
formatdir.
Kompyuterda ishlash bo'yicha eng yangi qo'llanma kitobidan m uallif Beluntsov Valeriy Qattiq diskda saqlamoqchi
bo'lgan kamdan-kam ishlatadigan ma'lumotlar fayllarini siqish, ular kamroq joy egallashi uchun siqilgan bo'lishi kerak.
Ma'lumotlar fayllarini siqish, agar ular normal ko'rinishdagi biron bir vositaga mos kelmasa, talab qilinishi mumkin.
TCP / IP arxitekturasi, protokollari, amalga oshirish kitobidan (shu jumladan IP-versiya 6 va IP xavfsizligi) tomonidan
Faith Sidney M
4.7.1 PPPda siqish Har bir kadrga bir xil manzil va boshqaruv oktetlarini kiritish unchalik mantiqiy bo'lmasligi mumkin.
PPP havolasining har bir uchidagi sheriklar ushbu maydonlarni istisno qilish uchun siqish rejimida ishlashi mumkin.
Protokol maydonidagi qiymatlar
Ruby-da dasturlash kitobidan [Til mafkurasi, qo'llash nazariyasi va amaliyoti] Fulton Hal tomonidan “Dasturchilar uchun
tadqiqotlar” kitobidan [tugallanmagan, 1-24-boblar] Weatherrell Charlz tomonidan
11. Kamroq nusxa ko'chirish - kamroq bema'nilik yoki matn va fayllarni siqishning ortiqchaligi Hamma biladi, ko'pchilik
odamlar haddan tashqari batafsil gapiradilar. Hatto eng lakonik bayonotlar ham sezilarli darajada qisqartirilishi
mumkinligi kamroq ma'lum. Umuman olganda, tabiiy
Macromedia Flash Professional 8. Grafika va animatsiya kitobidan m uallif Dronov V.A.
Flash video siqish. On2 VP6 va Sorenson Spark kodeklari 1-bobda biz video haqida gaplashdik. Keling, biz allaqachon
o'rgangan va, ehtimol, allaqachon unutgan narsalarni qisqacha takrorlaymiz.Demak, faylda saqlanadigan video
ma'lumotlar deyarli har doim siqiladi. Aks holda, u ishlamaydi: ma'lumotlarni o'z ichiga olgan
Delphida asosiy algoritmlar va ma'lumotlar tuzilmalari kitobidan m uallif Baknel Julian M.
11-bob. Ma'lumotlami siqish. Ma'lumotlar haqida o'ylaganimizda, biz odatda ushbu ma'lumotlar orqali uzatiladigan
ma'lumotlardan boshqa hech narsani o'ylamaymiz: mijozlar ro'yxati, audio CDdagi kuy, xat va boshqalar. Qoida tariqasida,
biz ma'lumotlarning jismoniy ko'rinishi haqida ko'p o'ylamaymiz.
Kompyuter tovushini qayta ishlash kitobidan m uallif Zagumennov Aleksandr Petrovich M a'lumotlami siqish Biz
ma'lumotlar haqida o'ylaganimizda, biz odatda ushbu ma'lumotlar orqali uzatiladigan ma'lumotlardan boshqa hech narsani
o'ylamaymiz: mijozlar ro'yxati, audio CDdagi musiqa, xat va boshqalar. Qoida tariqasida, biz ma'lumotlarning jismoniy
ko'rinishi haqida ko'p o'ylamaymiz. G'amxo'rlik qilish
Raqamli fotosuratlar kitobidan. Fokuslar va effektlar m uallif Gurskiy Yuriy Anatolievich Minimal ortiqcha siqish Endi
bizda bit oqimi sinfi mavjud bo'lib, biz ma'lumotlami siqish va tiklash algoritmlarini ko'rib chiqishda foydalanishimiz
mumkin. Biz eng kam ortiqcha kodlash algoritmlarini o'rganishdan boshlaymiz va keyin
Muallifning kitobidan
Lug'atni siqish 1977 yilgacha siqish algoritmlari sohasidagi asosiy sa'y-harakatlar Shannon-Fano yoki Huffman
algoritmlari kabi minimal ortiqcha kodlash algoritmlariga qaratilgan bo'lib, ulardan biriga bag'ishlangan edi.
Muallifning kitobidan Muallifning kitobidan
Ma'lumotlami siqish Har qanday ideal siqish usuli sifatni sezilarli darajada yo'qotishiga yo'l qo'ymasligi kerak, ya'ni
ma'lumotlar miqdorini kamaytirish ma'lumotlarning yo'qolishiga olib kelmasligi kerak. Bu shuni anglatadiki, audio
signaldagi barcha o'zgarishlar eshitiladigan chegaradan past bo'lishi kerak. Bu ayniqsa muhim
Muallifning kitobidan
3.2. Fayl o'lchamlari va siqish Nega tasvirni siqishingiz kerak Olti megapikselli kamera bilan olingan rasm 18 MB xotirani
egallashi kerak. Agar tasvir xotiraga ushbu shaklda yozilgan bo'lsa, u holda hatto katta hajmdagi saqlash moslamasi ham
sig'ishi mumkin
Ma'lumotlarni siqish Mixail Svarichevskiy
Ma'lumotlami siqish (siqish) ularni kamroq joy egallagan shaklga aylantirish deb ataladi. Ushbu shaklda ma'lumotlarni
saqlash osonroq (saqlash moslamalari rezina emas, axir) va o'tkazish qobiliyati cheklangan kanallar orqali uzatish ancha
yoqimli.
Barcha siqish algoritmlari ikki turga bo'linadi: yo'qotishli va yo'qotishsiz.
Yo'qotilgan siqish sizga ancha yuqori siqish nisbatiga erishish imkonini beradi (asl hajmning 1/30 qismigacha yoki undan
kamroq).
Masalan, ochilmagan holda 30 gigabaytni egallagan videofilm 1 kompakt diskga yozilishi mumkin. Biroq, yo'qotilgan
siqish algoritmlari ma'lumotlarning o'zida ba'zi o'zgarishlarga olib keladi; shuning
uchun bunday algoritmlar faqat kichik buzilishlar ahamiyatsiz bo'lgan ma'lumotlarga nisbatan qo'llanilishi mumkin:
video, foto tasvirlar (JPEG algoritmlari), ovoz (MP3 algoritmi).
Yo'qotmasdan siqish, albatta, unchalik samarali emas (uning darajasi aniq ma'lumotlarga bog'liq), ammo o'rashdan keyin
olingan ma'lumotlar asl nusxa bilan mutlaqo bir xil. Bu juda zarur, masalan, matnli ma'lumotlar, dastur kodi uchun. Ushbu
maqola yo'qotishsiz siqilishga qaratilgan.
Ko'pgina yo'qotishsiz siqish algoritmlari ikki guruhga bo'linadi: birinchisi, u yoki bu shakldagi manba fayl qismlaridan
matn tuzadi (lug'at usullari); ikkinchisi (statistik usullar) faylda turli belgilar yoki belgilar guruhlari turli ehtimollikl arga
ega bo‘lishidan foydalanadi (masalan, matnli fayllardagi “a” harfi “b ” ga qaraganda tez-tez uchraydi).
Lug'at usullari
Lug'at usullari yuqori siqish / dekompressiya tezligi bilan tavsiflanadi, lekin biroz yomonroq siqish. So'z - bu belgilar
ketma-ketligi. Umuman olganda, biz, albatta, belgilar haqida emas, balki baytlar haqida gapiramiz; lekin soddalik uchun
misollar ASCII belgilaridan foydalanadi.
Lug'at bir qancha so'zlarni o'z ichiga oladi (odatda 2x; masalan, 4096).
Siqish lug'atdagi so'z raqami odatda so'zning o'zidan ancha qisqa bo'lishi tufayli erishiladi.
Lug'atni siqish algoritmlari ikki guruhga bo'linadi:
1) aniq lug'atdan foydalanish (algoritmlar LZ78, LZW, LZC, LZT, LZMV, LZJ, LZFG)
Masalan, lug'atga ko'ra
1. "Ko'pchilik"
2. "siqilish"
3. "siz"
4. "yo'qotish"
5. "algoritmlar"
"Eng yo'qotishsiz siqish algoritmlari" matni "15234" ga siqiladi.
2) raqam so'zi o'rniga - joriy holatga nisbatan pozitsiyani va takrorlanuvchi qismning uzunligini ko'rsatish (LZ77, LZR,
LZSS, LZB, LZH algoritmlari)
Masalan, "ababbababbabwgbbbabw" matni "05ababb5504abvg65" ga qisqaradi, bu erda:
"05ababb" - 0 pozitsiyasi keyingi 5 ta belgi siqilmaganligini bildiradi.
"55" - hozirgi holatdan 5 belgi orqaga o'rnatilgan joydan 5 ta harf.
"04abvg" - yana 4 ta belgi siqilmagan.
"65" - 5 ta joydan 6 ta belgi joriy joydan.
LZ algoritmlarining modifikatsiyalari faqat lug'atni ifodalash, so'zlarni qidirish va qo'shish usullari bilan farqlanadi.
Ba'zilar tezroq siqib chiqadi, lekin yomonroq; boshqalar ko'proq xotira talab qiladi.
Keling, o'zgartirilgan LZ77 algoritmini batafsil ko'rib chiqaylik.
Arxiv quyidagi shakldagi yozuvlardan iborat bo'ladi:
(n, m) - m uzunlikdagi bir xil qator joriy pozitsiyadan boshlab n pozitsiyasidan boshlanishini bildiradi. (0, m, "m belgi")
- siqilib bo'lmaydigan yana m ta belgi kelishini bildiradi.
Siqish algoritmi quyidagicha bo'ladi: biz faylda eng uzun ketma-ketlik ketadigan joyni qidiramiz, bu joriy baytdan
boshlanadigan ketma-ketlikka to'g'ri keladi. Agar uning uzunligi 3 dan ortiq bo'lsa, biz arxivga ketma-ketlikning
boshlanishi va uzunligini yozamiz; aks holda biz 0 ni, ketma-ketlikning uzunligini va siqilmagan belgilarning o'zini
yozamiz. Paketni ochish yanada osonroq: arxiv fayli tugaguncha biz 2 ta raqamni (n, m) o'qiymiz. Agar n = 0 bo'lsa,
arxivdan m simvol darhol buferga joylashtiriladi (bizga bu belgilar hali ham kerak) va chiqish fayliga yoziladi. Agar
n<>0 dan keyin n pozitsiyadagi buferdan m elementni buferga va chiqish fayliga ko'chiring.
Biroq, ikkita muammo bor:
1) Cheklangan bufer hajmi: agar biz 100 MB hajmdagi faylni siqishimiz kerak bo'lsa, biz uni hech qanday tarzda buferga
joylashtirmaymiz. Shuning uchun, u to'lganida (aytaylik, 75%), undagi ma'lumotlarni boshiga o'tkazishingiz kerak bo'ladi
(masalan, 25%; albatta, eng qadimgi belgilar yo'qoladi). Bu siqishni pasaytiradi, lekin algoritmni xotirani kamroq talab
qiladi.
2) Siqish dasturining tezligi juda sekin. Haqiqatan ham, agar biz 10 KB faylni siqishimiz kerak bo'lsa, bu bizdan kamida
10 000 * 10 000 / 2 operatsiyani bajarishimizni talab qiladi (biz mos keladigan keyingi ketma-ketlikni 10 000 marta
izlashimiz kerak va har bir bunday qidiruv o'rtacha 10 000/2 oladi. operatsiyalar). Qidiruv operatsiyasini tezlashtirish
uchun chr (0), chr (2) ... chr (255) belgilaridan boshlanadigan ketma-ketliklarning joylashuv raqamlarini alohida massivda
saqlashingiz mumkin. Keyin, qidiruvda biz faqat birinchi harfi kerakli ketma-ketlikning birinchi harfiga to'g'ri keladigan
kombinatsiyalarni tekshirishimiz kerak.
Statistik usullar
Statistik usullar lug'at usullariga qaraganda ancha sekinroq, lekin kuchliroq siqilishga erishadi.
Ularda har bir harf qandaydir kod bilan almashtiriladi. Kod - bu belgini noyob tarzda aniqlaydigan bir necha bit. Statistik
usullar eng keng tarqalgan belgilarni qisqaroq kodlarga moslashtirish uchun turli usullardan foydalanadi. Harflarni paydo
bo'lish chastotasiga qarab kodlashning ikkita asosiy algoritmi mavjud:
1) Huffman kodlari: barcha belgilar bitlarning butun soni bilan kodlangan; va shuning uchun dekodlash har doim bir
ma'noli bo'ladi (masalan, agar "a" harfi "1001" bit ketma-ketligiga va "b" - "10010" ga to'g'ri kelsa, dekodlash noaniq
bo'ladi). Afzallik - yuqori siqish tezligi. Kamchiliklari - suboptimal siqilish, adaptiv variantni amalga oshirishdagi
qiyinchiliklar. So'nggi paytlardan beri haqiqiy kodlash algoritmining tezligi tobora kichikroq rol o'ynadi (statistik
ma'lumotlarni to'plash algoritmlari sekinroq va sekinroq ishlaydi va hatto kodlovchining ish vaqtining 2 baravar oshishi
ham tezlikka deyarli ta'sir qilmaydi), bu algoritm arifmetik kodlashdan sezilarli afzalliklarga ega emas. ...
2) Arifmetik kodlash: har bir belgi uchun segmentdagi bo'shliq aniqlanadi va ushbu segmentning kengligiga qarab,
nisbatan, hatto kasrli bitlarning har xil soni ajratilishi mumkin (masalan: "a" qatori bo'lsin. 0 ga to'g'ri keladi va "ab"
qatori - 1, keyin "aba" qatori 2 bitda kodlanadi, ya'ni har bir belgi uchun o'rtacha 2/3 bit). Bu usul statistik ma'lumotlardan
aniqroq foydalanadi va har doim Huffman algoritmi kabi siqiladi, lekin sekinroq. Afzalliklar - maksimal nazariy erishilgan
siqish nisbati, adaptiv versiyani oddiy amalga oshirish. Kamchiliklari - biroz past tezlik.
Arifmetik kodlash qanday ishlaydi:
Masalan, biz "a", "b" - va "c" - belgilariga bo'sh joy qo'ydik. Keyin, agar bizda 0,4 raqami bo'lsa, unda "b" harfi
kodlangan deb aytishimiz mumkin (0,3).<=0.4<=0.6), а если 0.9 - то c(0.6<=0.9<=1). Итак, у нас получилось
закодировать 1 букву в число. Как же закодировать 2 буквы? Очень просто: например, если первая буква - "b", то
интервал равен . Разделим этот интервал на части, в отношении наших первоначальных отрезков. Тогда 2 -м
буквам "ba" будет соответствовать интервал , "bb" - и "bc" - . Для раскодирования нам достаточно знать любое
число из этого интервала.
Keling, dekodlashga harakat qilaylik: 0,15 raqami berilsin. Bu raqam "a" harfi oralig'iga to'g'ri keladi, ya'ni birinchi
kodlangan harf "a". Ikkinchi harfni bilish uchun siz raqamni emas, balki intervaldagi harfni ko'rsatishi uchun
aylantirishingiz kerak. Buni amalga oshirish uchun raqamdan boshlang'ich intervalning pastki chegarasini (0) olib
tashlang va uni intervalning kengligiga (0,3-0 = 0,3) bo'ling. Biz yangi raqamni olamiz (0,15-0) /0,3 = 0,5. Xuddi shu
qadamlarni takrorlash orqali biz ikkinchi harfning "b" ekanligini bilib olamiz. Agar 3 yoki undan ortiq harflar kodlangan
bo'lsa, bu jarayonni ko'p marta takrorlab, biz barcha harflarni topamiz.
Nima uchun raqamlarni ko'rsatish ma'lumotlarni siqish imkonini beradi:
Ko'proq ehtimoliy belgilar kengroq intervalga to'g'ri keladi va bunday harfni kodlashdan keyin interval unchalik
kamaymaydi, shuning uchun bu oraliqdagi istalgan raqamni ifodalash uchun biroz ko'proq bit kerak bo'ladi.
Siqish algoritmi:
Har bir belgi uchun biz ma'lumotlardagi chastotaga (uchrashuv ehtimoli) mos ravishda tegishli intervalni belgilashimiz
kerak: "a" belgisi 0,4 ehtimolga ega bo'lsin, "b" - 0,3 va "c" - shuningdek, 0,3; keyin belgi "a" bir interval mos bo'ladi, "b"
-, "c" -. Ya'ni, biz mavjud bo'lgan bo'shliqni barcha kerakli harflar o'rtasida ularning uchrashish ehtimoliga qarab
ajratamiz (ko'proq ehtimoliy belgi kattaroq bo'shliqqa to'g'ri keladi).
Siqish jarayonida bizda 2 ta chegara bor: yuqori va pastki, keling, ularni mos ravishda salom va lo deb ataymiz. Faraz
qilaylik, biz bo'shliqni belgilagan belgini kodlashimiz kerak. Keyin belgi bo'shlig'i bizning bo'shliqqa "qo'shiladi" va
mana kiritilgan bo'shliqning pastki chegarasiga, salom - yuqoriga teng bo'ladi. Natijada, kodlash davom etar ekan, lo va hi
o'rtasidagi bo'shliq torayib boradi. Nihoyat, biz barcha ma'lumotlarni kodlab bo'lgach, natijada olingan intervaldan
istalgan raqamni tanlaymiz va chop etamiz. Bu siqilgan ma'lumotlar bo'ladi.
Paketdan chiqarish:
Keling, belgilar uchun, shuningdek, siqish uchun bo'shliqlarni tuzamiz. Raqam-arxiv oraliqda tushadigan belgi
ma'lumotlarning birinchi belgisidir. Biz belgi oralig'ini arxiv raqami bilan birga oraliqgacha "cho'zamiz" (ya'ni, biz yangi
dekodlangan belgi oralig'ining pastki chegarasini ayirib, ushbu oraliqning kengligiga bo'lamiz), so'ngra operatsiyani
takrorlang. hamma narsa dekodlangan.
Muammolar:
Agar hamma narsa juda oddiy bo'lsa ... Aslida, arxiv raqamini saqlash uchun sizga juda yuqori aniqlik kerak bo'ladi
(o'nlab va yuz minglab belgilar), shuning uchun amalda siz oddiy ma'lumotlar turlaridan foydalanishingiz kerak. Bunga
erishish uchun biz arxiv raqamining eng muhim bitlarini / raqamlarini ko'rib chiqamiz. Ular salom va ma'noga mos kelishi
bilan biz ularni darhol arxivga yozib,
"kesib" olamiz. Paketni ochishda, aksincha, biz intervalni bir necha marta kengaytirganimizni ko'rganimizda, biz arxiv
faylidan bir nechta raqamlarni hisoblaymiz va ularni arxiv raqamimizning oxiriga qo'shamiz.
Ko'pincha arifmetik kodlashning modifikatsiyasi qo'llaniladi - range coder. Asosiy farq dastlabki interval -. Bu sizga
ma'lumotlarni zudlik bilan bayt bo'yicha chiqarishga imkon beradi va ish tezligida aks etadi. Maqolaning oxirida ushbu
alohida variantni amalga oshirish berilgan.
Belgilarning ehtimolliklarini aniqlash
Tezlik va siqish nisbatiga ta'sir qiluvchi asosiy jarayon - bu belgilarning ehtimolliklarini aniqlash. Eng oddiy holatda, biz
belgining ehtimolini ko'rib chiqamiz - uning allaqachon kodlangan ma'lumotlar qismida paydo bo'lish soni,
ma'lumotlardagi belgilarning umumiy soniga bo'linadi. Matnlar uchun bu taxminan 2x siqishni beradi. Uni oshirish uchun,
masalan, "u" dan keyin "i" belgisi bilan uchrashish ehtimoli deyarli 0 ga, "c" dan keyin "o" ning taxminan 0,25 ga teng
ekanligi kabi faktlarni hisobga olishingiz mumkin. Shuning uchun, har bir oldingi belgi uchun biz ehtimolliklarni alohida
hisoblaymiz. Siqilish uchun ma'lumotlar haqida biz qiladigan taxminlar (masalan, ehtimollikning oldingi belgilarga
bog'liqligi) ehtimollik modeli deb ataladi. Ehtimollar oldingi belgilarga bog'liq bo'lmagan model 0- tartibli model deb
ataladi. Agar ehtimolliklar oldingi belgining 1 tasiga bog'liq bo'lsa, bu 1 -tartibning modeli, agar oxirgi 2-dan bo'lsa,
ikkinchisi va hokazo. Yuqori tartibli modellarda belgilarning ehtimolliklarini samarali hisoblash uchun maxsus
algoritmlar guruhi - PPM va uning modifikatsiyalari mavjud.
Modellar moslashtirilmaydigan, yarim moslashuvchi va moslashuvchan bo'lishi mumkin. Moslashuvchan bo'lmagan
usullarda barcha belgilarning ehtimolliklari dasturga qattiq kodlangan. Kirish ma'lumotlariga ko'ra yarim adaptivda 2 ta
o'tish amalga oshiriladi: 1-chi - ehtimolliklarni aniqlash uchun, 2-chi - siqishni o'zi uchun. Adaptiv - siqish jarayonida
belgilarning ehtimoli o'zgaradi. Moslashuvchan modellar eng sekin, lekin ular moslashtirilmagan va yarim moslashuvchi
modellarga qaraganda ma'lumotlarni kuchliroq siqib chiqaradi. Umuman olganda, barcha modellar orasida siqilgan
ma'lumotlar haqida eng ko'p ma'lumotni ishlatadiganlar yaxshiroq siqiladi - oldingi belgilarga bog'liqlik, ba'zi faktlar,
masalan: matnlarda katta harf odatda nuqtadan keyin keladi va hokazo. .
Mashhur arxivchilarda ishlatiladigan algoritmlar:
ZIP, ARJ, RAR - LZ + Huffman HA - PPM + arifmetik kodlash BOA - BWT + Arifmetik kodlash UHARC - LZ + PPM +
Arifmetik kodlash
(Bu yerda "+" belgining chap tomoniga yozilgan algoritm natijasi o'ng tomonga yozilgan algoritm tomonidan yanada
siqilganligini bildiradi).
Ko'rib turganingizdek, 80-yillarning oxiri - 90-yillarning boshlarida ishlab chiqilgan ZIP, ARJ, RAR arxivchilari ancha
eskirgan algoritmlardan foydalanadilar; shuning uchun ular zamonaviyroq sinovlardan pastroq.
0-tartibli adaptiv siqish/dekompressiya dasturiga misol:
Ma'lumotlar: compr - bu erda siqilgan ma'lumotlar saqlanadi Ma'lumotlar - bu erda asl ma'lumotlar saqlanadi Freq belgilar chastotasi
Protsedura kompressor_oraligi; (siqish tartibi)
Var
cum_freq: kengaytirilgan;
Boshlash
(- Model va enkoderni ishga tushirish -) q uchun: = 0 dan 255 gacha
chastota [q]: = 1; (Boshidagi barcha belgilar bir xil ehtimolga ega)
chastota: = chastota - 0,20000;
jami: = 256; (Barcha belgilar chastotalarining yig'indisi.)
(Chastada - 0 va maksimal qiymatlardan kichik ofset)
Kompyuter: = 0; (allaqachon kodlangan baytlar soni)
Lo: = 0; diapazon: = 256;
(- Kodlash -)
Q uchun: = 1 To Hajmi Do Boshlash
(Kodlangan belgiga mos keladigan intervalni topish) cum_freq: = 0,1; (Biz ehtimollikni to'plashni boshlaymiz)
w uchun: = 0 Ma'lumotlarga [q] - 1 Do cum_freq: = cum_freq + chastota [w];
(Diapazonni o'zgartirish va shunga o'xshash) diapazon: = diapazon / jami;
Lo: = Lo + diapazon * (cum_freq); diapazon: = diapazon * chastota];
(Normallashtirish, ya'ni Lo va Hi uchun bir xil bo'lgan baytlarning chiqishi (Hi = Lo + Range))
Boshlash
Inc (kompyuter);
compr: = Trunc (Lo);
Lo: = Frac (Lo) * 256; diapazon: = diapazon * 256;
Oxiri;
(Model yangilanishlari) chastota]: = chastota] + 1;
(Kodlangan belgini 1 yuqori ehtimollik bilan belgilash) jami: = jam i + 1;
Oxiri;
(Siqish tugadi, qolganini ko'rsatadi)
Lo: = Lo + diapazon / 2;
Inc (kompyuter); compr: = Trunc (Lo);
Lo: = Frac (Lo) * 256; diapazon: = diapazon * 256;
Oxiri;
Protsedura dekompressiya_diapazoni; (Protsedurani ochish)
Var
harorat: kengaytirilgan; ee: kengaytirilgan;
Boshlash
(Model va kodlovchini ishga tushirish) q uchun: = 0 dan 255 gacha chastota [q]: = 1;
chastota: = chastota - 0,20000; (Chastada - 0 va maksimal qiymatlardan kichik ofset) jami: = 256;
Kompyuter: = 4; (Kompyuter - biz o'qiyotgan bayt soni) kod:= 0;
Lo: = 0; diapazon: = 256;
(Biz kodning boshlang'ich, taxminiy qiymatini o'qiymiz.)
Q uchun: = 1 dan 4 gacha Boshlash
kod: = kod * 256 + compr [q] / 65536/256;
Oxiri;
w: = 0; (W - to'g'ri ochilgan baytlar soni)
(Aslida ochilgan)
Haqiqat qilsa ham Boshlash
(Keyingi belgining ehtimolini topish) temp: = (kod- Lo) * umumiy / diapazon;
(Harorat tushadigan belgini qidiring) yig'indisi: = 0,1; yig'indisi: = 0,1;
E uchun: = 0 dan 255 gacha Boshlash
yig'indisi: = yig'indisi + chastota [e];
Agar sum> temp bo'lsa, Break; yig'indi: = yig'indi;
Oxiri;
Inc (w);
(To'g'ri o'ralganligini tekshirish)
(Endi e - qadoqlanmagan bayt va uni faylga chiqarish mumkin)
Agar m a’lumotlar [w]<>e Keyin tanaffus; (Noto'g'ri ochilmagan bo'lsa - chiqish)
Agar w = Hajmi Keyin Boshlang Inc (w); Break End; (Agar hamma narsa ochilsa, biz ketamiz,) (va model
yangilanmagan :-))
(Lo & Hi Yangilanishlar (Uzun)) diapazon: = diapazon / jami;
Lo: = Lo + diapazon * (ssum); diapazon: = diapazon * (chastotali [e]);
(Model yangilanishi (ehtimolini oshiring))
chastota [e]: = chastota [e] + 1; jami: = jam i + 1;
(Normallashtirish, raqamlarni yaxshilash)
Trunc (Lo) = Trunc (Lo + diapazon) Do
Boshlash
Inc (kompyuter);
temp: = compr;
kod: = (kod - trunc (kod)) * 256 + temp / 16777216;
Lo: = Frac (Lo) * 256; diapazon: = diapazon * 256;
Oxiri;
Oxiri;
dekabr (w);
(DONE_DECOMPRESS)
Oxiri;
Ma'lumotlarni siqish usullari birinchi kompyuter paydo bo'lishidan ancha oldin boshlangan juda uzoq rivojlanish tarixiga
ega. Ushbu maqola g'oyalarning asosiy nazariyalari, tushunchalari va ularning amalga oshirilishi haqida qisqacha
ma'lumot berishga harakat qiladi, ammo mutlaq bo'lib ko'rinmaydi. Batafsil ma'lumotni, masalan, R.E.Krichevskiyda
topish mumkin. , Ryabko B.Ya. , Vitten
I.
H. , Rissanen J., Huffman D.A., Gallager R.G. , Knuth D.E. , Vitter J.S. va boshq.
Axborotni siqish - bu juda uzoq tarixga ega bo'lgan muammo bo'lib, hisoblash texnologiyasining rivojlanish tarixidan
ancha qadimiyroq bo'lib, u (tarix) odatda ma'lumotni kodlash va shifrlash muammosining rivojlanish tarixi bilan birga
keladi. Barcha siqish algoritmlari axborotning kirish oqimida ishlaydi, uning minimal birligi bit, maksimal birligi esa
bir necha bit, bayt yoki bir necha baytdir. Siqish jarayonining maqsadi, qoida tariqasida, ba'zi bir dastlabki ixcham
bo'lmagan kirish oqimidan ma'lumot birliklarining yanada ixcham chiqish oqimini ularni qandaydir transformatsiya
qilish orqali olishdir. Siqish jarayonlarining asosiy texnik tavsiflari va ularning ish natijalari:
Siqish nisbati (siqilish darajasi) yoki boshlang'ich va yakuniy oqimlarning hajmlarining nisbati (nisbati);
Siqish tezligi - kirish oqimidagi ma'lum miqdordagi ma'lumotni undan ekvivalent chiqish oqimi olinmaguncha siqish
uchun sarflangan vaqt;
Siqish sifati chiqish oqimi qanchalik kuchli to'planganligini, unga bir xil yoki boshqa algoritm yordamida qayta siqishni
qo'llash orqali ko'rsatadigan qiymatdir.
Axborotni siqish muammosiga turlicha yondashuvlar mavjud. Ba'zilari juda murakkab nazariy matematik asosga ega,
boshqalari axborot oqimining xususiyatlariga asoslanadi va algoritmik jihatdan juda oddiy. Ma'lumotlarni siqish yoki
siqishni amalga oshiradigan har qanday yondashuv va algoritm chiqish axborot oqimining hajmini uning qaytarilmas
yoki qaytarilmas o'zgartirish orqali bitlarda kamaytirishga mo'ljallangan. Shuning uchun, birinchi navbatda,
ma'lumotlarning tabiati yoki formati bilan bog'liq bo'lgan mezonga ko'ra, barcha siqish usullarini ikki toifaga bo'lish
mumkin: qaytariladigan va qaytarilmaydigan siqish.
Qaytarib bo'lmaydigan siqilish deganda, ma'lum bir ma'lumot formatiga asoslangan chiqish oqimi ma'lum bir nuqtai
nazardan, kirish oqimiga tashqi xususiyatlariga juda o'xshash, ammo undan farq qiladigan ob'ektni ifodalovchi kirish
ma'lumotlar oqimining shunday o'zgarishi tushuniladi. hajmda. Kirish va chiqish oqimlari o'rtasidagi o'xshashlik darajasi
ushbu axborot oqimi bilan ifodalangan ob'ektning ma'lum xususiyatlari (ya'ni, siqilgan va siqilmagan ma'lumotlar, ba'zi
bir ma'lumotlar formatiga muvofiq) o'rtasidagi muvofiqlik darajasi bilan belgilanadi. Bunday yondashuvlar va
algoritmlar, masalan, oqimdagi baytlarning takrorlanishi past bo'lgan bitmap grafik fayllari ma'lumotlarini siqish uchun
ishlatiladi. Ushbu yondashuv grafik fayl formati tuzilmasining xususiyatidan va bir necha (aniqrog'i n) usullarda (odam
ko'zi bilan idrok etish uchun) ekran sifatiga o'xshash grafik tasvirni taqdim etish qobiliyatidan foydalanadi. Shuning
uchun bunday algoritmlarda siqilish darajasi yoki miqdoridan tashqari sifat tushunchasi paydo bo'ladi. siqish jarayonida
asl tasvir o'zgaradi, keyin sifatni axborot formatiga asoslangan holda sub'ektiv baholanadigan asl va natijada olingan
tasvir o'rtasidagi muvofiqlik darajasi sifatida tushunish mumkin. Grafik fayllar uchun bu yozishmalar vizual tarzda
aniqlanadi, garchi tegishli aqlli algoritmlar va dasturlar ham mavjud. Qaytarib bo'lmaydigan siqishni kirish va chiqish
oqimlarining ma'lumotlar strukturasining aniq mos kelishi kerak bo'lgan joylarda qo'llash mumkin emas. Ushbu
yondashuv JPEG va JFIF algoritmlari hamda JPG va JIF fayl formatlari sifatida tanilgan video va foto ma'lumotlarini
taqdim etish uchun mashhur formatlarda amalga oshiriladi.
Qaytariladigan siqilish har doim ma'lumot tarkibini o'zgartirmasdan, chiqadigan axborot oqimining hajmini pasayishiga
olib keladi, ya'ni. - axborot tuzilmasini yo'qotmasdan. Bundan tashqari, chiqish oqimidan tiklash yoki dekompressiya
algoritmidan foydalanib, siz kirishni olishingiz mumkin va tiklash jarayoni dekompressiya yoki dekompressiya deb
ataladi va faqat dekompressiya jarayonidan so'ng ma'lumotlar ularning ichki formatiga muvofiq qayta ishlashga mos
keladi.
Qaytariladigan algoritmlarda kodlashni jarayon sifatida statistik nuqtai nazardan ko'rish mumkin, bu nafaqat siqish
algoritmlarini qurish, balki ularning samaradorligini baholash uchun ham foydalidir. Barcha qaytariladigan algoritmlar
uchun kodlash narxi tushunchasi mavjud. Kodlash narxi kod so'zining bitdagi o'rtacha uzunligini anglatadi. Kodlashning
ortiqchaligi xarajat va kodlash entropiyasi o'rtasidagi farqga teng va yaxshi siqish algoritmi har doim ortiqchalikni
minimallashtirishi kerak (esda tutingki, axborotning entropiyasi uning buzilishining o'lchovi sifatida tushuniladi.).
Shannonning axborotni kodlash bo'yicha asosiy teoremasida aytilishicha, "kodlash narxi har doim manbaning
entropiyasidan kam emas, garchi u o'zboshimchalik bilan unga yaqin bo'lishi mumkin". Shuning uchun har qanday
algoritm uchun har doim kirish oqimining entropiyasi bilan belgilanadigan siqilish nisbatining ma'lum chegarasi mavjud.
Keling, to'g'ridan-to'g'ri teskari algoritmlarning algoritmik xususiyatlariga murojaat qilaylik va kodlash tizimlari va
axborotni siqish usullarini amalga oshirish bilan bog'liq ma'lumotlarni siqishning eng muhim nazariy yondashuvlarini
ko'rib chiqaylik.
O m m aviy k od lash orqali siqish
Ma'lumotni teskari tarzda siqish uchun eng mashhur oddiy yondashuv va algoritm Run Length Encoding (RLE)
hisoblanadi. Ushbu yondashuv usullarining mohiyati satrlarni yoki takrorlanuvchi baytlar qatorini yoki ularning ketmaketligini bitta kodlash bayti va ularning takrorlanish soni hisoblagichi bilan almashtirishdan iborat. Barcha o'xshash
usullar bilan bog'liq muammo faqatgina
ochish algoritmi natijada bayt oqimidagi kodlangan qatorni boshqalardan - kodlanmagan bayt ketma- ketliklaridan ajratish
usulini aniqlashda. Muammoni hal qilish odatda kodlangan satrlarning boshiga belgilar qo'yish orqali erishiladi. Bunday
teglar, masalan, kodlangan ishga tushirishning birinchi baytidagi xarakterli bit qiymatlari, kodlangan ishga tushirishning
birinchi baytining qiymatlari va boshqalar bo'lishi mumkin. Ushbu usullar, qoida tariqasida, rastr grafik tasvirlarni (BMP,
PCX, TIF, GIF) siqish uchun juda samarali, chunki ikkinchisi baytlarning takroriy ketma-ketliklarining juda ko'p uzun
qatorlarini o'z ichiga oladi. RLE usulining kamchiliklari - bu juda past siqish nisbati yoki oz sonli seriyali fayllarni
kodlash va undan ham yomoni, ketma-ket takrorlanadigan baytlarning kichik soni. RLE u su lid an foyd alan m asd an siqish
RLE usulidan foydalanmasdan ma'lumotlarni siqish jarayonini ikki bosqichga bo'lish mumkin: modellashtirish va
aslida kodlash. Bu jarayonlar va ularni amalga oshirish algoritmlari ancha mustaqil va xilma-xildir.
K odlash jarayon i va u n in g u su llari
Kodlash odatda ma'lum bir alifboda belgilar oqimini (bizning holatlarimizda baytlar yoki nibbles) qayta ishlash deb
tushuniladi va oqimdagi belgilarning paydo bo'lish chastotalari har xil. Kodlashning maqsadi bu oqimni minimal
uzunlikdagi bit oqimiga aylantirishdir, bu esa kirish oqimining entropiyasini belgilar chastotalarini hisobga olgan holda
kamaytirish orqali erishiladi. Oqim alifbosidagi belgilarni ifodalovchi kodning uzunligi kirish oqimidagi m a’lumotlar
miqdoriga mutanosib bo‘lishi kerak va oqim belgilarining bitlardagi uzunligi 8 ga karrali yoki hatto o ‘zgaruvchi ham
bo‘lmasligi mumkin. Agar kirish oqimining alifbosidan belgilarning paydo bo'lish chastotalarining ehtimollik taqsimoti
ma'lum bo'lsa, u holda optimal kodlash modeli tuzilishi mumkin. Biroq, juda ko'p turli xil fayl formatlari mavjudligi
sababli, vazifa ancha murakkablashadi. ma'lumotlar belgilarining chastota taqsimoti oldindan ma'lum emas. Bunday holda,
umuman olganda, ikkita yondashuv qo'llaniladi.
Birinchisi, kirish oqimini ko'rish va to'plangan statistik ma'lumotlar asosida kodlashni qurish (bu fayl orqali ikkita o'tishni
talab qiladi - biri statistik ma'lumotlarni ko'rish va to'plash uchun, ikkinchisi kodlash uchun, bu esa bunday algoritmlarning
ko'lamini biroz cheklaydi, chunki, shuning uchun , telekommunikatsiya tizimlarida qo'llaniladigan, ma'lumotlar miqdori
ba'zan noma'lum bo'lgan va ularni qayta uzatish yoki tahlil qilish asossiz uzoq vaqt talab qilishi mumkin bo'lgan
telekommunikatsiya tizimlarida qo'llaniladigan "parvozda" bir martalik kodlash imkoniyati bundan mustasno. Bunday
holda, ishlatiladigan kodlashning statistik sxemasi chiqish oqimiga yoziladi.
Ushbu usul statik Huffman kodlash deb nomlanadi.
Kirish.
Siqish kompyuterda fayllarni saqlash uchun zarur bo'lgan joy miqdorini kamaytiradi va kanal majmui bo'yicha
ma'lumotlarni uzatish uchun zarur bo'lgan vaqt miqdori tarmoqli kengligi. Bu kodlashning bir shakli. Kodlashning boshqa
maqsadlari xatolarni qidirish va tuzatish, shuningdek shifrlash. Qidiruv jarayoni va xatolarni tuzatish siqishni teskarisidir bu ma'lumotlarning ortiqchaligini oshiradi,
ular inson o'qiy oladigan shaklda taqdim etilishi kerak bo'lmaganda. Olib tashlash orqali matndan ortiqcha,
siqish shifrlashga yordam beradi, bu esa qidiruvni murakkablashtiradi kraker uchun mavjud bo'lgan statistik
usuldan foydalangan holda shifr.
Qaytariladigan siqishni yoki shovqinsiz siqishni ko'rib chiqing, bu erda boshlang'ich matn siqilgan
holatdan aniq tiklanishi mumkin. Qaytarib bo'lmaydigan yoki kabi analog signallarni raqamli yozib
olish uchun nuqsonli siqish ishlatiladi inson nutqi yoki rasmlari. Qaytariladigan siqish matnlar uchun
ayniqsa muhimdir, tabiiy va sun'iy tillarda yozilgan, chunki bu holda
xatolar odatda qabul qilinishi mumkin emas. Qo'llashning asosiy sohasi bo'lsa-da Ko'rib chiqilgan
usullar - bu bizning terminologiyamizda aks ettirilgan matnni siqish, ammo, bu texnikada boshqa
maqsadlarda ham bor, shu jumladan qaytariladigan diskret ma'lumotlar ketma-ketligini kodlash.
Har bir siqilgan kompyuter resurslarini ajratish uchun juda ko'p yaxshi sabablar mavjud
vakillik, chunki tezroq ma'lumotlarni uzatish va bo'sh joyni qisqartirish
ularning saqlash muhim mablag'larni tejash va tez-tez yaxshilash imkonini beradi
kompyuter ko'rsatkichlari. Siqish, ehtimol, hamma tufayli diqqat markazida qoladi
kompyuterga saqlanadigan va uzatiladigan ma'lumotlar hajmini oshirish, bundan tashqari, u mumkin
ba'zi jismoniy cheklovlarni yengish uchun foydalaning, masalan:
masalan, telefon kanallarining nisbatan past o'tkazish qobiliyati.
MA'LUMOTLARNI SIQISH UCHUN KENGAYATGAN DARAXTLARNI QO'LLASH.
Siqish algoritmlari ma'lumotlarni saqlash va uzatish samaradorligini oshirishi mumkin ularning ortiqcha
miqdorini kamaytirish orqali. Siqish algoritmi qabul qilinadi manba matnni kiritish va unga mos
siqilgan matnni ishlab chiqarish,
ochiladigan algoritm sifatida u siqilgan matnga kirish va undan qabul qilish sifatida ega bo'lganda u manbaning asl
matnini chiqaradi. Ko'pgina siqish algoritmlari manba matnni alifbo harflari qatori sifatida ko'rib chiqing manba matn.
S satrning ko'rinishidagi ortiqchalik L (S) - H (S), bu erda L (S) uzunlikdir. bitlarda ifodalash va H (S) entropiya - axborot mazmunining o'lchovi, shuningdek bitlarda ifodalanadi. Ma'lumotni yo'qotmasdan
siqish mumkin bo'lgan algoritmlar
uning entropiyasidan kamroq bitli satr mavjud emas. Agar dan
manba matnini tasodifiy to'plamdan bir vaqtning o'zida bitta harfdan chiqarib oling,
A alifbosidan foydalanib, entropiya quyidagi formula bo'yicha topiladi:
H (S) = C (S) p (c) log ----,
Bu erda C (S) - satrdagi harflar soni, p (c) - statik ehtimollik
ba'zi C harfining paydo bo'lishi. Agar paydo bo'lish chastotasi p (c) ni baholash uchun ishlatilsa.
S satrdagi har bir c harfi, keyin H (C) satrning o'z-o'zidan entropiyasi deb ataladi. Bunda dan olingan qatorning o'z-o'zidan
entropiyasini ko'rsatish uchun H (S) maqolasidan foydalaniladi statik manba.
Kengayuvchi daraxtlar odatda leksikografik tartiblash shakllarini tavsiflaydi
ikkilik qidiruv uchun daraxtlar, lekin ma'lumotlarni siqishda ishlatiladigan daraxtlar bo'lmasligi mumkin doimiy tartibga
ega. Buyurtmani yo'q qilish olib keladi
asosiy kengaytirish operatsiyalarini sezilarli darajada soddalashtirish. Natijada algoritmlar juda tez va ixcham. Huffman
kodlaridan foydalanganda, kengaytirish natijasida mahalliy moslashtirilgan siqish algoritmi paydo bo'ladi ajoyib darajada
sodda va tez, garchi u optimal siqilishga erishmasa ham.
Arifmetik kodlarga qo'llanilganda, siqish natijasi yaqin bo'ladi vaqtida optimal va taxminan optimal.
PREFIX KODLAR.
Keng o'rganilgan ma'lumotlarni siqish algoritmlarining aksariyati kodlarga asoslangan Huffman. Huffman kodida manba
matnning har bir harfi arxivda aks ettirilgan o'zgaruvchan uzunlikdagi kod. Tez-tez uchraydigan harflar qisqa kodlar bilan
ifodalanadi, kamroq tez-tez - uzoq. Siqilgan matnda ishlatiladigan kodlar bo'ysunishi kerak prefiksning xususiyatlari, ya'ni:
siqilgan matnda ishlatiladigan kod bo'lishi mumkin emas har qanday boshqa kodni oldindan belgilang.
Prefiks kodlarini har bir barg joylashgan daraxt orqali topish mumkin manba alifbosining bir harfiga mos keladi. 1-rasmda
kod daraxti ko'rsatilgan
4 harfli alifbo uchun prefiks. H arf uchun prefiks kodini o'qish mumkin
daraxtni ildizdan bu harfga kesib o'tish, bu erda 0 uning chap novdasini tanlashga to'g'ri keladi, va 1 - o'ng. Huffman kod
daraxti vazni tenglashtirilgan daraxt bo'lib, har birida
varaqning og'irligi asl matnda harfning paydo bo'lish chastotasiga teng bo'ladi va
ichki tugunlar o'z vazniga ega emas. Misoldagi daraxt optimal bo'ladi, agar
A, B, C va D harflarining chastotalari mos ravishda 0,125, 0,125, 0,25 va 0,5 bo'ladi.
Muntazam Huffman kodlari oldindan chastota ma'lumotlarini talab qiladi
asl matndagi harflar, bu ikki marta ko'rish zarurligiga olib keladi - bitta
harflar chastotalarining qiymatlarini olish uchun, boshqasi esa siqishni o'zi amalga oshiradi. V
Keyinchalik, ushbu chastotalarning qiymatlari siqilgan matnning o'zi bilan birlashtirilishi kerak
kelajakda uni joylashtirish imkoniyatini yarating. Adaptiv siqish amalga oshiriladi
bir qadamda, chunki asl matnning har bir harfi uchun ishlatiladigan kod asoslanadi
alifboning barcha boshqa harflarining chastotalarida. Samarali uchun asoslar
adaptiv Huffman kodini amalga oshirish Gallagher tomonidan ishlab chiqilgan, Knuth nashr etilgan
bunday algoritmning amaliy versiyasi va Vitter uni ishlab chiqdi.
Optimal moslashtirilgan Witter kodi har doim bir bit ichida joylashgan
optimal statik Huffman kodiga nisbatan manba harfi, odatda bu
H ning bir necha foizini tashkil qiladi. Bundan tashqari, statik Huffman kodlari har doim
H dan har bir manba harfiga bir bit ichida yotadi (ular bunga erishadilar
chegara faqat barcha harflar uchun p (C) = 2 bo'lganda. Siqish algoritmlari mavjud
bu cheklovlarni engib o'tishga qodir. Masalan, Ziv-Lempell algoritmi
belgilangan uzunlikdagi arxivdagi so‘zlam i manba matn satrlariga tayinlaydi
o'zgaruvchan uzunlik va arifmetik siqish kodlash uchun ishlatilishi mumkin
manba harflar hatto bitning bir qismidir.
Prefiks kodlariga kengaytmani qo'llash.
Kengaytiruvchi daraxtlar birinchi marta 1983 yilda va batafsilroq tasvirlangan.
1985 yilda ko'rib chiqilgan. Dastlab ular o'z-o'zini muvozanatlashning bir turi sifatida tushunilgan.
ikkilik qidiruv uchun daraxtlar va ular ruxsat berishlari ham ko'rsatilgan
Ustuvor navbatlarni eng tez amalga oshirish. Agar kengaytiruvchi daraxt tugunlari bo'lsa
mavjud bo'lsa, keyin uzaytiriladi. Bu mavjud tugunga aylanishini anglatadi
ildiz, uning chap tomonidagi barcha tugunlar yangi chap pastki daraxtni, o'ngdagi tugunlar yangi o'ng pastki daraxt. Kengayish daraxtni eskidan o'tish orqali erishiladi
maqsad tuguniga ildiz va bu holda mahalliy o'zgarishlar qilish, shuning uchun narx
kengayish bosib o'tilgan yo'lning uzunligiga proportsionaldir.
Tarjan va Slayton kengayadigan daraxtlar statik jihatdan optimal ekanligini ko'rsatdi.
Boshqacha qilib aytadigan bo'lsak, agar mavjud tugunlarning kodlari statikaga muvofiq olinsa
ehtimollikni taqsimlash, keyin kengayadigan daraxtga kirish tezligi va
statik muvozanatli, bu taqsimlash tomonidan optimallashtirilgan, bo'ladi
bir-biridan doimiy koeffitsient bilan farqlanadi, etarli darajada seziladi
uzoq kirishlar seriyasi. Chunki Huffman daraxti bunga misoldir
statik muvozanatli daraxt, so'ngra siqish kengaytmasi yordamida
ma'lumotlar, siqilgan matnning o'lchami ma'lum bir koeffitsient ichida bo'ladi
Huffman kodi yordamida olingan arxiv hajmi.
Dastlab tasvirlanganidek, kengaytma daraxtlarni saqlash uchun qo'llaniladi
barglar emas, balki ichki tugunlardagi ma'lumotlar. Prefiks kodli daraxtlar hamma narsani o'z ichiga oladi
Sizning ma'lumotlaringiz faqat barglarda. Biroq, kengaytma varianti mavjud prefiks kod
daraxti uchun qo'llaniladigan yarim kengaytma. U bilan, maqsad tugun ildizga o'tkazilmaydi
va uning vorislariga o'zgartirishlar kiritilmaydi;
Buning o'rniga, ildizdan maqsadgacha bo'lgan yo'l oddiygina yarmiga qisqartiriladi. Yarim kengayish darajasiga etadi
kabi doimiy koeffitsient doirasidagi bir xil nazariy chegaralar kengaytma.
Sifatida ushlab leksikografik daraxtning zigzagli o'tish holatida
kengaytirish va yarim kengayish bo'ylab to'g'ridan-to'g'ri marshrutdan farqli o'laroq, murakkabroq daraxtning chap yoki
o'ng chetini maqsadli tugunga. Ushbu oddiy holat quyidagi rasmda ko'rsatilgan Shakl 2. Yarim kengayishning ildizdan
(tugun w) barggacha bo'lgan marshrutga ta'siri A tugun bir-biridan keyingi har bir ichki juftlikni almashtirishdan iborat
boshqa tugunlar, buning natijasida ildizdan barg tuguniga boradigan yo'lning uzunligi qisqaradi
2 marta. Yarim kengayish jarayonida har bir juftning tugunlari ildizdan uzoqroqda, yangi yo'lga (x va z tugunlari) va
yaqinroqlari kiradi bundan mustasno (tugunlar w va y).
Kod daraxtlarida yarim kengayish operatsiyasi orqali leksikografik tartibni saqlash
prefiks ixtiyoriy. Kod operatsiyalarida yagona muhim narsa prefiks siqish protsedurasi tomonidan
ishlatiladigan daraxtga to'liq mos keladi joylashtirish protsedurasi tomonidan ishlatiladigan daraxt. Har
qanday o'zgartirish kiritildi ketma-ket harflar orasida, faqat agar bajariladi
ikkala protsedura ham bir xil tartibda bir xil o'zgarishlarni amalga oshiradi.
Leksikografik tartibni saqlash zarurati o'tkazishni sezilarli darajada osonlashtiradi zigzag ishini yo'q qilish
orqali yarim kengaytirish operatsiyalari. Bo'lishi mumkin
Download