ความเห็น: 3
การบีบอัดข้อมูล
การบีบอัดข้อมูล (data compression) เป็นกระบวนการเข้ารหัสข้อมูลเพื่อให้ใช้จำนวนบิตในการเก็บข้อมูลน้อยลงกว่าเดิม (ไม่ใช่เพื่อรักษาความลับ) ตรงนี้ที่ใช้คำว่าเข้ารหัสเพราะข้อมูลต้นฉบับกับข้อมูลที่ได้หลังจากบีบอัดแล้วมันจะต่างไปจากเดิม ซึ่งตามจุดประสงค์เดิมของการเข้ารหัสนั้นเพื่อรักษาความลับของข้อมูลข่าวสาร แต่ในกรณีการบีบอัดนั้นมีจุดประสงค์หลักเพื่อให้ขนาดของข้อมูลที่เก็บมีขนาดลดลง
การบีบอัดข้อมูลมีประโยชน์ในการลดปริมาณการใช้ทรัพยากร เช่น ประหยัดพื้นที่ของฮาร์ดดิสก์เมื่อเก็บข้อมูล หรือใช้แบนด์วิดธ์ของระบบเครือข่ายน้อยลงเพื่อส่งข้อมูลที่บีบอัดแล้ว เป็นต้น ในทางตรงข้ามข้อมูลที่ถูกบีบอัด (compress) มาแล้วก็ต้องนำมาคลาย (decompress) หรือถอดรหัสเพื่อให้ได้ข้อมูลเดิมกลับมาก่อนที่จะสามารถนำไปใช้งานได้ ซึ่งกระบวนการดังกล่าวอาจมีผลเสียต่องานบางอย่าง เช่น ข้อมูลวีดีโอที่บีบอัดแล้วอาจต้องการฮาร์ดแวร์ราคาแพงที่สามารถประมวลผลได้เร็วพอที่จะเล่นข้อมูลวีดีโอนั้นได้โดยไม่ติดขัด (ทางเลือกอื่นเช่นการคลายข้อมูลวีดีโอกลับออกมาก่อนแล้วค่อยดูอาจไม่สะดวก และต้องใช้พื้นที่ในการเก็บข้อมูลที่คลายออกมาแล้วเพิ่ม)
หากเราจะเลือกรูปแบบการบีบอัดข้อมูล จะต้องคำนึงถึงตัวแปรหลายๆตัว เช่น ประสิทธิภาพในการบีบอัด อัตราการสูญเสียหรือผิดเพี้ยน(บางคนอาจสงสัยว่าข้อมูลที่บีบอัดมันเพี้ยนด้วยหรือ?อันนี้เดี๋ยวจะอธิบายต่อ) ทรัพยากรที่ต้องใช้ในการบีบอัดหรือคลายข้อมูล เป็นต้น
การบีบอัดแบบ Lossless กับแบบ Lossy
การบีบอัดข้อมูลแบบ Lossless อาศัยหลักการที่ว่าปกติข้อมูลที่ใช้อยู่มักจะมีข้อมูลที่ซ้ำกัน เช่น คำในภาษาอังกฤษมักพบอักษร 'e' ได้บ่อยกว่า 'z' และความเป็นไปได้ที่อักษร 'q' จะตามด้วย 'z' มีน้อยมากๆ ยกตัวอย่างแบบนี้อาจไม่เห็นภาพว่าจะลดข้อมูลได้อย่างไร ผมขอยกตัวอย่างแบบที่ผมคิดเองดีกว่าอย่างในภาษาอังกฤษในบทความหรือหนังสือเล่มหนึ่งจะปรากฏคำว่า the อยู่บ่อยมาก สมมติเราให้เก็บอักษร t แทน the หรืออาจใช้วิธีเก็บตำแหน่งที่ปรากฎคำนั้นๆแทน ก็สามารถลดความยาวข้อมูลที่จะเก็บได้ (อันนี้แค่ยกตัวอย่างให้เห็นแนวคิดแต่จริงๆ algorithm ที่ใช้บีบอัดอาจกระทำกันในระดับบิตเลยนะครับ) จะเห็นว่าการบีบอัดข้อมูลแบบนี้ ข้อมูลต้นฉบับกับข้อมูลที่บีบอัดแล้วคลายออกมาจะเหมือนกันไม่ผิดเพี้ยน
การบีบอัดข้อมูลแบบ Lossy จะมีแนวคิดต่างกันไป โดยใช้หลักว่าความผิดเพี้ยนของข้อมูลเล็กน้อยเป็นสิ่งที่ยอมรับได้ เช่น ตาของมนุษย์ไม่สามารถแยกความแตกต่างของบางสีได้หมด ก็ไม่จำเป็นต้องเก็บข้อมูลทุกสีทุกตำแหน่ง เก็บเพียงบางสีที่แยกความแตกต่างได้ก็พอ ดังจะเห็นตัวอย่างจากไฟล์ประเภท jpg ใช้การบีบอัดข้อมูลแบบ Lossy จะทำให้ได้ขนาดไฟล์ภาพที่เล็กลงมาก แต่ก็สูญเสียรายละเอียดบางอย่างไป (รายละเอียดที่เสียไปคือสีที่มนุษย์ไม่สามารถแยกความแตกต่างได้) จะเห็นว่าการบีบอัดข้อมูลแบบ Lossy มักจะใช้กับข้อมูลที่มนุษย์รับรู้ อีกตัวอย่างหนึ่ง คือ ไฟล์เสียงประเภท mp3 ซึ่งทำการตัดเสียงในย่านความถี่ที่มนุษย์ไม่สามารถได้ยินออกไป
ยกตัวอย่างง่ายๆเพื่อเทียบการบีบอัดข้อมูลแบบ lossless กับ lossy เช่น 25.888888888 อาจบีบอัดให้เหลือ 25.[9]8 (9 ในปีกกาหมายถึงมี 8 จำนวน 9 ตัว) ซึ่งสามารถแปลงกลับเป็นข้อมูลเดิมได้ไม่ผิดเพี้ยน (lossless) ในขณะที่ถ้าหากสามารถยอมรับได้ว่าข้อมูลผิดเพี้ยนไปบ้างก็ไม่เป็นไรก็อาจบีบอัดให้เหลือ 26 ซึ่งจะเห็นว่าประหยัดพื้นที่การเก็บข้อมูลได้เยอะกว่า แต่ขณะเดียวกันข้อมูลจะไม่เหมือนเดิมเสียทีเดียว (lossy)
ข้อควรทราบอีกอย่างคือ การบีบอัดข้อมูลที่บีบอัดมาแล้ว ไม่คุ้มค่านัก เพราะขนาดของไฟล์จะเล็กลงไม่มาก บางครั้งอาจใหญ่ขึ้นด้วย (ในการบีบอัดก็มี overhead นะครับ) นอกจากนี้ยังเสียเวลาที่จะต้องมาคลายข้อมูลอีกด้วย
algorithm ที่นิยมใช้ในการบีบอัดแบบ lossless คือ Lempel-Ziv (LZ) และ DEFLATE ซึ่งพัฒนาต่อจาก LZ เพื่อให้บีบอัดข้อมูลได้มากขึ้นและคลายข้อมูลออกมาได้เร็วขึ้น แต่ขณะเดียวกันก็เสียเวลาในการบีบอัดมากขึ้นอีกหน่อย (ไม่มีอะไรที่ได้มาฟรีๆ) DEFLATE ถูกใช้ใน PKZIP, gzip และ PNG (ดังๆทั้งนั้นนะครับ PKZIP เป็นโปรแกรมบีบอัดแรกๆเลยที่ได้รับความนิยม คนมีอายุหน่อยจะรู้ อิอิ gzip ก็เช่นกันแต่ใช้ในระบบ unix ส่วน PNG เป็นรูปแบบไฟล์ภาพ) algorithm ที่ควรจะกล่าวถึงอีก คือ LZW (Lempel-Ziv-Welch) ซึ่งใช้ในไฟล์ภาพ GIF และที่รู้จักกันดีอีกตัว(ใครรู้จักหว่า) คือ LZR (LZ-Renau)
วิธีการบีบอัดแบบ LZ ต่างๆ ที่กล่าวมาใช้หลักการบีบอัดแบบ table-based compression model ซึ่งข้อมูลในตารางจะแทนค่าตัวอักษรหรือข้อมูลที่ซ้ำกัน โดยส่วนใหญ่ตารางนี้จะถูกสร้างขึ้นมาจากข้อมูลที่รับเข้าไป อีกรูปแบบของ LZ ที่ใช้ได้ดี คือ LZX ซึ่งถูกใช้ในไฟล์ CAB ของไมโครซอฟต์
บันทึกอื่นๆ
- เก่ากว่า « การเพิ่ม DataColumn ใน DataTable
- ใหม่กว่า » ฉลองวันวาเลนไทน์กับไวรัส
ความเห็น
![]() |
ขอรบกวนถามว่า
พอจะมีข้อมูลการบีบอัดข้อมูลแบบลงลึก
ขั้นการเข้ารหัส หรือเปล่าค่ะ
1.การบีบอัดข้อมูลแบบ Lossy
2.การบีบอัดข้อมูลแบบLosess
ถ้ามี ช่วยกรุณาส่งเมลล์มาให้หน่อยนะค่ะ
ขอบคุณล่วงหน้าค่ะ
ตอนนี้สนใจศึกษาเรื่องนี้อยู่ค่ะ
Email:pumpui_foto@hotmail.com
12 กุมภาพันธ์ 2551 12:32
#20050
พูดถึงการบีบอัดข้อมูลทำให้คิดถึงสมัยก่อน 10 กว่าปี มาแล้ว ยังใช้แผ่น disk ขนาด 3.5 นิ้วกันอยู่ ยังชอบโปรแกรม pkzip และ pkunzip อยู่เลย สมัยนั้น มันเป็นอะไรที่อัศจรรย์มากๆ ครับ ... การสั่งงานผ่านที่ dos คำสั่งจะมีประมาณว่า
การย่อไฟล์
c:\> pkzip ชื่อไฟล์ที่ต้องการย่อ ที่เก็บปลายทาง
การขยายไฟล์
c:/> pkunzip ชื่อไฟล์ที่ย่อไว้
จำได้คร่าวๆ ลืมหมดแล้ว สมัยนี้ การย่อไฟล์ง่ายมาก แค่ลัดนิ้วมือ ... เราจะได้มาแล้ว แถบการ Copy และ ขยายไฟล์ ยังง่ายสุดๆ ด้วย