ด้วยเหตุนี้ข้อมูลจึงถูกบีบอัด เหตุใดจึงจำเป็น? การบีบอัดโดยไม่ใช้วิธี RLE

วัตถุประสงค์ของบทเรียน: เพื่อพัฒนาความเอาใจใส่ สติปัญญา และปลูกฝังความสนใจในวิชานี้
อุปกรณ์ : คอมพิวเตอร์ ดิสก์ห้องปฏิบัติการ เหมาะสม ซอฟต์แวร์การ์ดที่มีภารกิจทดสอบ

ความคืบหน้าของบทเรียน

1. ส่วนองค์กร
2. การอัพเดตความรู้พื้นฐาน
3. การเรียนรู้เนื้อหาใหม่
4. การรวมวัสดุใหม่
5. การบ้าน.
6. สรุปบทเรียน

การเรียนรู้เนื้อหาใหม่

1. การเก็บถาวรคืออะไร แนวคิดของการบีบอัดข้อมูล
2. โปรแกรม Archiver ประเภทหลัก
3. โปรแกรมเก็บถาวร WIN-RAR
4. วิธีเพิ่มไฟล์ลงในไฟล์เก็บถาวรรวมถึงแตกไฟล์ออกจากไฟล์เก็บถาวร

ด้วยการพัฒนา เทคโนโลยีสารสนเทศคำถามเกี่ยวกับวิธีการจัดเก็บข้อมูลกลายเป็นเรื่องเฉียบพลัน ตั้งแต่ทศวรรษที่ 40 ของศตวรรษที่ 20 นักวิทยาศาสตร์ได้พัฒนาวิธีการนำเสนอข้อมูลซึ่งจะใช้พื้นที่ในสื่อบันทึกข้อมูลอย่างประหยัดมากขึ้น ผลลัพธ์ที่ได้คือเทคโนโลยีการบีบอัดข้อมูลและการเก็บข้อมูล (สำรอง)

การเก็บข้อมูลถาวรคือการรวมไฟล์หรือไดเร็กทอรีหลาย ๆ ไฟล์ไว้ในไฟล์เก็บถาวรไฟล์เดียว

การบีบอัดข้อมูล - ลดขนาดของไฟล์ต้นฉบับโดยกำจัดข้อมูลที่ซ้ำซ้อน

ในการทำงานเหล่านี้มีโปรแกรมเก็บถาวรที่ให้ไว้ การบีบอัดข้อมูล: โดยเฉพาะการเก็บถาวรไฟล์ การใช้อัลกอริธึมพิเศษ ผู้จัดเก็บจะลบข้อมูลที่ซ้ำซ้อนทั้งหมดออกจากไฟล์ และในระหว่างการดำเนินการคลายแพ็กแบบย้อนกลับ จะกู้คืนข้อมูลในรูปแบบดั้งเดิม ขนาด ไฟล์บีบอัดน้อยกว่าไฟล์ต้นฉบับถึงสองถึงสิบเท่า ในกรณีนี้ การบีบอัดและการกู้คืนข้อมูลจะเกิดขึ้นโดยไม่มีการสูญเสีย การบีบอัดแบบไม่สูญเสียข้อมูลมีความเกี่ยวข้องเมื่อทำงานกับข้อความและไฟล์โปรแกรม และในงานการเข้ารหัส นอกจากนี้ยังมีวิธีการบีบอัดแบบสูญเสียข้อมูลอีกด้วย

ระดับการบีบอัดขึ้นอยู่กับประเภทของไฟล์และโปรแกรม Archiver ส่วนใหญ่แล้วจะหดตัว ไฟล์ข้อความอย่างน้อยที่สุดก็คือไฟล์เสียงและวิดีโอ

การเก็บถาวรไฟล์ งาน

จนถึงขณะนี้ เราได้พูดถึงจุดประสงค์หนึ่งของการเก็บถาวรข้อมูล - ประหยัดกว่าการใช้สื่อจัดเก็บข้อมูล อย่างไรก็ตาม ด้วยความช่วยเหลือของการเก็บถาวร คุณสามารถทำงานต่างๆ ได้มากมาย:
1. การลดปริมาณไฟล์ (เกี่ยวข้องไม่เพียงแต่สำหรับการประหยัดพื้นที่บนสื่อเท่านั้น แต่ยังรวมถึงการถ่ายโอนไฟล์ผ่านเครือข่ายอย่างรวดเร็วด้วย)
2. สำรองข้อมูลไปยังสื่อภายนอกเพื่อจัดเก็บข้อมูลสำคัญ

3. การเก็บถาวรเมื่อเข้ารหัสข้อมูลเพื่อลดโอกาสในการแฮ็กระบบเข้ารหัส

กระบวนการบันทึกข้อมูลลงในไฟล์เก็บถาวรเรียกว่าการเก็บถาวร
แยกไฟล์ออกจากไฟล์เก็บถาวร - คลายซิป

โปรแกรม Archiver แรกปรากฏในช่วงกลางทศวรรษที่ 80 พวกเขามุ่งเน้นไปที่การทำงานใน MS-DOC และรองรับรูปแบบไฟล์เก็บถาวรยอดนิยม: ARC, ICE, ARJ, ZIP และ RAR เป็นต้น นอกจากนี้ยังมีกลุ่มผู้จัดเก็บที่บรรจุข้อมูลลงในไฟล์เก็บถาวรแบบขยายตัวเอง - ไฟล์ที่มีนามสกุล เอ๊ะ.. ดอทคอม ผู้จัดเก็บถาวรถูกสร้างขึ้นเพื่อบีบอัดดิสก์ทั้งหมด ทำให้สามารถเพิ่มประสิทธิภาพการใช้พื้นที่ดิสก์ได้โดยการสร้างไฟล์เก็บถาวรขนาดใหญ่ - ดิสก์ "บีบอัด"

การทำงานกับไฟล์เก็บถาวรสะดวกยิ่งขึ้นด้วยการกำเนิดของไฟล์เก็บถาวรเวอร์ชัน Windows และ Windows จากรูปแบบเอกสารสำคัญในอดีตหมู่ ผู้ใช้วินโดวส์ ARJ, ZIP - โปรแกรมที่แตกไฟล์ได้หยั่งรากจริงๆ ไฟล์เก็บถาวรขนาดใหญ่สามารถวางลงในฟล็อปปี้ดิสก์หลายแผ่น (วอลุ่ม) ไฟล์เก็บถาวรดังกล่าวเรียกว่าหลายวอลุ่ม

ปริมาณเป็นส่วนประกอบ ไฟล์เก็บถาวรหลายวอลุ่ม.

ขณะนี้มีโปรแกรม Archiver ที่ใช้งานอยู่หลายสิบโปรแกรมซึ่งมีรายการฟังก์ชั่นและพารามิเตอร์การทำงานที่แตกต่างกัน แต่โปรแกรมที่ดีที่สุดจะมีลักษณะที่เหมือนกันโดยประมาณ เรารู้ว่าการบรรจุและคลายไฟล์จะดำเนินการโดยโปรแกรมเดียวกัน แต่ในบางกรณีก็เสร็จสิ้น โปรแกรมที่แตกต่างกันตัวอย่างเช่น โปรแกรม RKZIP จะแพ็กไฟล์ และ RKUNZIP จะแตกไฟล์
โปรแกรมเก็บถาวรช่วยให้คุณสร้างไฟล์เก็บถาวรโดยคุณไม่จำเป็นต้องใช้โปรแกรมใด ๆ เพื่อแตกไฟล์ เนื่องจากไฟล์เก็บถาวรมีโปรแกรมที่ขยายในตัว ไฟล์เก็บถาวรดังกล่าวเรียกว่าไฟล์เก็บถาวร SFX

