ความซับซ้อนของ Kolmogorov: ทำไมคุณต้องการจำนวนไบต์มากกว่าตัวสตริงเอง?


13

ฉันอ่านข้อความของ Wikipedia เกี่ยวกับความซับซ้อนของ Kolmogorov ( ขอบคุณสำหรับคำถามนี้ ) ซึ่งระบุว่า:

มันสามารถแสดงให้เห็นว่าความซับซ้อนของ Kolmogorov ของสตริงใด ๆ ไม่สามารถมีขนาดใหญ่กว่าความยาวของสตริงได้มากกว่าสองสามไบต์

ทำไมคุณถึงต้องการอะไรมากกว่าตัวสตริงเพื่ออธิบาย?

คำตอบ:


13

ค่าที่แน่นอนของความซับซ้อนของ Kolmogorov ขึ้นอยู่กับภาษาที่เลือกเพื่อแสดงสตริง ภาษานี้ต้องทัวริงสมบูรณ์ดังนั้นการแสดงสตริงทั้งหมดเนื่องจากตัวมันเองนั้นไม่ใช่ตัวเลือก

ตามหลักการของนกพิราบหากมีอย่างน้อยหนึ่งสายของความยาวที่มากที่สุดซึ่งเป็นตัวแทนจะสั้นกว่าตัวเองแล้วก็มีอย่างน้อยหนึ่งสายของความยาวที่มากที่สุดที่เป็นตัวแทนมีความยาวมากกว่าตัวเอง (การแทนค่าเป็นอัลกอริทึมการบีบอัด)nnn

คุณสามารถมีภาษาคำอธิบายที่แต่ละสตริงมีการแสดงที่ยาวกว่าตัวเองอย่างน้อยหนึ่งบิต: เริ่มการแสดงแต่ละอันด้วยบิตที่ระบุว่า "พิมพ์ตัวอักษร" หรือ "ตีความ" ภาษาคำอธิบายบางอย่างนั้นไม่ง่ายนัก

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


6

คำอธิบายของสตริงที่พิจารณาที่นี่คืออินพุตของเครื่องทัวริงสากล คุณสามารถคิดว่ามันเป็นโปรแกรม C สตริงhello worldไม่ได้ด้วยตัวเองในรูปแบบโปรแกรม C int main(int argc, char *argv[]) { printf("hello world"); }แต่อย่างใดอย่างหนึ่งดังต่อไปนี้ไม่: อย่างที่คุณเห็นค่าใช้จ่ายคงที่ แต่ไม่เป็นศูนย์


3
ในฐานะที่เป็นความละเอียดที่เพิ่มเข้ามามันเป็นไปไม่ได้ใน C (หรือทัวริงทัวริงที่สมบูรณ์แบบ C) ในการพิมพ์สตริงที่กำหนดเองโดยมี O (1) ช่องว่างเนื่องจากอักขระบางตัวในสตริงตัวอักษรต้อง
Gilles 'SO- หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.