Compression (ဒေတာ ချုံ့ခြင်း)
A1.1.8 - Describe the concept of compression
မြန်မာလို: compression (ဒေတာ ချုံ့ခြင်း) ဆိုတဲ့ အယူအဆကို ဖော်ပြရှင်းပြနိုင်ရပါမယ်။
အဓိက အယူအဆများ
ဘာကြောင့် Compress လုပ်သလဲ (A1.1.8)
Compression က ဒေတာကို ဖော်ပြဖို့ လိုတဲ့ bit (binary ဂဏန်း တစ်လုံး၊ 0 ဒါမှမဟုတ် 1) အရေအတွက်ကို လျှော့ပေးပါတယ်။ ကိုယ် download လုပ်တဲ့ file တွေ၊ stream လုပ်ကြည့်တဲ့ video တွေနဲ့ မျှဝေတဲ့ ဓာတ်ပုံတွေကို အများအားဖြင့် compress လုပ်ထားပါတယ်၊ ဘာလို့လဲဆိုတော့ compression က file အရွယ်အစား၊ storage သုံးစွဲမှုနဲ့ network ပေါ်မှာ ပို့ရတဲ့ ဒေတာ ပမာဏကို လျှော့ပေးလို့ပါ။
- Storage နေရာ ချွေတာခြင်း: compress လုပ်ထားတဲ့ file တွေက disk ပေါ်မှာ နေရာ နည်းနည်းပဲ ယူတာမို့ storage ကုန်ကျစရိတ်လည်း လျော့ပါတယ်
- ပို့တာ ပိုမြန်ခြင်း: file သေးလေ bandwidth (တစ်စက္ကန့်မှာ ပို့နိုင်တဲ့ ဒေတာ အများဆုံး) နည်းနည်းပဲ လိုပြီး network ပေါ်မှာ ပိုမြန်မြန် ကူးပြောင်းနိုင်လေ ဖြစ်လို့ upload နဲ့ download ချိန်တွေ လျော့ပါတယ်
- အရွယ်အစား ကန့်သတ်ချက်နဲ့ ကိုက်အောင် လုပ်ခြင်း: service အများကြီးမှာ file အရွယ်အစား ကန့်သတ်ချက် ရှိပါတယ် (ဥပမာ email မှာ ပူးတွဲတဲ့ file ကန့်သတ်ချက်)၊ compression က file ကို အဲဒီ ကန့်သတ်ချက်အတွင်း ရောက်အောင် လုပ်ပေးနိုင်ပါတယ်
- Streaming (file တစ်ခုလုံး မစောင့်ဘဲ ဒေတာ ရောက်သလောက် ချက်ချင်း ဖွင့်ကြည့်ခြင်း) ကို ဖြစ်နိုင်စေခြင်း: real-time media (video call၊ သီချင်း streaming) တွေမှာ compression မရှိရင် မချုံ့ထားတဲ့ data rate (တစ်စက္ကန့်မှာ ပို့ရတဲ့ ဒေတာ ပမာဏ) က ရနိုင်တဲ့ network bandwidth ကို ကျော်သွားမှာမို့ လက်တွေ့ မဖြစ်နိုင်ပါဘူး
- ကုန်ကျစရိတ် လျှော့ခြင်း: storage နည်းတာနဲ့ bandwidth နည်းတာ နှစ်ခုလုံးက လုပ်ငန်း ကုန်ကျစရိတ်ကို လျှော့ပေးပါတယ်၊ အထူးသဖြင့် ဒေတာ အများကြီး ကိုင်တွယ်ရတဲ့ အဖွဲ့အစည်းတွေအတွက်ပါ
- Compression ratio (ချုံ့နှုန်း) = မူရင်း အရွယ်အစား / compress လုပ်ပြီး အရွယ်အစား (ဥပမာ 10 MB ကနေ 2 MB ဖြစ်သွားရင် ratio က 5:1)
Lossy vs Lossless (ဒေတာ ဆုံးရှုံးတဲ့ compression နဲ့ မဆုံးရှုံးတဲ့ compression)
Compression မှာ အရေးအကြီးဆုံး ခွဲခြားချက်က လုပ်ငန်းစဉ်အတွင်း ဒေတာ တစ်စုံတစ်ရာ အပြီးတိုင် ပျောက်သွားလား မပျောက်ဘူးလား ဆိုတာပါ။
Lossless Compression (ဒေတာ မဆုံးရှုံးဘဲ ချုံ့ခြင်း)
Lossless compression မှာ compress လုပ်ထားတဲ့ version ကနေ မူရင်း ဒေတာကို အတိအကျ ပြန်တည်ဆောက် နိုင်ပါတယ်။ Bit တစ်လုံးတောင် မပျောက်ပါဘူး။
- တိကျမှု အလွန် အရေးကြီးတဲ့ နေရာတွေမှာ သုံးပါတယ်: ဆေးဘက်ဆိုင်ရာ ပုံတွေ၊ source code၊ ဥပဒေ စာရွက်စာတမ်းတွေ၊ database တွေ
- ဥပမာများ: PNG ပုံတွေ၊ FLAC အသံ file တွေ၊ ZIP archive (file တွေကို စုပြီး ချုံ့ထားတဲ့ file) တွေ၊ text file တွေ
- ပုံမှန်အားဖြင့် compression ratio နိမ့်ပါတယ် (2:1 ကနေ 3:1)
Lossy Compression (ဒေတာ တချို့ကို ဖယ်ပြီး ချုံ့ခြင်း)
Lossy compression မှာ compress လုပ်စဉ် ဒေတာ တချို့ကို အပြီးတိုင် ဖယ်ပစ် ပါတယ်။ မူရင်းကို ဘယ်တော့မှ အတိအကျ ပြန်မရနိုင်ပါဘူး။
- အရည်အသွေး နည်းနည်း ကျတာကို လက်ခံနိုင်တဲ့ နေရာတွေမှာ သုံးပါတယ်: ဓာတ်ပုံ၊ သီချင်း၊ video
- Compression ratio အများကြီး ပိုမြင့်ပါတယ် (10:1 ကနေ 50:1 ဒါမှမဟုတ် ပိုများ)
- ဥပမာများ: JPEG ပုံတွေ၊ MP3/AAC အသံ file တွေ၊ MP4/H.264 video တွေ
နှိုင်းယှဉ်ချက် ဇယား
| အချက် | Lossless | Lossy |
|---|---|---|
| ဒေတာ ဆုံးရှုံးမှု | မရှိ | တချို့ ရှိ |
| Compression ratio | ပိုနိမ့် (ပုံမှန် 2:1 ကနေ 3:1) | ပိုမြင့် (10:1 ကနေ 50:1+) |
| မူရင်းကို ပြန်ရနိုင်သလား | ရပါတယ် | မရပါ |
| အသင့်တော်ဆုံး | စာသား၊ code၊ ဆေးဘက်ဆိုင်ရာ ပုံ | ဓာတ်ပုံ၊ သီချင်း၊ video |
| ဥပမာများ | PNG, ZIP, FLAC | JPEG, MP3, MP4 video (H.264) |
Run-Length Encoding (RLE) (ထပ်နေတဲ့ တန်ဖိုးတွေကို အရေအတွက်နဲ့ ချုံ့ခြင်း)
Run-Length Encoding က အရိုးရှင်းဆုံး lossless compression နည်းပါ။ ဆက်တိုက် ထပ်နေတဲ့ တူညီတဲ့ တန်ဖိုးတွေကို အရေအတွက် + တန်ဖိုး (count + value) အတွဲ တစ်ခုနဲ့ အစားထိုးပါတယ်။
ဥပမာ: AAABBBCCDDDDDD က 3A3B2C6D ဖြစ်သွားပါတယ်
ဒေတာထဲမှာ တူညီတဲ့ တန်ဖိုးတွေ ရှည်ရှည် ဆက်တိုက် ပါရင် (long runs၊ run ဆိုတာ တူညီတဲ့ တန်ဖိုး ဆက်တိုက် အစု တစ်ခုပါ) RLE က ကောင်းကောင်း အလုပ်လုပ်ပါတယ် (ဥပမာ အရောင် တစ်မျိုးတည်း နေရာ ကျယ်ကျယ် ပါတဲ့ ရိုးရှင်းတဲ့ ပုံတွေ)။ အမျိုးမျိုး ပြောင်းလဲနေတဲ့ ဒေတာမှာတော့ ကောင်းကောင်း အလုပ် မလုပ်ပါဘူး: ABCDEF ကို 1A1B1C1D1E1F လို့ encode လုပ်ရင် အရွယ်အစားက တကယ်တော့ ကြီးလာ ပါတယ်။
အဆင့်ဆင့် Algorithm (အယ်လ်ဂိုရီသမ်၊ ပြဿနာကို အဆင့်ဆင့် ဖြေရှင်းတဲ့ နည်းလမ်း)
- Input ကို ဘယ်ကနေ ညာကို ဖတ်ပါ
- ဆက်တိုက် တူနေတဲ့ character (စာလုံး ဒါမှမဟုတ် သင်္ကေတ) တွေကို ရေတွက်ပါ
- အရေအတွက်ကို ရေးပြီး နောက်က character ကို ရေးပါ
- Input အဆုံးထိ ထပ်လုပ်ပါ
Transform Coding (DCT) (လူ သိပ်မသိနိုင်တဲ့ အပိုင်းတွေကို ဖယ်ပြီး ချုံ့ခြင်း)
Transform coding ကို JPEG, MPEG နဲ့ အသံ compression format တွေမှာ သုံးပါတယ်။ ဘာကိုမှ မဖယ်ခင် ဒေတာကို လူတွေ သတိထားမိတဲ့ အပိုင်းနဲ့ သိပ်မမြင်မိတဲ့ အပိုင်းကို ခွဲထုတ်ပေးတဲ့ ပုံစံအဖြစ် အရင် ပြန်ရေးပါတယ်။
ဓာတ်ပုံ တစ်ပုံအတွက် JPEG က pixel (ပုံထဲက အစက် တစ်စက်) တွေရဲ့ လေးထောင့်ကွက် (block) အသေးလေး တစ်ကွက်ပေါ်မှာ တစ်ကြိမ်လျှင် တစ်ကွက် အလုပ်လုပ်ပါတယ်။
- ဘာကြောင့် အလုပ်ဖြစ်သလဲ: လူတွေက နေရာ တစ်ခုရဲ့ အလင်းအမှောင် အရောင်အသွေး တစ်ခုလုံး (overall shade) မှာ အမှား နည်းနည်းလေးကို အဲဒီ နေရာရဲ့ အသေးစိတ် အဆင်အသွေး (fine texture) မှာ အမှား နည်းနည်းထက် အများကြီး ပိုသတိထားမိပါတယ်။ ပြီးတော့ ဓာတ်ပုံ အများစုမှာ block တစ်ခုစီရဲ့ အပိုင်း နည်းနည်းလေးကိုပဲ အသေးစိတ် texture က ယူထားပါတယ်။
- Transform (ပုံစံ ပြောင်းခြင်း): block တစ်ခုမှာ ပုံမှန်အားဖြင့် pixel တစ်ခုစီအတွက် brightness (အလင်းတောက်ပမှု) တန်ဖိုး တစ်ခုစီ သိမ်းပါတယ်။ Discrete Cosine Transform (DCT) က block အတူတူကို စံ pattern (ပုံစံ) တွေရဲ့ ရောစပ်မှု အဖြစ် ပြန်ရေးပါတယ်: အညီအမျှ ပြန့်နေတဲ့ အရောင် တစ်မျိုးတည်းကနေ ဖြည်းဖြည်းချင်း ပြောင်းသွားတဲ့ အရောင်တွေ၊ အလင်းနဲ့ အမှောင်ကြား မြန်မြန် ပြောင်းနေတဲ့ အစင်းသေးသေးနဲ့ အကွက်သေးသေး pattern တွေအထိ ပါပါတယ်။ ရလဒ်ထဲက နံပါတ် တစ်ခုစီက block ထဲမှာ pattern တစ်ခု ဘယ်လောက် ပါလဲဆိုတာ ပြပါတယ်။ Pixel တစ်ခုချင်း ဖော်ပြတဲ့ ပုံစံကို spatial domain (နေရာအလိုက် ဖော်ပြပုံ) လို့ ခေါ်ပြီး pattern တွေနဲ့ ဖော်ပြတဲ့ ပုံစံကို frequency domain (ပြောင်းလဲနှုန်းအလိုက် ဖော်ပြပုံ) လို့ ခေါ်ပါတယ်: ဖြည်းဖြည်း ပြောင်းတဲ့ pattern တွေက low-frequency (ပြောင်းလဲနှုန်း နိမ့်တဲ့) ဖြစ်ပြီး မြန်မြန် ပြောင်းတဲ့ pattern တွေက high-frequency (ပြောင်းလဲနှုန်း မြင့်တဲ့) ဖြစ်ပါတယ်။
- Quantization (တန်ဖိုးတွေကို အကြမ်းဖျင်း ဖြစ်အောင် စားပြီး round လုပ်ခြင်း): နောက်တစ်ဆင့်မှာ pattern တစ်ခုစီရဲ့ နံပါတ်ကို step size (အဆင့် အရွယ်) တစ်ခုနဲ့ စားပြီး round (အနီးဆုံး ကိန်းပြည့် ယူ) လုပ်ပါတယ်၊ high-frequency pattern တွေအတွက် step ပိုကြီးကြီး သုံးပါတယ်။ အဲဒီ နံပါတ် အများကြီးက round လုပ်ရင် သုည ဖြစ်သွားပြီး သိမ်းဖို့ နေရာ မရှိသလောက်ပဲ ယူပါတယ်။ Round လုပ်တာက information ကို အပြီးတိုင် ဖယ်ပစ်တာမို့ ဒါက lossy ဖြစ်တဲ့ အဆင့်ပါ။
- Trade-off (တစ်ခု ရဖို့ တစ်ခု အလျှော့ပေးရတာ): step ကြီးလေ file သေးလေ ဖြစ်ပေမယ့် blur (ဝါးတာ) နဲ့ blockiness (အကွက်လိုက် ပေါ်တာ) ပိုမြင်ရလေ ဖြစ်ပါတယ်။
ထပ်ဆောင်း လေ့လာရန်: Huffman Encoding (ပေါ်တဲ့ အကြိမ်ရေအလိုက် အရှည် မတူတဲ့ code ပေးတဲ့ နည်း)
ဒီအပိုင်းက IB syllabus (ဒီ site လက်ရှိ လိုက်နာနေတဲ့ IB Computer Science သင်ရိုး) ထက် ကျော်လွန်တာမို့ အကဲဖြတ်တာ မရှိပါဘူး။
Huffman encoding က character တွေ ပေါ်တဲ့ အကြိမ်ရေ (frequency) ကို အခြေခံပြီး character တွေကို variable-length code (အရှည် မတူတဲ့ code) တွေ ပေးတဲ့ lossless နည်းပါ။ ပိုမကြာခဏ ပေါ်တဲ့ character တွေက ပိုတိုတဲ့ code ရလို့ စုစုပေါင်း အရွယ်အစား လျော့ပါတယ်။
- Frequency table (အကြိမ်ရေ ဇယား) တည်ဆောက်ပါ: character တစ်ခုစီ ဘယ်နှစ်ကြိမ် ပေါ်လဲ ရေတွက်ပါ
- Binary tree (node တစ်ခုမှာ child အများဆုံး နှစ်ခုပဲ ရှိတဲ့ tree) ဖန်တီးပါ: tree တစ်ခုတည်း ကျန်တဲ့အထိ အကြိမ်ရေ အနည်းဆုံး node (tree ထဲမှာ ဒေတာ သိမ်းထားတဲ့ အကွက်) နှစ်ခုကို ထပ်ခါထပ်ခါ ပေါင်းပါ
- Code တွေ သတ်မှတ်ပါ: ဘယ်ဘက် အကိုင်း (branch) = 0၊ ညာဘက် အကိုင်း = 1၊ root (အပေါ်ဆုံး node) ကနေ leaf (အောက်မှာ node မရှိတော့တဲ့ node) အထိ code ကို ဖတ်ပါ
ဥပမာ: AABBBCCCC string (စာသား) ထဲမှာ:
- C က 4 ကြိမ် ပေါ်ပါတယ်: အတိုဆုံး code ဖြစ်တဲ့ 1 bit ရပါတယ် (ဥပမာ
0) - B က 3 ကြိမ် ပေါ်ပါတယ်: 2-bit code ရပါတယ် (ဥပမာ
10) - A က 2 ကြိမ် ပေါ်ပါတယ်: သူလည်း 2-bit code ရပါတယ် (ဥပမာ
11)
Character သုံးမျိုးပဲ ရှိလို့ code အရှည် နှစ်မျိုးပဲ ရှိပါတယ်: အကြိမ်ရေ အများဆုံး character က 1 bit ရပြီး ကျန်တဲ့ နှစ်ခုက 2 bit စီ ရပါတယ်။ ဒီ string အတွက် 8-bit ASCII (character 128 လုံးအတွက် code စနစ်) မှာဆိုရင် 9 x 8 = 72 bits လိုမယ့်အစား 4x1 + 3x2 + 2x2 = 14 bits ပဲ လိုပါတယ်။
Huffman encoding က အမြဲ lossless ဖြစ်ပါတယ်: ဘယ် code မှ နောက် code တစ်ခုရဲ့ prefix (ရှေ့ပိုင်း) မဖြစ်တာမို့ မူရင်း ဒေတာကို အတိအကျ decode (မူရင်းအဖြစ် ပြန်ဖော်) လုပ်နိုင်ပါတယ်။
ကြည့်ရန်: စာသား Compression Video များ (English)
Huffman coding explained - how lossless compression assigns shorter codes to frequent characters.
Interactive Code.org demo showing how text compression reduces file size.
Overview of compression techniques - run-length encoding, Huffman, and perceptual coding.
ထပ်ဆောင်း လေ့လာရန်: JPEG Compression Pipeline (JPEG ချုံ့တဲ့ အဆင့်ဆင့် လုပ်ငန်းစဉ်)
ဒီအပိုင်းက IB syllabus ထက် ကျော်လွန်တာမို့ အကဲဖြတ်တာ မရှိပါဘူး။
JPEG compression က အဆင့် အများကြီးပါတဲ့ pipeline ကို သုံးပါတယ်:
- ပုံကို 8x8 pixel block တွေအဖြစ် ခွဲပါ (Divide)
- Block တစ်ခုစီကို DCT သုံးပါ (Apply DCT): pixel တန်ဖိုးတွေကို frequency coefficient (pattern တစ်ခုစီ ဘယ်လောက် ပါလဲ ပြတဲ့ နံပါတ်) တွေအဖြစ် ပြောင်းပါတယ်
- Quantize လုပ်ပါ: frequency coefficient တွေရဲ့ တိကျမှုကို လျှော့ပါ (ဒေတာ ပျောက်တဲ့ အဆင့်က ဒီမှာပါ)
- Encode လုပ်ပါ: quantize လုပ်ထားတဲ့ တန်ဖိုးတွေကို lossless encoding (RLE + Huffman) သုံးပါ
Image editor တွေထဲက “quality slider” (အရည်အသွေး ချိန်တဲ့ ဆလိုက်ဒါ) က အဆင့် 3 ကို ဘယ်လောက် ပြင်းပြင်း လုပ်မလဲ ထိန်းပါတယ်။ Quality နိမ့်လေ = quantization ပိုများလေ = file သေးလေ = artifact (compression ကြောင့် ပုံမှာ ပေါ်လာတဲ့ အမှားအယွင်း) တွေ ပိုမြင်ရလေ (blockiness၊ colour banding (အရောင် ပြောင်းတာ ချောမွေ့မနေဘဲ အစင်းလိုက် ဖြစ်နေတာ)) ဖြစ်ပါတယ်။
ကြည့်ရန်: JPEG Compression Video များ (English)
Step-by-step JPEG compression: DCT, quantisation, and how a 46MB image becomes 4MB.
How JPEG handles colour data - chroma subsampling and why your eyes are tricked.
The maths behind JPEG: how DCT transforms image blocks into frequency data for compression.
Quick visual summary of JPEG compression in under a minute.
ထပ်ဆောင်း လေ့လာရန်: MPEG နဲ့ Temporal Compression (အချိန်အလိုက် frame တွေကြား ချုံ့ခြင်း)
ဒီအပိုင်းက IB syllabus ထက် ကျော်လွန်တာမို့ အကဲဖြတ်တာ မရှိပါဘူး။
Video compression က video ထဲက ဆက်တိုက် frame (video ထဲက ပုံ တစ်ပုံ) တွေက အများအားဖြင့် အလွန် ဆင်တူတယ် ဆိုတဲ့ အချက်ကို အသုံးချပါတယ်။ MPEG က frame အမျိုးအစား သုံးမျိုး သုံးပါတယ်:
- I-frames (Intra-coded): JPEG လို compress လုပ်ထားတဲ့ ပုံ အပြည့်အစုံတွေပါ၊ ကိုးကားရာ အမှတ် (reference point) တွေအဖြစ် သုံးပါတယ်
- P-frames (Predicted): ရှေ့ frame နဲ့ ကွာခြားချက်တွေကိုပဲ သိမ်းပါတယ်
- B-frames (Bi-directional): ရှေ့ frame ရော နောက် frame နဲ့ပါ ကွာခြားချက်တွေကို သိမ်းပါတယ်
ဒါက temporal redundancy (ဆက်တိုက် frame တွေကြား ထပ်နေတဲ့ ဒေတာ) ကို အသုံးချတာပါ: frame တိုင်းရဲ့ pixel တိုင်းကို သိမ်းမယ့်အစား frame တွေကြား ပြောင်းလဲမှုတွေကိုပဲ သိမ်းပါတယ်။ ပုံမှန် အစဉ် တစ်ခုက ဒီလို ဖြစ်နိုင်ပါတယ်: I B B P B B P B B I …
အဆင့်ဆင့် ရှင်းပြထားတဲ့ ဥပမာများ
ဥပမာ 1: RLE Encoding ကို အဆင့်ဆင့် လုပ်ခြင်း
ပြဿနာ: WWWWBBBWWWWWBBB string ကို RLE သုံးပါ
အဆင့် 1: ဘယ်ဘက်ကနေ ဖတ်ပါ။ W တွေကို ရေတွက်ပါ: ဆက်တိုက် W 4 လုံး။ 4W လို့ ရေးပါ။
အဆင့် 2: B တွေကို ရေတွက်ပါ: ဆက်တိုက် B 3 လုံး။ 3B လို့ ရေးပါ။
အဆင့် 3: W တွေကို ရေတွက်ပါ: ဆက်တိုက် W 5 လုံး။ 5W လို့ ရေးပါ။
အဆင့် 4: B တွေကို ရေတွက်ပါ: ဆက်တိုက် B 3 လုံး။ 3B လို့ ရေးပါ။
Output: 4W3B5W3B
Compression ratio: character 15 လုံးကနေ character 8 လုံး ဖြစ်သွားပါတယ် = 15/8 = 1.88:1
ဥပမာ 2: RLE Decoding (RLE ကနေ မူရင်းကို ပြန်ဖော်ခြင်း)
ပြဿနာ: 2A5B1C3D RLE string ကို decode လုပ်ပါ
အဆင့် 1: 2A ဆိုတာ A 2 လုံး: AA
အဆင့် 2: 5B ဆိုတာ B 5 လုံး: BBBBB
အဆင့် 3: 1C ဆိုတာ C 1 လုံး: C
အဆင့် 4: 3D ဆိုတာ D 3 လုံး: DDD
Output: AABBBBBCDDD
ဥပမာ 3: Lossy နဲ့ Lossless ထဲက ရွေးခြင်း
အခြေအနေ A: ဆေးရုံ တစ်ရုံက X-ray ပုံတွေကို ရေရှည် သိမ်းဆည်းဖို့ (archival storage) compress လုပ်ဖို့ လိုပါတယ်။
အဖြေ: lossless compression (ဥပမာ PNG) ကို မဖြစ်မနေ သုံးရပါမယ်။ ဆေးဘက်ဆိုင်ရာ ပုံတွေမှာ တိကျမှု အတိအကျ လိုပါတယ်: အသေးစိတ် နည်းနည်းလေး ပျောက်တာတောင် ရောဂါကို မှားပြီး ရှာဖွေ ဆုံးဖြတ်မိ (misdiagnosis) စေနိုင်ပါတယ်။ တိကျမှု အာမခံချက် ရဖို့ compression ratio နိမ့်တာက လက်ခံနိုင်တဲ့ trade-off ပါ။
အခြေအနေ B: website တစ်ခုက မြန်မြန် ပေါ်လာမယ့် ဓာတ်ပုံ thumbnail (ပုံ အသေးလေး) တွေကို ပြဖို့ လိုပါတယ်။
အဖြေ: lossy compression (ဥပမာ JPEG) ကို သုံးနိုင်ပါတယ်။ Web thumbnail တွေအတွက် အရည်အသွေး နည်းနည်း ကျတာကို လက်ခံနိုင်ပြီး compression ratio အများကြီး ပိုမြင့်တာက page တွေ ပိုမြန်မြန် ပေါ်လာပြီး bandwidth သုံးစွဲမှု နည်းစေပါတယ်။
Quick Check (အမြန် စစ်ဆေးမေးခွန်း)
Q1. မူရင်း ဒေတာကို အတိအကျ ပြန်တည်ဆောက်နိုင်တဲ့ compression အမျိုးအစားက ဘယ်ဟာလဲ။
Q2. RLE က ဘာရဲ့ အတိုကောက်လဲ။
Q3. JPEG က ဘယ် compression အမျိုးအစားရဲ့ ဥပမာလဲ။
Q4. RLE က ဘယ်အချိန်မှာ ကောင်းကောင်း အလုပ် မလုပ်သလဲ။
Q5. Compression မှာ Discrete Cosine Transform (DCT) ရဲ့ ရည်ရွယ်ချက်က ဘာလဲ။
Encoding ကို အဆင့်ဆင့် Trace (တစ်ဆင့်ချင်း လိုက်ပြီး မှတ်) လုပ်ခြင်း
AAABBCCCCDDAB input string အတွက် RLE encoding လုပ်ငန်းစဉ်ကို အဆင့်ဆင့် trace လုပ်ပါ။
အဆင့်တိုင်းမှာ လက်ရှိ တူညီတဲ့ character run ကို ခွဲခြားသိပြီး ရေတွက်ကာ encode လုပ်ထားတဲ့ output ကို တဖြည်းဖြည်း တည်ဆောက်ပါ။ အဖြေတွေကို ဂဏန်းနဲ့ English စာလုံးတွေနဲ့ ရိုက်ထည့်ပါ။
| အဆင့် | Character များ | အရေအတွက် | အခုထိ Encode လုပ်ထားတဲ့ Output |
|---|---|---|---|
| 1 | AAA | ||
| 2 | BB | ||
| 3 | CCCC | ||
| 4 | DD | ||
| 5 | A | ||
| 6 | B |
Spot the Error (အမှား ရှာခြင်း)
ကျောင်းသား တစ်ယောက်က AABBBCC string ကို RLE သုံးပြီး အောက်က အဆင့်တွေကို ရေးခဲ့ပါတယ်။ အမှားပါတဲ့ line ကို ရွေးပါ၊ ပြီးရင် ပြင်နည်းကို ရွေးပါ။
Line တွေမှာ "A appears 2 times" ဆိုတာ "A က 2 ကြိမ် ပေါ်တယ်" လို့ ဆိုလိုပြီး "Result" က နောက်ဆုံး ရလဒ်ပါ။
ဒီ line အတွက် မှန်ကန်တဲ့ ပြင်နည်းကို ရွေးပါ:
Fill in the Blanks (ကွက်လပ် ဖြည့်ခြင်း)
Compression နည်းတွေအကြောင်း အောက်က ဖော်ပြချက်တွေကို ပြည့်စုံအောင် ဖြည့်ပါ။ စာကြောင်းတွေက English လို ဖြစ်လို့ ကွက်လပ်တွေကို English စကားလုံးနဲ့ ရိုက်ထည့်ပါ:
Compression Types
=================
compression allows the original data to be perfectly reconstructed.
compression achieves higher ratios by permanently discarding some data.
Run-Length Encoding
===================
RLE replaces consecutive identical values with a and pair.
Transform Coding
================
JPEG uses to convert image blocks from spatial to frequency domain.
File Format Classification
==========================
PNG is an example of compression.စာကြောင်းတွေရဲ့ အဓိပ္ပာယ် (____ က ကွက်လပ်ပါ):
____ compression က မူရင်း ဒေတာကို အတိအကျ ပြန်တည်ဆောက်နိုင်စေပါတယ်။
____ compression က ဒေတာ တချို့ကို အပြီးတိုင် ဖယ်ပစ်ပြီး ratio ပိုမြင့်မြင့် ရပါတယ်။
RLE က ဆက်တိုက် တူနေတဲ့ တန်ဖိုးတွေကို ____ နဲ့ ____ အတွဲ တစ်ခုနဲ့ အစားထိုးပါတယ်။
JPEG က ပုံ block တွေကို spatial domain ကနေ frequency domain ကို ပြောင်းဖို့ ____ ကို သုံးပါတယ်။
PNG က ____ compression ရဲ့ ဥပမာ တစ်ခုပါ။
Predict the Output (output ကို ကြိုခန့်မှန်းခြင်း)
အောက်က string ကို Run-Length Encoding သုံးပါ:
Input: AAABBBCCDDDDDDCompress လုပ်ပြီး ထွက်လာမယ့် output က ဘာလဲ။
Practice Exercises (လေ့ကျင့်ခန်းများ)
လေ့ကျင့်ခန်း တစ်ခုစီရဲ့ ရှေ့မှာ အဆင့် ([Core] စသဖြင့်)၊ ခေါင်းစဉ် link နဲ့ [3 marks] လို mark allocation (မေးခွန်း တစ်ခုစီအတွက် ပေးတဲ့ အမှတ်) ပါပါတယ်။ အမှတ်တွေက IB စာမေးပွဲ ပုံစံအတိုင်းပါ: IB သင်တန်း မတက်တဲ့သူတွေကတော့ အဖြေကို ဘယ်လောက် အသေးစိတ် ရေးရမလဲ ပြတဲ့ လမ်းညွှန်အဖြစ် သုံးနိုင်ပါတယ်။
Core (အခြေခံ အဆင့်)
[Core]Compression: lossless[3 marks]အောက်က string တစ်ခုစီကို Run-Length Encoding နဲ့ Apply (သိထားတဲ့ နည်းကို အသုံးချပြီး လုပ်ပြပါ) လုပ်ပါ:RRRRGGGGBBAABBCCXXXXXXX
-
[Core]Compression: lossless[2 marks]အောက်က RLE string ကို မူရင်းအဖြစ် Decode (encode လုပ်ထားတာကို မူရင်းအဖြစ် ပြန်ပြောင်းပါ) လုပ်ပါ:4A2B3C1D [Core]Compression: lossy[6 marks]အောက်က တစ်ခုစီက lossy ဒါမှမဟုတ် lossless compression ကို သုံးလားဆိုတာ State (ဖော်ပြပါ) လုပ်ပါ: ZIP, MP3, PNG, JPEG, FLAC, H.264/AAC နဲ့ encode လုပ်ထားတဲ့ MP4 video။
Extension (တိုးချဲ့ အဆင့်)
[Extension]Compression evaluation[6 marks]JPEG နဲ့ PNG compression ကို Compare (နှစ်ခုလုံးကို ထည့်ပြီး တူတာနဲ့ ကွာတာကို ဖော်ပြပါ) လုပ်ပါ။ အောက်က အခြေအနေ တစ်ခုစီအတွက် ဘယ် format ကို သုံးဖို့ အကြံပြုမလဲ၊ ဘာကြောင့်လဲဆိုတာ explain (ရှင်းပြပါ) လုပ်ပါ:- ခရီးသွား blog တစ်ခုအတွက် နေဝင်ချိန် ဓာတ်ပုံ တစ်ပုံ
- Programming tutorial (သင်ခန်းစာ) တစ်ခုအတွက် source code ရဲ့ screenshot တစ်ပုံ
- နောက်ခံ ကြည်လင် (transparent background) ပါတဲ့ ကုမ္ပဏီ logo တစ်ခု
-
[Extension]Compression: lossless[4 marks]AAAAABBBCCCCCCCCstring (character 16 လုံး) ကို RLE နဲ့ Apply လုပ်ပါ။ Compress လုပ်ပြီး အရှည်နဲ့ compression ratio ကို တွက်ပါ။ [Extension]Compression: lossless[4 marks]RLE ကို lossless compression အဖြစ် ဘာကြောင့် သတ်မှတ်လဲဆိုတာ Explain လုပ်ပါ။ Compress လုပ်ထားတဲ့ version ကနေ မူရင်း ဒေတာကို အတိအကျ ပြန်ရမယ်ဆိုတာ ဘယ်လို အာမခံနိုင်မလဲ။
Challenge (စိန်ခေါ်မှု အဆင့်)
-
[Challenge]Compression evaluation[8 marks]Streaming service တစ်ခုက real-time playback (တိုက်ရိုက် ဖွင့်ပြခြင်း) အတွက် အသံရော video ပါ compress လုပ်ဖို့ လိုပါတယ်။ Media အမျိုးအစား တစ်ခုစီအတွက် bandwidth ကန့်သတ်ချက်၊ အရည်အသွေး လိုအပ်ချက်နဲ့ latency (တောင်းဆိုမှုနဲ့ တုံ့ပြန်မှုကြား နှောင့်နှေးချိန်) ကို ထည့်စဉ်းစားပြီး ဘယ် compression နည်းတွေကို သုံးသင့်လဲဆိုတာ evaluate (အားသာချက်နဲ့ အားနည်းချက်တွေကို ချိန်ဆပြီး အကဲဖြတ်ပါ) လုပ်ပါ။ ပါဝင်တဲ့ trade-off တွေကို Explain လုပ်ပါ။ -
[Challenge]Compression: lossy[7 marks]MPEG က frame တစ်ခုချင်းကို JPEG လို သီးခြားစီ compress လုပ်မယ့်အစား frame အမျိုးအစား သုံးမျိုး (I-frame၊ P-frame နဲ့ B-frame) ကို ဘာကြောင့် သုံးသလဲဆိုတာ Explain လုပ်ပါ။ ဒီနည်းလမ်းက temporal redundancy ကို ဘယ်လို အသုံးချလဲ၊ video ထဲမှာ seeking (သတ်မှတ်ထားတဲ့ အချိန် တစ်နေရာကို ခုန်သွားခြင်း) လုပ်တာအပေါ် ဘယ်လို အကျိုးသက်ရောက်မှုတွေ ရှိလဲ။
ဆက်စပ် ခေါင်းစဉ်များ
- အရင် လေ့လာထားရမယ့် ခေါင်းစဉ်များ: သီးသန့် မရှိပါ (သီးခြား လေ့လာနိုင်တဲ့ ခေါင်းစဉ်)
- ဆက်စပ် ခေါင်းစဉ်: Secondary Storage (ပါဝါပိတ်ပြီးလည်း ဒေတာ ကျန်နေတဲ့ ရေရှည် storage): compression က secondary storage media အားလုံးအတွက် storage လိုအပ်ချက်ကို လျှော့ပေးပါတယ်
- ဆက်စပ် ခေါင်းစဉ်: Cloud Computing (အင်တာနက်ကနေ ငှားသုံးတဲ့ ကွန်ပျူတာ resource): compression က cloud service တွေနဲ့ ဒေတာ ကူးပြောင်းမှုအတွက် bandwidth ကို လျှော့ပေးပါတယ်
- နောက်ထပ် လေ့လာမယ့် ခေါင်းစဉ်: Communication Layer: network ပေါ်မှာ ဒေတာကို ထိထိရောက်ရောက် ပို့ဖို့ compression က မရှိမဖြစ် လိုအပ်ပါတယ်