การวางไฟล์ในไฟล์เก็บถาวร: เริ่มโปรแกรม WINRAR หรือเป็นทางลัดบนเดสก์ท็อป

โปรแกรมเก็บถาวรสากล WINRAR

โปรแกรมเก็บถาวร WINRAR ยังได้รับการออกแบบสำหรับการเก็บถาวรไฟล์ มีเปลือกกราฟิกที่สะดวกสบายและรองรับเทคโนโลยี Drag และดรอป- โปรแกรม WINRAR ช่วยให้คุณทำงานได้ไม่เพียงกับไฟล์เก็บถาวร rar เท่านั้น แต่ยังรวมถึงรูปแบบไฟล์เก็บถาวรอื่น ๆ เช่น zip, cab, arj, lzh WINRAR เปิดตัวโดยใด ๆ ของ วิธีที่เป็นไปได้ที่ให้ไว้ใน Windows เปิดโปรแกรมโดยใช้เมนูหลักของปุ่ม Start Programs WINRAR WINRAR หรือใช้ทางลัดบนเดสก์ท็อป

ทดสอบการสำรวจพื้นฐานการทำงานกับดิสก์
การบ้าน.
การวิเคราะห์บทเรียนด้วยตนเอง

ในการทำงานเหล่านี้ มีโปรแกรมการเก็บถาวรที่ให้ทั้งการเก็บถาวรและการบีบอัดข้อมูลการใช้อัลกอริธึมพิเศษ ผู้จัดเก็บจะลบข้อมูลที่ซ้ำซ้อนทั้งหมดออกจากไฟล์ และในระหว่างการดำเนินการคลายแพ็กแบบย้อนกลับ จะกู้คืนข้อมูลในรูปแบบดั้งเดิม ขนาดของไฟล์บีบอัดจะเล็กกว่าไฟล์ต้นฉบับสองถึงสิบเท่า

วิธีการบีบอัดข้อมูล

วิธีการบีบอัดข้อมูลทั้งหมดสามารถแบ่งออกเป็นสองคลาสขนาดใหญ่ที่ไม่ทับซ้อนกัน: การบีบอัดข้อมูลสูญหาย และการบีบอัดข้อมูลโดยไม่สูญเสียข้อมูล

การบีบอัดแบบสูญเสียหมายความว่าหลังจากคลายไฟล์เก็บถาวรแล้วคุณจะได้รับเอกสารที่แตกต่างจากต้นฉบับเล็กน้อย ยิ่งมีการบีบอัดมากเท่าใดก็ยิ่งสูญเสียมากขึ้นตามไปด้วย วิธีการดังกล่าวจะใช้เมื่อสามารถเสียสละข้อมูลเพียงไม่กี่เปอร์เซ็นต์สำหรับภาพถ่าย ข้อมูลวิดีโอ และเพลง ด้วยการสูญเสียข้อมูลไปหลายเปอร์เซ็นต์ทำให้สามารถบีบอัดได้หลายสิบครั้ง 10 - 15 สำหรับเพลงและ
20 - 30 สำหรับภาพถ่ายและวิดีโอ

อัลกอริทึมของคลาสนี้รวมถึงอัลกอริทึม เจเพ็กและ MPEG.อัลกอริทึม เจเพ็กใช้บีบอัดรูปภาพภาพถ่าย (กราฟิก) ไฟล์กราฟิกบีบอัดโดยอัลกอริธึมนี้มีส่วนขยาย JPGอัลกอริทึม MPEGใช้สำหรับการบีบอัดวิดีโอและเพลง ไฟล์บีบอัดจะมีนามสกุล เอ็มพีจีสำหรับวิดีโอและ เอ็มพี3สำหรับดนตรี

อัลกอริธึมการบีบอัดแบบ Lossy ใช้เพื่อวัตถุประสงค์ของผู้บริโภคเท่านั้น กล่าวคือ สำหรับการดูกราฟิกและการฟังเพลง หากข้อมูลนี้อยู่ภายใต้การประมวลผลเพิ่มเติม (แก้ไข) จะต้องใช้อัลกอริธึมโดยไม่สูญเสียข้อมูล

การบีบอัดโดยไม่สูญเสียข้อมูลหมายความว่าหลังจากคลายแพ็กแล้วจะได้ไฟล์ที่ตรงกับไฟล์ต้นฉบับทุกประการ วิธีนี้ใช้ในการบีบอัดเอกสารข้อความ การแจกแจงโปรแกรม การสร้าง สำเนาสำรองข้อมูลที่จัดเก็บไว้ในดิสก์ เมื่อถ่ายโอนข้อมูลไปยังสื่อภายนอก เมื่อถ่ายโอนผ่าน อีเมลฯลฯ

วิธีการบีบอัดที่ไม่อนุญาตให้สูญเสียข้อมูลจะขึ้นอยู่กับการกำจัดข้อมูลที่ซ้ำซ้อน

อัลกอริธึมของฮัฟแมนขึ้นอยู่กับการบันทึกข้อมูล เมื่อเข้ารหัสข้อมูลโดยใช้ตาราง ASCII จะใช้จำนวนบิตเท่ากันในการเข้ารหัสอักขระใดๆ - 8 แต่มีอักขระบางตัวที่เกิดขึ้นบ่อยครั้ง เช่น A หรือ O และที่เกิดขึ้นน้อยครั้ง โปรแกรมสำหรับการบีบอัดข้อมูลจะมีตารางการแปลงอักขระเป็นของตัวเอง โดยมีจำนวนบิตน้อยกว่า และกำหนดให้กับไฟล์บีบอัด

อัลกอริทึมหรือ วิธีการ RLE (การเข้ารหัสความยาวรัน)ขึ้นอยู่กับการระบุลำดับการทำซ้ำ ใน เอกสารข้อความลำดับการทำซ้ำนั้นหาได้ยาก แต่ค่อนข้างพบได้ทั่วไปในตาราง เช่น การซ้ำของตัวเลขเดียวกัน ในกรณีนี้ แทนที่จะใส่ลำดับ ให้ใส่ค่าสัมประสิทธิ์และตัวเลขนี้

ลำดับการทำซ้ำขนาดใหญ่ของไบต์ที่เหมือนกันจะพบได้ในกราฟิกที่มีสีเรียบ เช่น การ์ตูน

การบีบอัดข้อมูลบนฮาร์ดไดรฟ์อาจมีอยู่ ไม่ได้ขึ้นอยู่กับการกำจัดความซ้ำซ้อนแต่อยู่บนหลักการวางข้อมูลลงดิสก์ ใน ระบบไฟล์ขนาดคลัสเตอร์ FAT สามารถมีได้สูงสุด 32 KB เมื่อเขียนข้อมูล ไฟล์จะครอบครองทั้งคลัสเตอร์เสมอ ไม่ว่าไฟล์จะมีขนาดเท่าใดก็ตาม ดังนั้นเมื่อทำการบีบอัดข้อมูลจึงสามารถเขียนใกล้กันได้

โปรแกรมเก็บถาวรอนุญาต (ชุดฟังก์ชันมาตรฐาน):

สร้างไฟล์เก็บถาวร กล่าวคือ วางกลุ่มของไฟล์ไว้ในไฟล์เดียว

คลายไฟล์เก็บถาวรนั่นคือวางไฟล์เก็บถาวรทั้งหมดไว้ในโฟลเดอร์ที่ระบุ

แยกไฟล์ที่เลือกจากไฟล์เก็บถาวรไปยังไดเร็กทอรีที่ระบุ

