ความคิดนี้เกิดขึ้นกับฉันในขณะที่เด็กเรียนรู้ที่จะเขียนโปรแกรมและพบกับ PRNG เป็นครั้งแรก ฉันยังไม่รู้ว่ามันสมจริงแค่ไหน แต่ตอนนี้มีการแลกเปลี่ยนกองซ้อน
นี่คือโครงร่างของอายุ 14 ปีสำหรับอัลกอริทึมการบีบอัดที่น่าทึ่ง:
ใช้ PRNG และ seed ด้วย seed s
เพื่อให้ได้ลำดับไบต์แบบสุ่มหลอกยาว ในการส่งลำดับนั้นไปยังบุคคลอื่นคุณต้องสื่อสารเพียงคำอธิบายของ PRNG เมล็ดที่เหมาะสมและความยาวของข้อความ สำหรับลำดับที่ยาวพอคำอธิบายนั้นจะสั้นกว่ามาก
ตอนนี้สมมติว่าฉันสามารถกลับกระบวนการได้ เนื่องจากมีเวลาและทรัพยากรในการคำนวณเพียงพอฉันสามารถทำการค้นหาที่ดุร้ายและค้นหาเมล็ดพันธุ์ (และ PRNG หรือกล่าวอีกนัยหนึ่งว่า: โปรแกรม) ที่สร้างลำดับที่ฉันต้องการ (สมมติว่ารูปแมวน่ารักกำลังซุกซน)
PRNG ทำซ้ำหลังจากสร้างบิตจำนวนมากพอ แต่เมื่อเทียบกับรอบ "ปกติ" ข้อความของฉันค่อนข้างสั้นดังนั้น dos นี้ดูเหมือนจะไม่เป็นปัญหามากนัก
Voila วิธีบีบอัดข้อมูล
ดังนั้นสมมติว่า:
- ลำดับที่ฉันต้องการบีบอัดมี จำกัด และทราบล่วงหน้า
- ฉันไม่สั้นเรื่องเงินสดหรือเวลา (แค่ต้องการจำนวน จำกัด ของทั้งสองอย่าง)
ฉันอยากรู้:
- มีข้อบกพร่องพื้นฐานในการให้เหตุผลเบื้องหลังโครงการหรือไม่
- วิธีมาตรฐานในการวิเคราะห์การทดลองทางความคิดเหล่านี้คืออะไร
สรุป
บ่อยครั้งที่คำตอบที่ดีไม่เพียง แต่ชัดเจนคำตอบเท่านั้น แต่สิ่งที่ฉันถามจริงๆคืออะไร ขอบคุณสำหรับความอดทนของทุกคนและคำตอบอย่างละเอียด
นี่คือความพยายามครั้งที่ n ของฉันโดยสรุปคำตอบ:
- มุม PRNG / เมล็ดไม่ได้มีส่วนช่วยอะไรเลยมันไม่มากไปกว่าโปรแกรมที่สร้างลำดับที่ต้องการเป็นเอาต์พุต
- หลักการของนกพิราบ: มีข้อความยาวมากกว่า> k มากกว่าที่มี (สร้างข้อความ) โปรแกรมความยาว <= k ดังนั้นลำดับบางอย่างก็ไม่สามารถส่งออกของโปรแกรมที่สั้นกว่าข้อความ
- เป็นมูลค่าการกล่าวขวัญว่าจำเป็นต้องมีการแก้ไขล่ามของโปรแกรม (ข้อความ) ล่วงหน้า และการออกแบบก็กำหนดส่วนย่อย (เล็ก ๆ ) ของข้อความที่สามารถสร้างขึ้นได้เมื่อได้รับข้อความความยาว k
ณ จุดนี้ความคิดเดิมของ PRNG นั้นตายไปแล้ว แต่มีคำถามสุดท้ายอย่างน้อยหนึ่งคำถามที่จะยุติ:
- ถาม: ฉันจะโชคดีและพบว่าข้อความยาว (แต่ จำกัด ) ของฉันเพิ่งเกิดขึ้นเป็นผลลัพธ์ของโปรแกรมความยาว <k บิต?
การพูดอย่างเคร่งครัดไม่ใช่เรื่องของโอกาสเนื่องจากต้องทราบความหมายของทุกข้อความ (โปรแกรม) ที่เป็นไปได้ล่วงหน้า อย่างใดอย่างหนึ่งก็คือความหมายของข้อความบางส่วนของ <k บิตหรือมันไม่ได้เป็น
หากฉันเลือกข้อความสุ่ม> = k บิตแบบสุ่ม (ทำไมฉันจะ?) ฉันจะไม่ว่าในกรณีใดมีความเป็นไปได้ที่จะส่งโดยใช้บิตน้อยกว่า k บิตและมีความมั่นใจเกือบจะไม่สามารถส่งได้ ใช้เลยน้อยกว่า k บิต
OTOH ถ้าฉันเลือกข้อความเฉพาะของ> = k บิตจากสิ่งที่เป็นผลลัพธ์ของโปรแกรมที่น้อยกว่า k บิต (สมมติว่ามีข้อความดังกล่าว) จากนั้นฉันก็ใช้ประโยชน์จากบิตที่ส่งไปยัง ผู้รับ (การออกแบบของล่าม) ซึ่งนับเป็นส่วนหนึ่งของข้อความที่ถ่ายโอน
สุดท้าย:
- ถาม: ธุรกิจความซับซ้อนของเอนโทรปี / kolmogorovทั้งหมดนี้คืออะไร?
ในที่สุดทั้งสองก็บอกเราเหมือนกันกับหลักการ (ง่ายกว่า) สำหรับช่องทางสื่อสาร (pigeonhole) บอกเราว่าเราสามารถบีบอัดได้มากแค่ไหนบางทีอาจจะไม่มากเลยบางคน แต่ไม่แน่นอนเท่าที่เราจะจินตนาการ