มีค่าสูงสุดที่ทราบสำหรับจำนวนของ 0 และ 1 ที่สามารถบีบอัดได้หรือไม่?


38

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

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

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

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

(ที่นี่ฉันสนใจในการบีบอัดสูงสุดทางคณิตศาสตร์ไม่ใช่สิ่งที่เป็นไปได้ทางเทคนิคในปัจจุบัน)


7
นอกจากนี้เรายังมี '00' และ '11' ให้เลือก แต่ข้อโต้แย้งนั้นเหมือนกันถ้าคุณใช้มันมีเพียงสี่สายที่แตกต่างกันที่คุณสามารถบีบอัดได้
RemcoGerlich

3
mathoverflow.net/q/160099/34859 : โปรดดูที่นี่ว่า vide หลักการ pigeonhole จะมีจำนวนของสตริงที่ไม่ จำกัด ซึ่งไม่สามารถบีบอัดได้เสมอ ... โดยไม่คำนึงถึงอัลกอริทึมที่ใช้ (ดูหัวข้อ 'พื้นหลัง' ใน คำถาม
ARi

4
การบีบอัดขึ้นอยู่กับความรู้ที่คุณมีเกี่ยวกับโครงสร้างของข้อมูล มีบทความเกี่ยวกับการบีบอัดหมากรุกที่แสดงให้เห็นว่าการเพิ่มความรู้ช่วยเพิ่มการบีบอัดได้อย่างไร
สเปกตรัม

1
คุณช่วยชี้แจงได้ไหม: การบีบอัดอาจเป็น "lossy" หรือ "lossless" (หรือ "hybrid" บางตัวซึ่งอาจใช้ทั้งคู่) คุณกำลังพูดถึงการบีบอัดข้อมูลสูงสุดโดยใช้วิธีการบีบอัด "lossless" หรือคุณรวมถึง (อนุญาต) การใช้วิธีการบีบอัด "lossy" ด้วยเช่นกัน ในคำอื่น ๆ ฉันเดาว่ามีความเป็นไปได้ 3 ประการ: ค้นหา "การบีบอัดสูงสุด" โดยที่ (1) ข้อมูลจะต้องสามารถคลายการบีบอัดได้เหมือนเดิมก่อนการบีบอัด (2) ข้อมูลจะต้องสามารถแตกได้ แต่ อนุญาตให้ "สูญเสีย" บางส่วน (3) ไม่ใช่ข้อกำหนดที่ข้อมูลจะสามารถแตกได้
Kevin Fegan

สวัสดี @KevinFegan ในกรณีนี้มันจะต้องเป็นตัวเลือกที่ 1: "ข้อมูลจะต้องสามารถแตกได้เหมือนกับก่อนการบีบอัด"
x457812

คำตอบ:


45

ความซับซ้อนของ Kolmogorovเป็นวิธีการหนึ่งในการทำให้เป็นทางการทางคณิตศาสตร์นี้ น่าเสียดายที่การคำนวณความซับซ้อนของสตริง Kolmogorov เป็นปัญหาที่ไม่สามารถคำนวณได้ ดูเพิ่มเติม: ใกล้เคียงกับความซับซ้อน Kolmogorov

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


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


แต่การบีบอัดเป็นหนึ่งในเทคนิคในการประมาณค่าเอนโทรปี การบีบอัดและเอนโทรปีสามารถเป็นสองด้านในสิ่งเดียวกันได้หรือไม่?
พอล Uszak

1
@PaulUszak ใช่พวกเขาจะเกี่ยวข้องอย่างใกล้ชิด: ดู e กรัมนอนส์ทฤษฎีบท แต่โปรดทราบ: ความคิดเห็นควรใช้เพื่อแนะนำการปรับปรุง / การชี้แจงที่โพสต์เท่านั้นไม่ต้องถามคำถามติดตาม หากต้องการถามคำถามใหม่ให้ใช้ลิงก์ "ถามคำถาม" ที่ด้านบนขวาของหน้า
DW

35

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

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


1
@Veedrac ไม่คุณเข้าใจฉันถูกต้อง อาร์กิวเมนต์ของคุณ (มากกว่าหรือน้อยกว่า) แสดงให้เห็นว่ารูปแบบการเข้ารหัสใด ๆ สำหรับสตริงต้องใช้บิตสำหรับบางสตริง ช่องด้านข้างที่นี่เป็นขั้นตอนการบีบอัดข้อมูล Nlog2N
Yuval Filmus

27

ต่อไปนี้เป็นโครงร่างอย่างง่ายที่สามารถบีบอัดสตริงบิตแบบไม่สูญเสียโดยพลการโดยผลลัพธ์ที่เล็กที่สุดคือเพียงบิตเดียว:

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

หากสตริงเป็นอย่างอื่นผลลัพธ์จะเป็นบิตเดียว '1' ตามด้วยสำเนาที่เหมือนกันของสตริงดั้งเดิม

แบบแผนนี้จะลดอินพุตหนึ่งที่เป็นไปได้ให้เป็นหนึ่งบิตและเพิ่มความยาวอินพุตอื่น ๆ ทุกรายการ มีหลักการทั่วไป: หากอัลกอริทึมการบีบอัดสามารถแมปสตริงอินพุตใด ๆ กับสตริงที่บีบอัดและมีอัลกอริทึมการบีบอัดที่ตรงกันที่แมปสตริงบีบอัดใด ๆ กลับไปที่สตริงเดิมและอัลกอริทึมการบีบอัดแมปอินพุตใด ๆแล้วมันจะต้อง map บางสายเข้ากับสายอีกต่อไป


2
ทำได้ดีในการทำให้คำตอบชัดเจนและชัดเจน มันน่าสังเกตว่านี่คล้ายกับสิ่งที่อัลกอริธึมการบีบอัดที่ดีพยายามทำ - สำหรับโดเมนอินพุตที่กำหนดให้พยายามย่ออินพุตประเภทที่คาดหวังมากที่สุดโดยทั่วไปเพื่อแลกกับอินพุตที่มีความยาวน้อยกว่า
JBentley

6

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

วิธีการสร้างตัวอย่างของข้อมูลที่ไม่บีบอัดสำหรับอัลกอริทึมการบีบอัดแบบใดแบบหนึ่งนั้นง่าย: นำข้อมูลทุกชนิดและรันผ่านอัลกอริธึมการบีบอัดซ้ำ ๆ จนกระทั่งขนาดไม่ลดลงอีกต่อไป

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


ยินดีต้อนรับ! โปรดทราบว่าสิ่งนี้ใช้ได้กับการบีบอัดแบบไม่สูญเสียเท่านั้น การบีบอัดแบบสูญหายสามารถบีบอัดสตริงทั้งหมด (อย่างน้อยตราบใดที่คุณยอมรับอัลกอริทึม "คืนสตริงว่าง" เป็นอัลกอริทึมการบีบอัดแบบ lossy ;-))
David Richerby