ดูสารบัญของไฟล์เก็บถาวร

เพิ่มไฟล์ใหม่

อัปเดตไฟล์ในไฟล์เก็บถาวร

ลบไฟล์ออกจากไฟล์เก็บถาวร

สร้างไฟล์เก็บถาวรแบบขยายตัวเอง

สร้างไฟล์เก็บถาวรหลายวอลุ่ม

ไฟล์เก็บถาวรแบบขยายตัวเองเป็นไฟล์เก็บถาวรที่สามารถแตกไฟล์ได้โดยไม่ต้องใช้โปรแกรมเก็บถาวร เพื่อจุดประสงค์นี้บล็อกซอฟต์แวร์พิเศษจะถูกเพิ่มเข้าไปในไฟล์เก็บถาวรซึ่งทำการคลายไฟล์ ไฟล์เก็บถาวรมีนามสกุล อีเอ็กซ์อีมักใช้เพื่อสร้างการแจกจ่ายซอฟต์แวร์

ไฟล์เก็บถาวรทั่วไปมี สารบัญซึ่งมีข้อมูลต่อไปนี้สำหรับแต่ละไฟล์:

ชื่อไฟล์ อาจเป็นชื่อโฟลเดอร์

วันที่และเวลาของการแก้ไขไฟล์ครั้งล่าสุด

ขนาดไฟล์บนดิสก์ในไฟล์เก็บถาวร อัตราส่วนการบีบอัด

รหัสควบคุมแบบวนซึ่งใช้เพื่อตรวจสอบความสมบูรณ์ของไฟล์เก็บถาวร

องค์ประกอบของข้อมูลขึ้นอยู่กับโปรแกรมผู้จัดเก็บ

โปรแกรมสำหรับเก็บข้อมูลใน Windows เป็นที่รู้จักอย่างกว้างขวาง WinZipและ วินราร์

โปรแกรมมีส่วนต่อประสานที่ใช้งานง่าย ดำเนินการชุดฟังก์ชันมาตรฐาน และอนุญาตให้คุณดูไฟล์ก่อนทำการแตกไฟล์ ทีม ข้อมูลให้ข้อมูลเกี่ยวกับไฟล์เก็บถาวร: จำนวนไฟล์, ระดับการบีบอัด ฯลฯ

ทีม เพิ่ม (เพิ่ม)ช่วยให้คุณทั้งสร้างไฟล์เก็บถาวรใหม่และเพิ่มลงในไฟล์เก็บถาวร

วิธีการอัพเดต:

- เพิ่มและแทนที่(เพิ่ม และแทนที่ไฟล์) – ไฟล์ที่เลือกทั้งหมดจะรวมอยู่ในไฟล์เก็บถาวร หากมีไฟล์อยู่ ไฟล์นั้นจะถูกแทนที่ด้วยไฟล์ใหม่

- อัปเดตที่เก็บถาวร(ไฟล์ที่มีอยู่ใหม่) - เฉพาะไฟล์ที่มีอยู่ในไฟล์เก็บถาวรเท่านั้นที่จะรวมอยู่ในไฟล์เก็บถาวร

- เพิ่มด้วยการอัพเดต(อัปเดตและเพิ่มไฟล์) – หากไฟล์อยู่ในไฟล์เก็บถาวรอยู่แล้ว จะมีการเปรียบเทียบวันที่ของไฟล์ขาเข้าและไฟล์เก็บถาวร ไฟล์นั้นจะรวมอยู่ในไฟล์เก็บถาวรหากวันที่ของไฟล์ขาเข้าช้ากว่าในไฟล์เก็บถาวร หากไฟล์ไม่อยู่ในไฟล์เก็บถาวร ไฟล์นั้นจะถูกเพิ่ม

- ย้ายไปเก็บถาวร(ย้ายไฟล์) – หลังจากเก็บถาวร ไฟล์จะถูกลบออกจากดิสก์

วิธีการบีบอัด:ธรรมดา รวดเร็ว ดี ไม่มีการบีบอัด

การเก็บถาวรสามารถดำเนินการได้โดยอัตโนมัติตามกำหนดเวลาที่สร้างไว้ล่วงหน้า ในการทำเช่นนี้คุณต้องสร้าง งานที่ได้รับมอบหมาย ( ไฟล์แบตช์), ตอบคำถามของอาจารย์

เมื่อวานนี้ดูเหมือนว่าดิสก์ขนาดหนึ่งกิกะไบต์มีขนาดใหญ่มากจนไม่ชัดเจนว่าจะเติมอย่างไรและแน่นอนว่าทุกคนคิดกับตัวเอง: ถ้าเพียงฉันมีหน่วยความจำกิกะไบต์ฉันก็จะเลิก "โลภ" ” และบีบอัดข้อมูลของฉันด้วยสิ่งที่เหมือนกับผู้เก็บเอกสาร แต่เห็นได้ชัดว่าโลกมีโครงสร้างในลักษณะที่ "สถานที่ศักดิ์สิทธิ์ไม่เคยว่างเปล่า" และทันทีที่เรามีกิกะไบต์พิเศษ เราก็จะพบบางสิ่งที่จะเติมเต็มทันที และอย่างที่ทราบกันดีว่าตัวโปรแกรมเองก็มีจำนวนเพิ่มมากขึ้นเรื่อยๆ เห็นได้ชัดว่าสิ่งเดียวกันนี้จะเกิดขึ้นกับเทราไบต์และเอ็กซาไบต์

ดังนั้นไม่ว่าหน่วยความจำดิสก์จะเพิ่มขึ้นเท่าใด ดูเหมือนว่าพวกเขาจะไม่หยุดบรรจุข้อมูล ในทางตรงกันข้ามเมื่อ "พื้นที่ในคอมพิวเตอร์" มีจำนวนมากขึ้นเรื่อย ๆ จำนวนผู้จัดเก็บใหม่ก็เพิ่มขึ้นในขณะที่นักพัฒนาไม่เพียงแค่แข่งขันในเรื่องความสะดวกสบายของอินเทอร์เฟซเท่านั้น แต่ก่อนอื่นมุ่งมั่นที่จะบรรจุข้อมูลให้หนาแน่นมากขึ้นเรื่อย ๆ

อย่างไรก็ตาม เห็นได้ชัดว่ากระบวนการนี้ไม่มีที่สิ้นสุด ขีด จำกัด นี้อยู่ที่ไหนผู้จัดเก็บที่มีอยู่ในปัจจุบันพารามิเตอร์ใดที่พวกเขาแข่งขันกันจะหาผู้จัดเก็บใหม่ได้ที่ไหนซึ่งยังไม่ชัดเจน รายการทั้งหมดปัญหาที่กล่าวถึงในบทความนี้ นอกเหนือจากการพิจารณาประเด็นทางทฤษฎีแล้ว เรายังได้เลือกผู้จัดเก็บที่สามารถดาวน์โหลดได้จากดิสก์ของเรา เพื่อดูประสิทธิภาพของโปรแกรมใดโปรแกรมหนึ่งด้วยตัวคุณเอง และเลือกโปรแกรมที่เหมาะสมที่สุด ขึ้นอยู่กับลักษณะเฉพาะของงานที่คุณแก้ไข

เป็นเพียงทฤษฎีเล็กๆ น้อยๆ สำหรับผู้ไม่ใช่มืออาชีพ

ฉันขอเริ่มหัวข้อที่จริงจังนี้ด้วยเรื่องตลกเก่าๆ ลูกสมุนสองคนกำลังคุยกัน:

