บีบอัดไฟล์ที่คล้ายกันอย่างมีประสิทธิภาพ


11

ฉันมักจะต้องบีบอัดไฟล์ที่คล้ายกันมาก

ปัจจุบันฉันใช้ 7Zip ซึ่งบีบอัดไฟล์ 16GB ลงไปที่ 1.2GB ในเวลาประมาณ 35 นาทีโดยใช้ 8 คอร์พร้อมการตั้งค่าอัลตร้า

สำหรับฉันแล้วดูเหมือนว่าเวลาส่วนใหญ่จะใช้การคำนวณพจนานุกรมเพื่อใช้ในการบีบอัด เนื่องจากไฟล์มีความคล้ายคลึงกันอย่างมากพจนานุกรมที่ใช้งานจริงจึงมีโอกาสคล้ายกัน

มีเครื่องมือบีบอัดที่ใช้ Windows (7Zip พร้อมตัวเลือกที่ฉันไม่ทราบหรือเครื่องมืออื่น) ที่สามารถบันทึกพจนานุกรมและนำพจนานุกรมที่บันทึกไว้สำหรับไฟล์ที่ตามมามาใช้ซ้ำได้หรือไม่

มีวิธีที่ดีกว่าในการเข้าถึงปัญหาในการรักษาอัตราส่วนการบีบอัดที่คล้ายกับสิ่งที่ฉันมีในขณะที่การบีบอัดเร็วขึ้นอย่างมีนัยสำคัญ?

คำตอบ:


5

Lempel-Ziv-เวลช์ (LZW) การบีบอัดอัลกอริทึมเป็นอย่างโดยเนื้อแท้ computationally เข้มด้วยเสียงส่วนใหญ่ของการทำงานของตัวเองเป็นจริงการคำนวณพจนานุกรม นี่เป็นวิธีที่ LZW ใช้งานได้จริง

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


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


1
ด้วย Huffman และพจนานุกรมที่กำหนดไว้ล่วงหน้าจะต้องผ่านเพียงหนึ่งครั้งหรือไม่ มีเครื่องมือพื้นฐานของ Huffman ที่รองรับพจนานุกรมที่บันทึกไว้หรือไม่?
Eric J.

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

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

2

ซึ่งแตกต่างจากอัลกอริธึม DEFLATE LZMA ของ 7-Zip ใช้การบีบอัดข้อมูลโดยค่าเริ่มต้นซึ่งใช้ประโยชน์จากความซ้ำซ้อนระหว่างไฟล์ สิ่งนี้จะทำงานกับการตั้งค่าเริ่มต้นตราบใดที่ไฟล์มีขนาดเล็กพอ

ด้วยการตั้งค่าเริ่มต้นที่2 GBสำหรับขนาด Solid Blockไฟล์ 16 GB จะถูกบีบอัดเป็น 8 ชิ้นแยกกัน

@Breakthorugh พูดแล้วพจนานุกรมจะถูกสร้างขึ้นทันที คุณสามารถตรวจสอบสิ่งนี้ได้โดยการตั้งค่าSolid Block sizeเป็นSolid (บีบอัดไฟล์ทั้งหมดในครั้งเดียว) และNon-solid (บีบอัดแต่ละไฟล์แยกกัน)

การเพิ่มขนาด Solid Blockจริง ๆ แล้วจะส่งผลให้ช้าลง แต่อาจส่งผลให้อัตราส่วนการบีบอัดที่ดีขึ้นมาก ตัวอย่างเช่นการบีบอัดไฟล์ที่เหมือนกันสองไฟล์จะส่งผลให้ไฟล์เก็บถาวรมีขนาดใหญ่เป็นสองเท่าด้วยการบีบอัดที่ไม่แข็ง


1
ในกรณีของฉันฉันบีบอัดไฟล์ที่คล้ายกันทีละครั้งในโอกาสที่แตกต่างกัน มีไฟล์ 16GB-ish ทุกไฟล์ในไฟล์เก็บถาวรที่กำหนดไว้เท่านั้น
Eric J.

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

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