O`ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR VAZIRLIGI MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI Axborot va kodlash nazariyasi fanidan Mustaqil ishi Mavzu: Siqish algoritmi asosida ma’lumotlarni siqish usularining samaradorligi hisoblash Topshirdi: 042-21 sirtqi guruh talabasi Xasanov Baxtiyor Qabul qildi: ___________________ Toshkent – 2024y 1 Mavzu: Siqish algoritmi asosida ma’lumotlarni siqish usularining samaradorligi hisoblash Reja: 1. Kirish……………………………………………… 3 2. Asosiy qism: Matnli ma'lumotlarni siqish algoritmining asosiy mohiyati…………………………….. Ma’lumotlarni siqish uchun kengaygan 2.2 daraxtlarni qo’llash………………………….. 2.1 4 7 2.3 Prefix kodlar………………………………… 9 2.4 Kodlash jarayoni va uning usullari………… 12 2.5 18 Ma'lumotlarni siqish misollarda……………. 3. Xulosa……………………………………………… 29 4. Foydalanilgan adabiyotlar…………………………. 2 30 Kirish. 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. 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 3 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. Matnli ma'lumotlarni siqish algoritmining asosiy mohiyati 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; 4 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 5 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. 6 Ommaviy kodlash 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 ketma-ketligini 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 usulidan foydalanmasdan 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. 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 7 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. Static 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. 8 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. Harf 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. 9 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ʻzlarni 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. 10 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. 11 Kodlash jarayoni va uning usullari 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 ma’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. Ishlash uzunligini kodlash usuli Agar siqilishi kerak bo'lgan ma'lumotlar bir xil qiymatlarning uzun ketmaketliklaridan iborat bo'lsa, ish uzunligini kodlash eng yaxshi natijalarni beradi. Aslini olganda, bunday kodlash usuli aynan shunday ketma-ketliklarni ma'lum bir 12 qatordagi takroriy qiymat va uning takrorlanish sonini aniqlaydigan kod qiymati bilan almashtirishdan iborat. Masalan, bit ketma-ketligi 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 ketmaket 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 13 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-1 b - 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. Agar 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 14 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. 15 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 qizilyashil-ko'k ranglarning 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 16 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. Ko'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 17 ifodalanadi [yorqinlik uchun to'rtta qiymat va ranglar uchun ikkitasi] piksel boshiga. Ma'lumotlarni siqish Ma'lumotlarni 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 ehtimolliklarga 18 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. 19 "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 20 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 ketmaketlikning 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 21 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 22 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. 23 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: 24 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) 25 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: = jami + 1; Oxiri; (Siqish tugadi, qolganini ko'rsatadi) Lo: = Lo + diapazon / 2; Inc (kompyuter); compr: = Trunc (Lo); Lo: = Frac (Lo) * 256; diapazon: = diapazon * 256; Oxiri; 26 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]; 27 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 maʼ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: = jami + 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; 28 Xulosa: Siqish algoritmlari, ma'lumotlarni siqishning samaradorligini oshirishda kritik ahamiyatga ega. Ular ma'lumotlarni saqlash uchun ko'p erda foydalaniladi, masalan, internet, ma'lumotlar bazalari, ma'lumotlar bazalari, va boshqa ko'p qatlamli platformalar. Siqish algoritmlari foydalanuvchilar uchun samarali, qulay va tez ma'lumotlarga kirish imkoniyatini oshirish uchun keng qo'llaniladi. Bu, ma'lumotlar bazalari va internetdan ma'lumotlarni olish, foydalanuvchilar interfeyslari va ilovalarini yaxshilash, ma'lumotlarni saqlash, tarqatish va ko'paytirish jarayonlarini tezlashtirish uchun juda muhimdir. Ayni vaqtda, samaradorlik, siqish algoritmlari bilan ma'lumotlar saqlashning sizni tejash qobiliyati va ma'lumotlar bazalari yoki internetga kirish tezligini oshirish uchun kritik muhimlikka ega. Bu esa ma'lumotlarni tezkor yuklash va qayta ishlashning zarurati bo'lgan veb-saytlar, mobil ilovalar va texnologik sohalarning boshqa sohalarida amalga oshiriladi. Siqish algoritmlari, ko'pgina ma'lumotlarni saqlash va tarqatishning ta'minlashda yordam beradi. 29 kerakli samaradorligini Foydalanilgan adabiyotlar 1. NTFS bilan siqilgan fayllar Sound Forge 9 kitobidan muallif Kvint Igor 2. Microsoft Windows SharePoint Services 3.0 kitobidan. Rus versiyasi. 9-16boblar muallif Olga Londer 3. Kompyuterda ishlash bo'yicha eng yangi qo'llanma ma'lumotlar tuzilmalari kitobidan muallif Beluntsov Valeriy 4. Delphida asosiy algoritmlar va kitobidan muallif Baknel Julian M. 5. Kompyuter tovushini qayta ishlash kitobidan muallif Zagumennov Aleksandr Petrovich 6. Raqamli fotosuratlar kitobidan. Fokuslar va effektlar muallif Gurskiy Yuriy Anatolievich 7. www.forum.uz 8. www.evo.uz 9. google.co.uz 30