คุณช่วยบอกหมายเลขโทรศัพท์ของคุณหน่อยได้ไหม? - พูดอย่างหนึ่ง

เธอก็รู้” คนที่สองยอมรับ “น่าเสียดายที่ฉันจำเขาไม่ได้แน่ชัด”

น่าเสียดาย” คนแรกคร่ำครวญ “เอาน่า อย่างน้อยก็ประมาณ...

แท้จริงแล้วคำตอบนั้นน่าทึ่งในความไร้สาระของมัน เห็นได้ชัดว่าในชุดตัวเลขเจ็ดหลักก็เพียงพอที่จะทำผิดพลาดในอักขระหนึ่งตัวเพื่อให้ข้อมูลที่เหลือไร้ประโยชน์โดยสิ้นเชิง อย่างไรก็ตามลองจินตนาการว่าหมายเลขโทรศัพท์เดียวกันนั้นเขียนด้วยคำภาษารัสเซียและพูดว่าเมื่อส่งข้อความนี้ตัวอักษรบางตัวจะหายไป - จะเกิดอะไรขึ้นในกรณีเช่นนี้? เพื่อความชัดเจน ลองดูตัวอย่างที่เฉพาะเจาะจง: หมายเลขโทรศัพท์ 233 34 44.

ดังนั้นรายการ "สองร้อยสามสามสามสี่สิบสาม" ซึ่งไม่มีอักขระหนึ่งตัว แต่มีอักขระหายไปหลายตัวจึงยังคงอ่านได้ง่าย นี่เป็นเพราะความจริงที่ว่าภาษาของเรามีความซ้ำซ้อนซึ่งในด้านหนึ่งจะเพิ่มความยาวของบันทึกและอีกด้านหนึ่งจะเพิ่มความน่าเชื่อถือของการส่งสัญญาณ สิ่งนี้อธิบายได้จากข้อเท็จจริงที่ว่าความน่าจะเป็นของการปรากฏตัวของอักขระแต่ละตัวที่ตามมาในการบันทึกแบบดิจิทัลของโทรศัพท์จะเท่ากันในขณะที่ข้อความที่เขียนด้วยคำภาษารัสเซียไม่เป็นเช่นนั้น ตัวอย่างเช่นเห็นได้ชัดว่าเครื่องหมายยากในภาษารัสเซียปรากฏน้อยกว่าตัวอักษร "a" มาก ยิ่งไปกว่านั้น การผสมตัวอักษรบางตัวเข้าด้วยกันมีความเป็นไปได้มากกว่าการผสมตัวอักษรอื่นๆ และโดยหลักการแล้ว เช่น อักขระทึบสองตัวเรียงกันนั้นเป็นไปไม่ได้ในหลักการ และอื่นๆ เมื่อทราบความน่าจะเป็นของตัวอักษรใด ๆ ที่ปรากฏในข้อความและเปรียบเทียบกับค่าสูงสุด คุณสามารถกำหนดได้ว่าประหยัดแค่ไหน วิธีนี้การเข้ารหัส (ในกรณีของเรา - ภาษารัสเซีย)

ประเด็นที่ชัดเจนอีกประการหนึ่งสามารถทำได้โดยกลับไปที่ตัวอย่างทางโทรศัพท์ เพื่อที่จะจำตัวเลข เรามักจะมองหารูปแบบในชุดตัวเลข ซึ่งโดยหลักการแล้วก็คือความพยายามในการบีบอัดข้อมูลด้วย ค่อนข้างสมเหตุสมผลที่จะจำหมายเลขโทรศัพท์ที่กล่าวมาข้างต้นว่า "สองสามสามสามสี่"

ความซ้ำซ้อนของภาษาธรรมชาติ

ทฤษฎีสารสนเทศระบุว่า ยิ่งเอนโทรปีของข้อความมากเท่าใด ข้อมูลก็จะยิ่งมีมากขึ้นเท่านั้น สำหรับระบบการเข้ารหัสใดๆ เราสามารถประมาณค่าสูงสุดได้ ความจุข้อมูล(Hmax) และเอนโทรปีจริง (H) แล้วกรณี H

R = (Hสูงสุด - H)/ Hสูงสุด

การวัดความซ้ำซ้อนของภาษาธรรมชาติ (ที่เราพูด) ให้ผลลัพธ์ที่น่าอัศจรรย์: ปรากฎว่าความซ้ำซ้อนของภาษาเหล่านี้อยู่ที่ประมาณ 80% ซึ่งบ่งชี้ว่าเกือบ 80% ของข้อมูลที่ส่งโดยใช้ภาษานั้นซ้ำซ้อน คือฟุ่มเฟือย เป็นที่น่าสนใจว่าอัตราการซ้ำซ้อนของภาษาต่าง ๆ นั้นใกล้เคียงกันมาก ตัวเลขนี้ประมาณกำหนดขีดจำกัดทางทฤษฎีของการบีบอัดไฟล์ข้อความ

การบีบอัดแบบสูญเสีย

เมื่อพูดถึงโค้ดการบีบอัด จะมีความแตกต่างระหว่าง "การบีบอัดแบบไม่สูญเสียข้อมูล" และ "การบีบอัดแบบสูญเสียข้อมูล" เห็นได้ชัดว่าเมื่อเราจัดการกับข้อมูลเช่น "หมายเลขโทรศัพท์" การบีบอัดบันทึกดังกล่าวเนื่องจากการสูญเสียอักขระบางตัวไม่ได้นำไปสู่สิ่งที่ดี อย่างไรก็ตาม มีความเป็นไปได้ที่จะจินตนาการถึงสถานการณ์ต่างๆ ที่การสูญเสียข้อมูลบางอย่างไม่ได้นำไปสู่การสูญเสียประโยชน์ของข้อมูลที่เหลืออยู่ การบีบอัดแบบ Lossy ส่วนใหญ่จะใช้สำหรับกราฟิก (JPEG), เสียง (MP3), วิดีโอ (MPEG) นั่นคือเนื่องจากขนาดไฟล์ที่ใหญ่อัตราส่วนการบีบอัดจึงมีความสำคัญมากและคุณสามารถเสียสละรายละเอียดที่ไม่จำเป็นสำหรับ การรับรู้ของมนุษย์ต่อข้อมูลนี้ โอกาสพิเศษสำหรับการบีบอัดข้อมูลมีอยู่ในการบีบอัดวิดีโอ ในบางกรณี รูปภาพส่วนใหญ่จะถูกถ่ายโอนจากเฟรมหนึ่งไปอีกเฟรมหนึ่งโดยไม่มีการเปลี่ยนแปลง ซึ่งทำให้สามารถสร้างอัลกอริธึมการบีบอัดตามการติดตามแบบเลือกสรรของ "รูปภาพ" เพียงบางส่วนเท่านั้น ในกรณีพิเศษคือรูปภาพ ผู้ชายกำลังพูดซึ่งไม่เปลี่ยนตำแหน่งสามารถอัพเดตได้เฉพาะบริเวณใบหน้าหรือแม้แต่ปากเท่านั้นนั่นคือในส่วนที่การเปลี่ยนแปลงอย่างรวดเร็วที่สุดเกิดขึ้นจากเฟรมหนึ่งไปอีกเฟรมหนึ่ง