@DavidRicherby แน่นอนจริง ๆ แต่ฉันได้รับความประทับใจจากคำถามที่ OP ถามเกี่ยวกับการบีบอัดแบบไม่มีการสูญเสียเพราะมันไม่สมเหตุสมผลเลยที่จะพูดถึงการบีบอัดสูงสุดของแผนการสูญเสีย ความคิดที่คุณสามารถนำไปใช้กับความสุดขั้วที่ใช้ไม่ได้นั้นมีอยู่ในแนวคิดของการบีบอัดแบบสูญเสีย
m69

ใช่ฉันคิดว่านั่นเป็นการตีความที่สมเหตุสมผล
David Richerby

-2

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

ดังนั้นระบบสำรองข้อมูลที่พยายามสำรองไฟล์ควรพยายามบีบอัดไฟล์เพื่อประหยัดพื้นที่อย่างชัดเจน แต่ก่อนอื่นระบบสำรองจะตรวจสอบว่ามีการบันทึกไฟล์ที่เหมือนกันอย่างแน่นอน! ดังนั้นแทนที่จะสำรองอะไรทั้งหมดที่ระบบการสำรองข้อมูลจะเป็นตัวอย่างเช่นการจดจำว่าคุณมีหมายเลข 1487578 ไฟล์บนระบบสำรองข้อมูลบนฮาร์ดดิสก์ของคุณ

สิ่งนี้มีประสิทธิภาพเป็นพิเศษเช่นเมื่อผู้ใช้ 10,000 คนทุกคนมีระบบปฏิบัติการและแอพพลิเคชั่นที่ติดตั้งเหมือนกัน สำหรับผู้ใช้คนเดียวมันไม่ได้มีประโยชน์อะไรเลย


4
น่าสนใจ แต่ฉันไม่เห็นว่าจะตอบคำถามได้อย่างไร คำถามถามถึงข้อ จำกัด ในการบีบอัดไม่ใช่การสนทนาทั่วไปของการสำรองข้อมูลระดับองค์กร
David Richerby

สิ่งนี้เรียกว่าการขจัดข้อมูลซ้ำซ้อนและใช้แฮช ใช้ RAM เป็นจำนวนมากในการจัดเก็บแฮช 128 บิตสำหรับทุกบล็อกบนดิสก์ ZFS สามารถทำเช่นนี้ได้โดยบังเอิญทำให้บางบล็อคแบ่งปันพื้นที่เก็บข้อมูลแบบคัดลอก - เขียน - บางส่วน แต่ปัญหาการบีบอัดแบบนี้ (ที่คุณพยายามบีบอัดชุดข้อมูลขนาดใหญ่ที่คุณต้องการเข้าถึงแบบสุ่มและการเปลี่ยนแปลงนั้นเร็วเกินไปสำหรับการบีบอัดสตรีมปกติ แต่มีการซ้ำซ้อนระดับบล็อก) ไม่เกี่ยวข้องกับคำตอบนี้ คำถาม.
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.