การบีบอัดไฟล์ทำงานอย่างไร


19

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

ฉันมีความรู้ที่ จำกัด ซึ่งรวมถึงบางสิ่งที่เกี่ยวข้องกับการแทนที่รายการที่ซ้ำกันทั้งหมดด้วยตัวชี้เพื่อย่อขนาด แต่นอกเหนือจากนั้นฉันค่อนข้างไร้เหตุผล!

เมื่อฉันเปิดรับความรู้ใหม่ ๆ อยู่เสมอฉันคิดว่าพวกเราส่วนใหญ่อยู่ที่นี่ฉันคิดว่าฉันจะถาม ดังนั้น SuperUser การบีบอัดใช้งานได้จริงอย่างไร


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

2
@Gnoupi: อันที่จริงสิ่งแรกที่ฉันทำคือการค้นหาเพราะฉันแน่ใจว่ามีอยู่ที่นี่ ไม่ชัดเจนดังนั้นฉันจึงพยายามที่จะแก้ไขว่า: P
Phoshi

2
เรามีแท็ก "what-is" เมื่อคุณโพสต์รูปภาพและไป "wot izzit ??"; ฉันสังเกตเห็นความต้องการแท็ก "วิธีทำงาน" แต่มันยาวเกินไปและ "วิธีการทำงาน" นั้นเป็นใบ้ "อธิบาย" อาจทำเช่นนั้น
ต้มตุ๋น quixote

@quack quixote: อ่าขอบคุณ ฉันกำลังมองหาการเติมข้อความอัตโนมัติสำหรับแท็กประเภท "plz-send-the-description" แต่หาไม่พบ
Phoshi

2
ฉันเข้ามาใกล้แค่สร้าง "วิธี" แท็กสองครั้ง ... แต่ "อธิบาย" น่าจะดีกว่า "การสอน" และ "howto" และ "เริ่มต้น" นั้นเป็นแบบกึ่งทั้งหมด แต่ไม่เหมาะ
ต้มตุ๋น quixote

คำตอบ:


18

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

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

การบีบอัดไฟล์ใช้งานได้โดยนำไฟล์และสแกนหารูปแบบและแปลงรูปแบบเหล่านั้นเป็นอย่างอื่นซึ่งใช้พื้นที่น้อยลง

ตัวอย่างเช่น "AAAAAAAA" สามารถเปลี่ยนเป็น "8A"

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

มีบางรหัส psuedo เพียงแค่คัดลอกด้านล่างนี้:

STRING = get input character
WHILE there are still input characters DO
    CHARACTER = get input character
    IF STRING+CHARACTER is in the string table then
        STRING = STRING+character
    ELSE
        output the code for STRING
        add STRING+CHARACTER to the string table
        STRING = CHARACTER
    END of IF
END of WHILE
output the code for STRING

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

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

การบีบอัด "Lossy"

ดังกล่าวข้างต้นส่วนใหญ่เกี่ยวข้องกับการบีบอัด lossless การบีบอัดประเภทอื่นที่ใช้ในแอปพลิเคชั่นวิดีโอ / เสียงเช่น MP3, JPG และ h.264 เป็นตัวอย่างการบีบอัดที่ไม่ดี

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

การบีบอัด lossy เป็นรูปแบบของการเปลี่ยนการเข้ารหัส มันเฉลี่ยข้อมูลเพื่อลดขนาดโดยรวม ตัวอย่างเช่นบล็อกขนาด 10 พิกเซลในรูปภาพสีที่ต่างกันเล็กน้อยอาจถูกรวมเข้าด้วยกันเป็นสีเดียวจึงถูกบีบอัด

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


โปรดทราบว่านี่เป็นคำอธิบายสำหรับการบีบอัดแบบไม่สูญเสียข้อมูลชนิดที่คุณสามารถกู้คืนข้อมูลเริ่มต้นที่แน่นอน (มักใช้โดยโปรแกรมเก็บถาวร) มีการบีบอัดชนิดอื่นที่คุณสูญเสียคุณภาพสำหรับขนาดที่เล็กลงเช่นใช้เป็น JPG, MP3 และอื่น ๆ
Gnoupi

ตัวอย่างแรกของ Josh คือรูปแบบของวิธีการบีบอัดจริงที่เรียกว่าการเข้ารหัสแบบเรียกความยาวและ "8A" จะถูกบีบอัดเป็น "181A" เห็นได้ชัดว่าย่อหน้าสุดท้ายของเขาใช้ที่นี่ RLE ทำงานได้ดีที่สุดกับข้อมูลที่มีหลายรายการซ้ำกัน
Dour High Arch

3
ฉันเพิ่มชื่อ lossless / lossy และปัดมันออกอีกเล็กน้อย เป็นเรื่องที่ดีที่จะทราบว่าวิธีที่ดีที่สุดในการทำความเข้าใจเพิ่มเติมคือการอ่านบทความวิกิพีเดีย
Josh K

5

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

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


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