ในหลายกรณี การบีบอัดกราฟิกที่สูญเสียซึ่งมีการบีบอัดในระดับที่สูงมากนั้นแทบจะมองไม่เห็นโดยมนุษย์ ดังนั้น จากภาพถ่ายสามภาพที่แสดงด้านล่าง ภาพแรกจะแสดงในรูปแบบ TIFF (รูปแบบ lossless) ภาพที่สองจะถูกบันทึกในรูปแบบ JPEG โดยมีการตั้งค่าการบีบอัดขั้นต่ำ และภาพที่สามมีการตั้งค่าสูงสุด ในกรณีนี้ คุณจะเห็นว่าภาพสุดท้ายใช้พื้นที่เกือบสองลำดับที่มีขนาดน้อยกว่าภาพแรก อย่างไรก็ตาม วิธีการบีบอัดแบบสูญเสียก็มีข้อเสียหลายประการเช่นกัน

ประการแรกคือการบีบอัดแบบสูญเสียไม่สามารถใช้ได้กับกรณีการวิเคราะห์ทั้งหมด ข้อมูลกราฟิก- ตัวอย่างเช่น หากรูปร่างของไฝบนใบหน้าเปลี่ยนแปลงไปจากการบีบอัดภาพ (แต่ใบหน้ายังคงจดจำได้อย่างสมบูรณ์) จากนั้นรูปถ่ายนี้จะเป็นที่ยอมรับในการส่งทางไปรษณีย์ให้เพื่อน ๆ แต่ถ้าเป็นรูปถ่ายของ ปอดถูกส่งไปตรวจร่างกายเพื่อวิเคราะห์รูปร่างของความคล้ำนี้แล้ว มันเป็นเรื่องที่แตกต่างไปจากเดิมอย่างสิ้นเชิง นอกจากนี้ ในกรณีของวิธีการของเครื่องจักรในการวิเคราะห์ข้อมูลกราฟิก ผลลัพธ์ของการเข้ารหัสที่สูญเสีย (มองไม่เห็นด้วยตา) อาจ "มองเห็นได้" ในเครื่องวิเคราะห์

เหตุผลที่สองคือการบีบอัดและการบีบอัดซ้ำ ๆ โดยมีการสูญเสียทำให้เกิดข้อผิดพลาดสะสม ในแง่ของการบังคับใช้ รูปแบบ JPEGเห็นได้ชัดว่ามีประโยชน์ในกรณีที่อัตราส่วนการบีบอัดสูงมีความสำคัญในขณะที่ยังคงความลึกของสีดั้งเดิมไว้ คุณสมบัตินี้เองที่นำไปสู่การใช้รูปแบบนี้อย่างกว้างขวางในการนำเสนอข้อมูลกราฟิกบนอินเทอร์เน็ตซึ่งความเร็วของการแสดงไฟล์ (ขนาดของมัน) มีความสำคัญอย่างยิ่ง คุณสมบัติเชิงลบของรูปแบบ JPEG คือการเสื่อมสภาพของคุณภาพของภาพซึ่งทำให้แทบจะเป็นไปไม่ได้เลยที่จะใช้ในการพิมพ์โดยที่พารามิเตอร์นี้มีความสำคัญ

ตอนนี้เรามาดูเรื่องการบีบอัดข้อมูลแบบไม่สูญเสียและพิจารณาว่าอัลกอริธึมและโปรแกรมใดที่อนุญาตให้ดำเนินการนี้ได้

การบีบอัดแบบไม่สูญเสีย

การบีบอัดหรือการเข้ารหัสแบบไม่สูญเสียข้อมูลสามารถใช้เพื่อบีบอัดข้อมูลใดๆ ก็ได้ เนื่องจากจะให้การกู้คืนข้อมูลที่แม่นยำอย่างยิ่งหลังจากการเข้ารหัสและถอดรหัส การบีบอัดแบบไม่สูญเสียข้อมูลจะขึ้นอยู่กับ หลักการง่ายๆการแปลงข้อมูลจากกลุ่มอักขระหนึ่งไปยังอีกกลุ่มหนึ่งให้มีขนาดกะทัดรัดยิ่งขึ้น

อัลกอริธึมการบีบอัดแบบไม่สูญเสียที่มีชื่อเสียงที่สุดสองอัลกอริธึมคือการเข้ารหัส Huffman และการเข้ารหัส LZW (ตามตัวอักษรเริ่มต้นของชื่อของผู้สร้าง Lempel, Ziv, Welch) ซึ่งแสดงถึงแนวทางหลักในการบีบอัดข้อมูล การเขียนโค้ดของ Huffman ปรากฏในช่วงต้นทศวรรษที่ 50; หลักการของมันคือการลดจำนวนบิตที่ใช้แทนอักขระที่เกิดขึ้นบ่อย และตามนั้น เพื่อเพิ่มจำนวนบิตที่ใช้สำหรับอักขระที่ไม่ค่อยเกิดขึ้น เมธอด LZW เข้ารหัสสตริงอักขระโดยการวิเคราะห์สตรีมอินพุตเพื่อสร้างตัวอักษรขยายตามสตริงที่กระบวนการนั้นประมวลผล ทั้งสองวิธีลดข้อมูลที่ซ้ำซ้อนในข้อมูลอินพุต

การเข้ารหัสของฮัฟฟ์แมน

การเข้ารหัสของ Huffman เป็นหนึ่งในวิธีการบีบอัดข้อมูลที่รู้จักกันดีที่สุด ซึ่งมีพื้นฐานอยู่บนสมมติฐานที่ว่าในข้อมูลที่ซ้ำซ้อนนั้น อักขระบางตัวจะถูกใช้บ่อยกว่าตัวอื่นๆ ตามที่กล่าวไว้ข้างต้น ตัวอักษรบางตัวในภาษารัสเซียมีแนวโน้มที่จะเกิดขึ้นมากกว่าตัวอักษรอื่นๆ แต่ในรหัส ASCII เราใช้จำนวนบิตเท่ากันในการแสดงอักขระ มีเหตุผลที่จะสรุปได้ว่าหากเราใช้บิตน้อยลงสำหรับอักขระที่เกิดขึ้นบ่อยและมากขึ้นสำหรับอักขระที่เกิดไม่บ่อย เราสามารถลดความซ้ำซ้อนของข้อความได้ การเข้ารหัสของ Huffman ขึ้นอยู่กับความสัมพันธ์ระหว่างความยาวของโค้ดของอักขระและความน่าจะเป็นที่จะปรากฏในข้อความ

การเข้ารหัสแบบไดนามิก

ในกรณีที่ไม่ทราบความน่าจะเป็นของสัญลักษณ์ข้อมูลอินพุต จะใช้การเข้ารหัสแบบไดนามิก ซึ่งข้อมูลเกี่ยวกับความน่าจะเป็นของสัญลักษณ์บางอย่างจะได้รับการปรับปรุง "ทันที" ในขณะที่อ่านข้อมูลอินพุต

การบีบอัด LZW

อัลกอริธึม LZW ที่เพิ่งเสนอเมื่อไม่นานมานี้ (ในปี 1984) ได้รับการจดสิทธิบัตรและเป็นเจ้าของโดย Sperry

อัลกอริธึม LZW ขึ้นอยู่กับแนวคิดในการขยายตัวอักษรซึ่งช่วยให้สามารถใช้อักขระเพิ่มเติมเพื่อแสดงสตริงได้ อักขระปกติ- ตัวอย่างเช่น การใช้รหัส ASCII 9 บิตแทนรหัส 8 บิต คุณจะได้รับอักขระเพิ่มเติม 256 ตัว งานของคอมเพรสเซอร์อยู่ที่การสร้างตารางที่ประกอบด้วยแถวและรหัสที่เกี่ยวข้อง อัลกอริธึมการบีบอัดมีดังนี้: โปรแกรมอ่านอักขระถัดไปและเพิ่มลงในสตริง หากแถวอยู่ในตารางแล้ว การอ่านจะดำเนินต่อไป หากไม่มี เส้นที่กำหนดจะถูกเพิ่มลงในตารางสตริง ยิ่งมีบรรทัดที่ซ้ำกันมาก ข้อมูลก็จะยิ่งถูกบีบอัดมากขึ้น กลับไปที่ตัวอย่างทางโทรศัพท์โดยใช้การเปรียบเทียบที่ง่ายมากโดยบอกว่าการบีบอัดบันทึก 233 34 44 โดยใช้วิธี LZW เราจะจบลงด้วยการแนะนำบรรทัดใหม่ - 333 และ 444 และแสดงด้วยอักขระเพิ่มเติม เราจะสามารถลดความยาวของบันทึกได้

