เหตุใดไฟล์ 7zipped จึงมีขนาดใหญ่กว่าไฟล์ raw [ซ้ำ]


37

เป็นไปได้ซ้ำ:
ทำไมบีบอัด ZIP ไม่บีบอัดอะไรเลย

ฉันพยายาม 7zipping ไฟล์. exe แต่มันก็ใหญ่ขึ้น

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นผลลัพธ์ที่คาดหวังหรือไม่


3
ใช่มันเป็นผลลัพธ์ที่คาดหวัง ทำไม? เพราะเมื่อบางสิ่งบางอย่างถูกบีบอัดอยู่แล้ว (= ใช้พื้นที่ที่เล็กลง) จึงไม่สามารถบีบอัดเพิ่มเติมได้
woliveirajr

4
เพื่อเพิ่มให้กับคนอื่น ๆ - เนื่องจากไฟล์ exe นี้เป็นตัวติดตั้งโดยเฉพาะเนื้อหาส่วนใหญ่จึงน่าจะเป็นไฟล์ zip หรือ cab คุณจะไม่ได้รับผลลัพธ์ที่เหมือนกันจากไฟล์ exe ปกติ (แต่ไฟล์ exe ปกติส่วนใหญ่จะไม่เป็น 145 เมกะไบต์)
Random832

1
คำอธิบายการใช้ตรรกะพื้นฐานเท่านั้น: การบีบอัดค้นหาไฟล์ดิบเป็นไฟล์ซิป UNIQUE และไฟล์บีบอัดไฟล์ต้นฉบับ UNIQUE ไฟล์ดิบ (ไม่บีบอัด) ลองนึกภาพคุณมีไฟล์ 8 บิตและต้องการบีบอัดเป็นไฟล์ 5 บิต มีไฟล์ 8-bit ที่ไม่ซ้ำกัน 256 ไฟล์ แต่มีเฉพาะไฟล์ 5-bit 32 บิตที่ไม่ซ้ำกัน (!) ดังนั้นไฟล์ 8 บิตบางไฟล์จะต้องบีบอัดเป็นไฟล์ 5 บิตเดียวกัน (!) และถ้าไฟล์ดิบที่แตกต่างกัน 2 ไฟล์ถูกบีบอัดเป็นไฟล์ ZIP เดียวกันคุณต้องการรับไฟล์ใดหลังจากคลายการบีบอัด สำหรับวิธีการซิปใด ๆ หากมีไฟล์ที่มีขนาดเล็กลงหลังจากการซิปจะต้องมีไฟล์ที่มีขนาดใหญ่ขึ้น (!)
Ivan Kuckir

คำตอบ:


78

มันลงมาให้แนวคิดที่เรียกว่าเอนโทรปี ดูวิกิพีเดีย

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

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

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

ตัวอย่างเช่นหากคุณมีไฟล์ข้อความขนาด 100 MB และบีบอัดไฟล์โดยใช้อัลกอริทึม Zip ปกติไฟล์นั้นอาจถูกบีบอัดลงเหลือ 50 MB หากคุณบีบอัดไฟล์ Zip ด้วย LZMA2 คุณอาจลดลงเหลือ 40 หรือ 45 MB เนื่องจาก LZMA มีอัตราส่วนการบีบอัดสูงกว่าสำหรับข้อมูลที่บีบอัดได้ส่วนใหญ่ที่ Zip ทำ ดังนั้นจึงเป็นเหตุผลว่ามันสามารถบีบอัดข้อมูล Zip ได้เนื่องจาก Zip ไม่ดูดเอนโทรปีทั้งหมดออกจากมัน แต่ถ้าคุณกำจัดคอนเทนเนอร์ Zip ทั้งหมดคุณอาจทำให้มันเล็กลงด้วยการบีบอัดข้อความดิบด้วย LZMA2 ซึ่งอาจให้บางสิ่งบางอย่างตามลำดับที่ 30 - 35 MB (นี่เป็นเพียง "หมายเลขอากาศ" เพื่อแสดงแนวคิด) .

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


btw ส่วนที่สำคัญที่สุดสำหรับการตอบคำถามนี้ถูกต้องในตอนท้าย: "สิ่งนี้มีสิ่งต่าง ๆ เช่นพจนานุกรมส่วนหัวของไฟล์และอื่น ๆ ข้อมูลพิเศษเหล่านี้มักจะมากกว่าชดเชยด้วยการประหยัดการบีบอัดข้อมูล แต่มัน ปรากฏว่าปฏิบัติการคุณกำลังพยายามที่จะบีบอัดจะถูกบีบอัดแล้วกับบางรูปแบบของ LZMA"
jhocking

