Huffman การปรับรหัสทำงานอย่างไร


10

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


1
คุณอ่านบทความ Wikipedia รวมถึงตัวอย่างการใช้งานแล้วหรือยัง en.wikipedia.org/wiki/Adaptive_Huffman_coding#Vitter_algorithm คุณมีคำถามเพิ่มเติมหรือไม่
endolith

คำตอบ:


7

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

ตัวอย่างต้นไม้ Huffman

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


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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.