คุณควรเลือกผู้จัดเก็บรายใด

ผู้อ่านอาจจะสนใจที่จะรู้ว่าผู้จัดเก็บรายใดดีกว่า คำตอบสำหรับคำถามนี้ไม่ชัดเจน

หากคุณดูตารางที่ผู้จัดเก็บ "แข่งขัน" (และสามารถทำได้ทั้งบนเว็บไซต์ที่เกี่ยวข้องบนอินเทอร์เน็ตและบนซีดีรอมของเรา) คุณจะเห็นว่าจำนวนโปรแกรมที่เข้าร่วมใน "การแข่งขัน" เกินกว่า ร้อย จะเลือกผู้จัดเก็บที่จำเป็นจากความหลากหลายนี้ได้อย่างไร?

ค่อนข้างเป็นไปได้ที่สำหรับผู้ใช้จำนวนมากปัญหาในการเผยแพร่โปรแกรมไม่ใช่ปัญหาที่สำคัญน้อยที่สุด โปรแกรมเก็บถาวรส่วนใหญ่จะเผยแพร่ในรูปแบบ ShareWare และบางโปรแกรมจะจำกัดจำนวนฟีเจอร์สำหรับเวอร์ชันที่ไม่ได้ลงทะเบียน มีโปรแกรมที่แจกเป็นฟรีแวร์

หากคุณไม่สนใจการพิจารณาการค้าขาย ก่อนอื่นคุณต้องเข้าใจว่ามีผู้จัดเก็บเอกสารจำนวนหนึ่งที่ได้รับการปรับให้เหมาะสมเพื่อแก้ไขปัญหาเฉพาะ ในเรื่องนี้ก็มี ประเภทต่างๆการทดสอบเฉพาะทาง เช่น การบีบอัดเฉพาะไฟล์ข้อความหรือเฉพาะไฟล์กราฟิก โดยเฉพาะอย่างยิ่ง Wave Zip สามารถบีบอัดไฟล์ WAV เป็นหลักได้ และตัวเก็บถาวรมัลติมีเดีย ERI นั้นดีที่สุดในการบรรจุไฟล์ TIFF ดังนั้นหากคุณสนใจที่จะบีบอัดไฟล์บางประเภทคุณสามารถค้นหาโปรแกรมที่ออกแบบมาเพื่อสิ่งนี้โดยเฉพาะ

มีผู้จัดเก็บประเภทหนึ่ง (เรียกว่า Exepackers) ที่ใช้ในการบีบอัดโมดูล COM, EXE หรือ DLL ที่ปฏิบัติการได้ ไฟล์ถูกบรรจุในลักษณะที่เมื่อเปิดขึ้นมา ไฟล์จะแตกตัวเองในหน่วยความจำ “ทันที” จากนั้นจึงทำงานตามปกติ

โปรแกรมที่ดีที่สุดในหมวดหมู่นี้คือโปรแกรม ASPACK และ Petite มากกว่า ข้อมูลรายละเอียดข้อมูลเกี่ยวกับโปรแกรมในชั้นเรียนนี้ตลอดจนการให้คะแนนที่เกี่ยวข้องสามารถดูได้ที่

หากคุณต้องการผู้จัดเก็บ "สำหรับทุกโอกาส" คุณสามารถประเมินว่าโปรแกรมใดโปรแกรมหนึ่งนั้นดีเพียงใดโดยเปลี่ยนไปใช้การทดสอบว่าโปรแกรมใดที่ประมวลผลไฟล์ประเภทต่างๆ "แข่งขันกัน" คุณสามารถดูรายชื่อผู้จัดเก็บเอกสารที่เข้าร่วมการทดสอบนี้ได้ในซีดีรอมของเรา

ดังที่ได้กล่าวมาแล้วงานที่สำคัญอย่างหนึ่ง การเตรียมการเบื้องต้นการเข้ารหัสข้อมูลคือการลดความซ้ำซ้อนและจัดรูปแบบทางสถิติของภาษาที่ใช้ การกำจัดความซ้ำซ้อนบางส่วนทำได้โดยการบีบอัดข้อมูล

การบีบอัดข้อมูลคือกระบวนการแปลงข้อความต้นฉบับจากระบบรหัสหนึ่งไปยังอีกระบบหนึ่ง ซึ่งส่งผลให้ ขนาดข้อความ- อัลกอริธึมที่ออกแบบมาสำหรับการบีบอัดข้อมูลสามารถแบ่งออกเป็นสองกลุ่มใหญ่: กลุ่มที่ใช้การบีบอัดแบบไม่สูญเสียข้อมูล (การบีบอัดแบบย้อนกลับ) และกลุ่มที่ใช้การบีบอัดแบบสูญเสีย (การบีบอัดแบบย้อนกลับไม่ได้)

การบีบอัดแบบย้อนกลับหมายถึงการกู้คืนข้อมูลที่แม่นยำอย่างยิ่งหลังจากการถอดรหัสและสามารถใช้เพื่อบีบอัดข้อมูลใด ๆ มันมักจะนำไปสู่การลดลงของปริมาณการไหลของข้อมูลเอาท์พุตโดยไม่เปลี่ยนเนื้อหาข้อมูลนั่นคือโดยไม่มีการสูญเสีย โครงสร้างข้อมูล- ยิ่งไปกว่านั้น จากสตรีมเอาต์พุตโดยใช้อัลกอริธึมการสร้างใหม่หรือการบีบอัด เราสามารถรับอินพุตได้ และกระบวนการกู้คืนเรียกว่าการบีบอัดหรือการบีบอัด และหลังจากกระบวนการคลายการบีบอัดเท่านั้น ข้อมูลที่เหมาะสมสำหรับการประมวลผลตามรูปแบบภายใน การบีบอัดแบบไม่สูญเสียข้อมูลใช้สำหรับข้อความ ไฟล์ปฏิบัติการ เสียงและกราฟิกคุณภาพสูง

การบีบอัดกลับไม่ได้มักจะมีอัตราส่วนการบีบอัดที่สูงกว่าการเข้ารหัสแบบไม่สูญเสียข้อมูลมาก แต่อนุญาตให้มีการเบี่ยงเบนของข้อมูลที่ถอดรหัสไปจากต้นฉบับได้ ในทางปฏิบัติมีปัญหาในทางปฏิบัติมากมายซึ่งไม่จำเป็นต้องปฏิบัติตามข้อกำหนดในการกู้คืนข้อมูลต้นฉบับที่ถูกต้องหลังจากการบีบอัดข้อมูล โดยเฉพาะอย่างยิ่งสิ่งนี้ใช้กับการบีบอัดข้อมูลมัลติมีเดีย: เสียง ภาพถ่าย หรือภาพวิดีโอ ตัวอย่างเช่น รูปแบบมัลติมีเดีย JPEG และ MPEG ซึ่งใช้การบีบอัดแบบย้อนกลับไม่ได้ถูกนำมาใช้กันอย่างแพร่หลาย การบีบอัดแบบย้อนกลับไม่ได้มักจะไม่ใช้ร่วมกับการเข้ารหัสลับ เนื่องจากข้อกำหนดหลักสำหรับระบบการเข้ารหัสคือข้อมูลที่ถอดรหัสจะเหมือนกับข้อมูลต้นฉบับ อย่างไรก็ตาม เมื่อใช้เทคโนโลยีมัลติมีเดีย ข้อมูลที่แสดงในรูปแบบดิจิทัลมักจะถูกบีบอัดอย่างถาวรก่อนที่จะถูกส่งไปยังระบบการเข้ารหัสเพื่อทำการเข้ารหัส หลังจากที่ข้อมูลถูกส่งไปยังผู้บริโภคและถอดรหัสแล้ว ไฟล์มัลติมีเดียจะถูกใช้ในรูปแบบบีบอัด (นั่นคือ ไฟล์เหล่านี้จะไม่ถูกกู้คืน)