6
@ jhocking: ไม่ส่วนที่สำคัญที่สุดคือตรงกลาง: "โปรแกรมบีบอัดทุกครั้งที่คุณใช้จะเพิ่มขนาด ... ป้อนข้อมูลบางส่วน" รูปแบบไฟล์ของ 7zip มีพจนานุกรม / file-header / etc แต่แม้ว่า 7zip จะใช้อัลกอริทึมที่ไม่มีสิ่งเหล่านั้นเรายังคงรับประกันว่าบางอินพุต (ในความเป็นจริงส่วนใหญ่) จะมีเอาต์พุตที่ เป็นใหญ่หรือใหญ่กว่าอินพุตเอง นี่เป็นข้อเท็จจริงพื้นฐานของทฤษฎีข้อมูลและไม่มีส่วนเกี่ยวข้องกับส่วนหัวของไฟล์
BlueRaja - Danny Pflughoeft

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

1
อย่างไรก็ตามหากคำถามของคุณคือ "มีอัลกอริทึมการบีบอัดใด ๆ ที่ไม่เพิ่มความยาวของอินพุตเกินจำนวน Metadata ที่แน่นอน" คำตอบคือ: ฉันไม่รู้ แต่ควรเป็นไปได้ในทางทฤษฎี ง่ายในความเป็นจริง ทั้งหมดที่คุณต้องทำคือการพัฒนารูปแบบภาชนะที่สามารถทั้งมีไฟล์ต้นฉบับหรือกระแสการบีบอัดข้อมูล จากนั้นเมื่อคุณสร้างไฟล์เก็บถาวรให้ลองบีบอัด: หากขนาดที่บีบอัดมีขนาดใหญ่กว่าอินพุทเพียงแค่จัดเก็บอินพุตดั้งเดิมและแพ็คข้อมูลเมตาของคุณไว้ข้างหน้า ขนาดไฟล์จะเพิ่มขึ้น แต่ถ้าเมตาดาต้ามีขนาดเล็ก (ต่อ)
allquixotic

2
@ Mehrdad: "มีอัลกอริทึมการบีบอัด (แต่ไม่ดี) ที่ไม่เพิ่มความยาวของอินพุตใด ๆ ? " - คำตอบคือไม่ มี2^(n+1)-1ข้อความที่เป็นไปได้ของขนาด n-bits หรือน้อยกว่า อัลกอริทึมของเราต้องแมปแต่ละรายการเหล่านี้กับผลลัพธ์ที่ไม่ซ้ำกัน หากแม้แต่หนึ่งในสิ่งเหล่านี้ถูกแม็พกับค่าที่มีบิตน้อยกว่าค่าอื่นจะต้องถูกแม็พกับค่าที่มีมากกว่า
BlueRaja - Danny Pflughoeft

7

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

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

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

bzip2 , LZMA , LZMA2และขั้นตอนอื่น ๆ ใช้โดย7zรูปแบบที่มีอยู่ทั้งหมดlossless ดังนั้นจะมีข้อ จำกัด หลังจากที่ไม่สามารถบีบอัดได้อีก นอกเหนือจากนั้นรูปภาพที่ปฏิบัติการได้ (.exe) มักเป็นไฟล์ที่ถูกบีบอัดสูง 7zipเครื่องมือบีบอัดอื่น ๆ อีกมากมายฝังข้อมูลเมตาบางส่วนซึ่งอันที่จริงสามารถทำให้ไฟล์เอาต์พุตใหญ่ขึ้นได้

ช่วยพัฒนาสมอง: ถ้าเรามีอัลกอริทึมแบบไม่สูญเสียที่สามารถลดขนาดไฟล์ได้ตลอดเวลา?

ในกรณีนี้คุณจะเห็นเสมอว่าไฟล์บีบอัดมีขนาดเล็กกว่าไฟล์อินพุต ดูความคิดเห็นร้องว่าทำไมมันเป็นไปไม่ได้


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

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

@ jeteon ฉันไม่แน่ใจว่าคุณพยายามจะพูดอะไร
oleksii

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

@ jeteon โอ้ฉันเข้าใจแล้ว ใช่ทำให้รู้สึก
oleksii

6

หากปฏิบัติการดั้งเดิมถูกบีบอัดแล้ว (หรือมีข้อมูลที่ถูกบีบอัดอย่างหนักหรือข้อมูลที่ไม่สามารถบีบอัดได้) การบีบอัดจะเพิ่มขนาด


2

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

ในไฟล์บีบอัดแล้วมันยังคงสร้างชุดของสัญลักษณ์ แต่มีน้อยมากที่สามารถลดขนาดของ ในกรณีของคุณตารางสัญลักษณ์ของไฟล์บีบอัดที่มีอยู่แล้วอาจอยู่ในพื้นที่ใกล้เคียง 2 MB หรือมากกว่านั้นหากมีการบีบอัดไฟล์


0

การบีบอัด ideea:

ซอฟต์แวร์บีบอัดสร้างรายการไฟล์และกำจัดเนื้อหาที่ซ้ำกัน

เมื่อบีบอัดไฟล์ที่บีบอัดแล้วคุณอาจทำให้ไฟล์บีบอัดของคุณใหญ่กว่าไฟล์ต้นฉบับ

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