ลองมาดูวิธีการบีบอัดข้อมูลแบบพลิกกลับได้ที่พบบ่อยที่สุดบ้าง

วิธีการและอัลกอริธึมที่เรียบง่ายที่รู้จักกันดีที่สุดสำหรับการบีบอัดข้อมูลในลักษณะย้อนกลับได้คือการเข้ารหัสชุดของลำดับ (การเข้ารหัสความยาวรัน - RLE) สาระสำคัญของวิธีการในแนวทางนี้คือการแทนที่เชนหรือชุดของไบต์ที่ซ้ำกันด้วยไบต์การเข้ารหัสหนึ่งไบต์ - ฟิลเลอร์และตัวนับสำหรับจำนวนการทำซ้ำ ปัญหาของวิธีการที่คล้ายกันทั้งหมดเป็นเพียงการกำหนดวิธีที่อัลกอริธึมการขยายขนาดสามารถแยกแยะชุดที่เข้ารหัสจากลำดับไบต์อื่นที่ไม่ได้เข้ารหัสในสตรีมไบต์ผลลัพธ์ การแก้ปัญหามักจะทำได้โดยการวางเครื่องหมายไว้ที่จุดเริ่มต้นของโค้ดเชน เครื่องหมายดังกล่าวอาจเป็นค่าบิตลักษณะเฉพาะในไบต์แรกของชุดรหัสซึ่งเป็นค่าของไบต์แรกของชุดรหัส ข้อเสียของวิธี RLE คืออัตราส่วนการบีบอัดค่อนข้างต่ำหรือค่าใช้จ่ายในการเข้ารหัสไฟล์ที่มีจำนวนซีรีย์น้อย และที่แย่กว่านั้นคือมีจำนวนไบต์ซ้ำในซีรีย์เพียงเล็กน้อย

ด้วยการเข้ารหัสข้อมูลที่สม่ำเสมอ จำนวนบิตที่เท่ากันจะถูกจัดสรรให้กับข้อความ โดยไม่คำนึงถึงความน่าจะเป็นที่จะเกิดขึ้น ในขณะเดียวกัน ก็สมเหตุสมผลที่จะถือว่าความยาวรวมของข้อความที่ส่งจะลดลงหากข้อความที่เกิดขึ้นบ่อยครั้งถูกเข้ารหัสด้วยคำรหัสสั้น และข้อความที่ไม่ค่อยเกิดขึ้นด้วยข้อความที่ยาวกว่า ปัญหาที่เกิดขึ้นในกรณีนี้เกี่ยวข้องกับความจำเป็นในการใช้งาน รหัสที่มีความยาวคำรหัสแปรผัน- มีหลายวิธีในการสร้างโค้ดดังกล่าว

หนึ่งในวิธีที่ใช้กันอย่างแพร่หลายในทางปฏิบัติคือวิธีการพจนานุกรมซึ่งตัวแทนหลักซึ่งรวมถึงอัลกอริธึมของตระกูล Ziv และ Lempel แนวคิดพื้นฐานของพวกเขาคือชิ้นส่วนของสตรีมอินพุต ("วลี") จะถูกแทนที่ด้วยตัวชี้ไปยังตำแหน่งที่ปรากฏในข้อความก่อนหน้านี้ ในวรรณกรรม อัลกอริธึมดังกล่าวเรียกว่า อัลกอริธึม การบีบอัด LZ.

วิธีนี้จะปรับให้เข้ากับโครงสร้างของข้อความอย่างรวดเร็วและสามารถเข้ารหัสคำฟังก์ชันสั้น ๆ ได้ เนื่องจากคำเหล่านี้ปรากฏบ่อยมาก นอกจากนี้ยังสามารถสร้างคำและวลีใหม่จากส่วนต่างๆ ของคำที่พบก่อนหน้านี้ได้ การถอดรหัสข้อความที่บีบอัดจะดำเนินการโดยตรง - ตัวชี้จะถูกแทนที่ด้วยวลีสำเร็จรูปจากพจนานุกรมที่ชี้ไป ในทางปฏิบัติ วิธี LZ มีการบีบอัดที่ดี ทำงานเร็วตัวถอดรหัส

อีกวิธีหนึ่งในการบีบอัดข้อมูลก็คือ รหัสฮัฟฟ์แมนตัวเข้ารหัสและตัวถอดรหัสซึ่งมีการใช้งานฮาร์ดแวร์ที่ค่อนข้างง่าย แนวคิดของอัลกอริทึมมีดังนี้: เมื่อทราบความน่าจะเป็นของสัญลักษณ์ที่ปรากฏในข้อความจึงเป็นไปได้ที่จะอธิบายขั้นตอนการสร้างรหัสที่มีความยาวผันแปรได้ซึ่งประกอบด้วยจำนวนบิตจำนวนเต็ม อักขระมีแนวโน้มที่จะได้รับรหัสที่สั้นกว่า ในขณะที่อักขระที่เกิดไม่บ่อยจะถูกกำหนดรหัสที่ยาวกว่า ด้วยเหตุนี้จึงสามารถลดความยาวโค้ดเวิร์ดโดยเฉลี่ยและประสิทธิภาพการบีบอัดได้มากขึ้น รหัส Huffman มีคำนำหน้าเฉพาะ (จุดเริ่มต้นของคำรหัส) ซึ่งช่วยให้สามารถถอดรหัสได้อย่างชัดเจน แม้จะมีความยาวแปรผันก็ตาม

ขั้นตอนในการสังเคราะห์โค้ด Huffman แบบคลาสสิกจะถือว่ามีข้อมูลเบื้องต้นเกี่ยวกับคุณลักษณะทางสถิติของแหล่งที่มาของข้อความ กล่าวอีกนัยหนึ่ง นักพัฒนาจะต้องทราบความน่าจะเป็นของการเกิดสัญลักษณ์บางอย่างจากข้อความที่ถูกสร้างขึ้น ลองดูการสังเคราะห์โค้ด Huffman โดยใช้ตัวอย่างง่ายๆ

พี(ส 1)=0.2, พี(ส 2)=0.15, พี(ส 3)=0.55, พี(ส 4)=0.1- ลองจัดเรียงสัญลักษณ์ตามลำดับความน่าจะเป็นที่จะเกิดขึ้นจากมากไปหาน้อยและนำเสนอในรูปแบบของตาราง (รูปที่ 14.3, a)

ขั้นตอนการสังเคราะห์โค้ดประกอบด้วยสามขั้นตอนหลัก ในขั้นตอนแรก แถวของตารางจะยุบลง: สองแถวที่สอดคล้องกับอักขระที่มีความน่าจะเป็นน้อยที่สุดจะถูกแทนที่ด้วยแถวที่มีความน่าจะเป็นทั้งหมด หลังจากนั้นตารางจะถูกเรียงลำดับใหม่อีกครั้ง การบิดจะดำเนินต่อไปจนกระทั่งเหลือเพียงแถวเดียวในตารางโดยมีความน่าจะเป็นรวมเท่ากับหนึ่ง (รูปที่ 14.3, b)


ข้าว. 14.3.

ในขั้นตอนที่สอง แผนผังโค้ดจะถูกสร้างขึ้นโดยใช้ตารางที่ถูกยุบ (รูปที่ 14.4, a) ต้นไม้ถูกสร้างขึ้นโดยเริ่มจากคอลัมน์สุดท้ายของตาราง


ข้าว. 14.4.

รากของต้นไม้ถูกสร้างขึ้นโดยหน่วยที่อยู่ในคอลัมน์สุดท้าย ในตัวอย่างที่กำลังพิจารณา หน่วยนี้ถูกสร้างขึ้นจากความน่าจะเป็น 0.55 และ 0.45 ซึ่งแสดงเป็นโหนดต้นไม้สองโหนดที่เกี่ยวข้องกับราก อันแรกสอดคล้องกับสัญลักษณ์ S 3 และดังนั้นจึงไม่มีการแยกย่อยเพิ่มเติมของโหนดนี้

โหนดที่สองซึ่งมีป้ายกำกับว่ามีความน่าจะเป็น 0.45 เชื่อมต่อกับโหนดระดับที่สามสองโหนด โดยมีความน่าจะเป็น 0.25 และ 0.2 ความน่าจะเป็น 0.2 สอดคล้องกับสัญลักษณ์ S 1 และความน่าจะเป็น 0.25 ในทางกลับกันนั้นเกิดจากความน่าจะเป็น 0.15 ของการปรากฏตัวของสัญลักษณ์ S 2 และ 0.1 ของการปรากฏตัวของสัญลักษณ์ S 4 .

ขอบที่เชื่อมต่อแต่ละโหนดของแผนผังโค้ดจะมีหมายเลข 0 และ 1 (เช่น ขอบด้านซ้ายคือ 0 และขอบด้านขวาคือ 1) ในขั้นตอนสุดท้ายที่สาม ตารางจะถูกสร้างขึ้นโดยเปรียบเทียบสัญลักษณ์แหล่งที่มาและสัญลักษณ์ที่เกี่ยวข้อง คำรหัสรหัสฮัฟฟ์แมน คำรหัสเหล่านี้เกิดขึ้นจากการอ่านตัวเลขที่ทำเครื่องหมายขอบที่สร้างเส้นทางจากรากของต้นไม้ไปยังสัญลักษณ์ที่เกี่ยวข้อง สำหรับตัวอย่างที่อยู่ระหว่างการพิจารณา รหัส Huffman จะอยู่ในรูปแบบที่แสดงในตารางทางด้านขวา (รูปที่ 14.4, b)

อย่างไรก็ตาม อัลกอริธึม Huffman แบบคลาสสิกมีข้อเสียเปรียบที่สำคัญประการหนึ่ง หากต้องการสร้างเนื้อหาของข้อความที่บีบอัดขึ้นใหม่ ตัวถอดรหัสจะต้องทราบตารางความถี่ที่ตัวเข้ารหัสใช้ ดังนั้น ความยาวของข้อความที่ถูกบีบอัดจะเพิ่มขึ้นตามความยาวของตารางความถี่ที่ต้องส่งก่อนข้อมูล ซึ่งสามารถลบล้างความพยายามทั้งหมดในการบีบอัดข้อความได้

อีกทางเลือกหนึ่ง การเข้ารหัส Huffman แบบคงที่ประกอบด้วยการดูสตรีมอินพุตและสร้างการเข้ารหัสตามสถิติที่รวบรวม ซึ่งต้องผ่านไฟล์สองครั้ง - หนึ่งสำหรับการดูและรวบรวมข้อมูลทางสถิติ และครั้งที่สองสำหรับการเข้ารหัส ในการเข้ารหัส Huffman แบบคงที่ สัญลักษณ์อินพุต (สายโซ่บิตที่มีความยาวต่างกัน) จะสัมพันธ์กับสายโซ่บิตที่มีความยาวแปรผันเช่นกัน - รหัสของมัน ความยาวรหัสของแต่ละสัญลักษณ์นั้นแปรผันตามลอการิทึมไบนารีของความถี่โดยใช้เครื่องหมายตรงกันข้าม และชุดรวมของสัญลักษณ์ที่แตกต่างกันทั้งหมดที่พบจะถือเป็นตัวอักษรไหล

มีวิธีอื่น - การปรับตัวหรือ การเข้ารหัส Huffman แบบไดนามิก- หลักการทั่วไปคือการเปลี่ยนรูปแบบการเข้ารหัสขึ้นอยู่กับลักษณะของการเปลี่ยนแปลงในสตรีมอินพุต วิธีนี้มีอัลกอริธึมแบบส่งผ่านครั้งเดียวและไม่จำเป็นต้องจัดเก็บข้อมูลเกี่ยวกับการเข้ารหัสที่ใช้อย่างชัดเจน การเข้ารหัสแบบอะแดปทีฟสามารถให้อัตราส่วนการบีบอัดที่สูงกว่าการเข้ารหัสแบบคงที่ เนื่องจากการเปลี่ยนแปลงในความถี่ของสตรีมอินพุตจะถูกนำมาพิจารณาอย่างละเอียดยิ่งขึ้น เมื่อใช้การเข้ารหัส Huffman แบบปรับตัว ความซับซ้อนของอัลกอริทึมคือความจำเป็นในการปรับรหัสต้นไม้และอักขระของตัวอักษรหลักอย่างต่อเนื่องตามสถิติที่เปลี่ยนแปลงของสตรีมอินพุต

วิธีการของฮัฟฟ์แมนมีเพียงพอ ความเร็วสูงและปานกลาง คุณภาพดีการบีบอัด อย่างไรก็ตาม การเข้ารหัสของ Huffman มีความซ้ำซ้อนน้อยที่สุด โดยมีเงื่อนไขว่าอักขระแต่ละตัวจะถูกเข้ารหัสด้วยตัวอักษรรหัสอักขระโดยแยกสตริงสองบิต - (0, 1) ข้อเสียเปรียบหลัก วิธีนี้คือการขึ้นอยู่กับระดับการบีบอัดกับความใกล้เคียงของสัญลักษณ์ความน่าจะเป็นถึง 2 ถึงระดับลบซึ่งเกิดจากการที่แต่ละสัญลักษณ์ถูกเข้ารหัสด้วยจำนวนบิตจำนวนเต็ม

นำเสนอโซลูชั่นที่แตกต่างไปจากเดิมอย่างสิ้นเชิง การเข้ารหัสทางคณิตศาสตร์- วิธีนี้มีพื้นฐานมาจากแนวคิดในการแปลงอินพุตสตรีมให้เป็นเลขทศนิยมตัวเดียว การเข้ารหัสทางคณิตศาสตร์เป็นวิธีการที่ช่วยให้สามารถบรรจุอักขระของตัวอักษรอินพุตได้โดยไม่สูญเสีย โดยมีเงื่อนไขว่าต้องทราบการกระจายความถี่ของอักขระเหล่านี้

ลำดับสัญลักษณ์ที่ต้องการเมื่อบีบอัดด้วยการเข้ารหัสทางคณิตศาสตร์ถือเป็นเศษส่วนไบนารีบางส่วนจากช่วงเวลา )