ความซับซ้อนของโคลโมโกรอฟ

ในทฤษฎีสารสนเทศเชิงอัลกอริทึม (สาขาย่อยของวิทยาศาสตร์คอมพิวเตอร์และคณิตศาสตร์ ) ความซับซ้อนของ Kolmogorovของวัตถุ เช่น ข้อความ คือความยาวของโปรแกรมคอมพิวเตอร์ ที่สั้นที่สุด (ในภาษาโปรแกรม ที่กำหนดไว้ล่วงหน้า ) ที่สร้างวัตถุนั้นเป็นผลลัพธ์ มันคือการวัด ทรัพยากร การคำนวณที่จำเป็นในการระบุวัตถุ และยังรู้จักกันในชื่อความซับซ้อนเชิงอัลกอริทึมความซับซ้อนของ Solomonoff–Kolmogorov–Chaitin ความซับซ้อนของขนาดโปรแกรม ความซับซ้อนเชิงพรรณนาหรือเอนโทรปีเชิงอัลกอริทึมชื่อนี้ตั้งตามAndrey Kolmogorovผู้ซึ่งตีพิมพ์ผลงานเกี่ยวกับเรื่องนี้เป็นครั้งแรกในปี 1963 [ 1 ] [หมายเหตุ 1 ]และเป็นการสรุปทั่วไปของทฤษฎีสารสนเทศแบบคลาสสิก
แนวคิดเรื่องความซับซ้อนของ Kolmogorov สามารถนำมาใช้เพื่อระบุและพิสูจน์ผลลัพธ์ที่เป็นไปไม่ได้ ซึ่งคล้ายคลึงกับข้อโต้แย้งแนวทแยงของ Cantorทฤษฎีบทความไม่สมบูรณ์ของ Gödelและปัญหาการหยุดทำงานของ Turingโดยเฉพาะอย่างยิ่ง ไม่มีโปรแกรมP ใด ที่คำนวณขอบล่างสำหรับความซับซ้อนของ Kolmogorov ของแต่ละข้อความแล้วสามารถส่งคืนค่าที่ใหญ่กว่า ความยาว ของPเองได้ (ดูหัวข้อ§ ทฤษฎีบทความไม่สมบูรณ์ของ Chaitin ) ดังนั้นจึงไม่มีโปรแกรมใดโปรแกรมเดียวที่สามารถคำนวณความซับซ้อนของ Kolmogorov ที่แน่นอนสำหรับข้อความจำนวนอนันต์ได้
คำนิยาม
ปรีชา
พิจารณา สตริงสองชุดต่อไปนี้ซึ่งประกอบด้วยตัวอักษรพิมพ์เล็กและตัวเลขจำนวน 32 ตัว:
abababababababababababababababab, และ4c1j5b2p0cv4w1x8rx2y39umgw5q85s7ข้อความแรกมีคำอธิบายสั้นๆ เป็นภาษาอังกฤษ คือ "write ab 16 times" ซึ่งประกอบด้วย อักขระ 17ตัว ส่วนข้อความที่สองไม่มีคำอธิบายที่ชัดเจนและง่ายๆ (โดยใช้ชุดอักขระเดียวกัน) นอกจากการเขียนข้อความนั้นลงไป เช่น "write 4c1j5b2p0cv4w1x8rx2y39umgw5q85s7" ซึ่งมี อักขระ 38ตัว ดังนั้นจึงกล่าวได้ว่าการเขียนข้อความแรกนั้น "มีความซับซ้อนน้อยกว่า" การเขียนข้อความที่สอง
กล่าวอย่างเป็นทางการมากขึ้นความซับซ้อนของสตริงคือความยาวของคำอธิบายที่สั้นที่สุดที่เป็นไปได้ของสตริงนั้นใน ภาษาคำอธิบาย สากล ที่กำหนดไว้ (ความไวของความซับซ้อนต่อการเลือกภาษาคำอธิบายจะกล่าวถึงในภายหลัง) สามารถแสดงได้ว่าความซับซ้อนของ Kolmogorov ของสตริงใดๆ ก็ตามไม่สามารถมากกว่าความยาวของสตริงนั้นเองได้เพียงไม่กี่ไบต์ สตริงเช่น ตัวอย่าง ababข้างต้น ซึ่งมีความซับซ้อนของ Kolmogorov น้อยเมื่อเทียบกับขนาดของสตริง จึงไม่ถือว่าเป็นสตริงที่ซับซ้อน
ความซับซ้อนของ Kolmogorov สามารถกำหนดได้สำหรับวัตถุทางคณิตศาสตร์ใดๆ ก็ได้ แต่เพื่อความง่าย บทความนี้จึงจำกัดขอบเขตไว้ที่สตริง ก่อนอื่นเราต้องกำหนดภาษาสำหรับอธิบายสตริง ภาษาสำหรับอธิบายดังกล่าวสามารถอิงตามภาษาการเขียนโปรแกรมคอมพิวเตอร์ใดๆ ก็ได้ เช่นLisp , PascalหรือJavaถ้าPเป็นโปรแกรมที่ส่งออกสตริงxแล้วPก็คือคำอธิบายของxความยาวของคำอธิบายก็คือความยาวของPในรูปสตริงอักขระ คูณด้วยจำนวนบิตในอักขระ (เช่น 7 สำหรับASCII )
อีกทางเลือกหนึ่ง เราอาจเลือกใช้การเข้ารหัสสำหรับเครื่องจักรทัวริงโดยที่การเข้ารหัสเป็นฟังก์ชันที่เชื่อมโยงสตริงบิต <M> กับ เครื่องจักรทัวริง M แต่ละเครื่อง หากMเป็นเครื่องจักรทัวริงซึ่งเมื่อรับอินพุตw จะได้ เอาต์พุตเป็นสตริงxแล้ว สตริงที่ต่อกัน <M> w ก็จะเป็นคำอธิบายของxสำหรับการวิเคราะห์เชิงทฤษฎี วิธีการนี้เหมาะสมกว่าสำหรับการสร้างบทพิสูจน์ที่เป็นทางการโดยละเอียด และโดยทั่วไปแล้วเป็นที่นิยมในงานวิจัย ในบทความนี้ จะกล่าวถึงวิธีการที่ไม่เป็นทางการ
สตริงs ใดๆ ก็ตาม จะมีคำอธิบายอย่างน้อยหนึ่งรายการ ตัวอย่างเช่น สตริงที่สองข้างต้นได้มาจากรหัสเทียมดังนี้ :
def generate_string2 (): return "4c1j5b2p0cv4w1x8rx2y39umgw5q85s7"ในขณะที่สตริงแรกนั้นได้มาจากรหัสเทียม (ซึ่งสั้นกว่ามาก):
def generate_string1 (): return "ab" × 16ถ้าคำอธิบายd ( s ) ของสตริงsมีความยาวน้อยที่สุด (กล่าวคือ ใช้บิตน้อยที่สุด) จะเรียกว่าคำอธิบายที่น้อยที่สุดของsและความยาวของd ( s ) (กล่าวคือ จำนวนบิตในคำอธิบายที่น้อยที่สุด) คือความซับซ้อนของ Kolmogorovของsซึ่งเขียนแทนด้วยK ( s ) ในเชิงสัญลักษณ์
ความยาวของคำอธิบายที่สั้นที่สุดจะขึ้นอยู่กับการเลือกภาษาที่ใช้ในการอธิบาย แต่ผลกระทบของการเปลี่ยนภาษานั้นมีขอบเขตจำกัด (ผลลัพธ์นี้เรียกว่าทฤษฎีบทความไม่เปลี่ยนแปลงดูด้านล่าง )
ความซับซ้อนของ Kolmogorov แบบธรรมดาC
ความซับซ้อนของ Kolmogorov มีสองนิยาม ได้แก่แบบธรรมดาและแบบไม่มีคำนำหน้าความซับซ้อนแบบธรรมดาคือความยาวคำอธิบายขั้นต่ำของโปรแกรมใดๆ และใช้สัญลักษณ์ แทนด้วยในขณะที่ความซับซ้อนแบบไม่มีคำนำหน้า คือความยาวคำอธิบายขั้นต่ำของโปรแกรมใดๆ ที่เข้ารหัสด้วยรหัสแบบไม่มีคำนำหน้าและใช้สัญลักษณ์แทนด้วยความซับซ้อนแบบธรรมดานั้นเข้าใจง่ายกว่า แต่ความซับซ้อนแบบไม่มีคำนำหน้าจะศึกษาได้ง่ายกว่า
โดยปกติแล้ว สมการทั้งหมดจะใช้ได้เพียงแค่ค่าคงที่บวกเท่านั้น ตัวอย่างเช่นหมายความว่าจริงๆนั่นคือ.
อนุญาตเป็นฟังก์ชันที่คำนวณได้ซึ่งแปลงสตริงไบนารีจำกัดเป็นสตริงไบนารี ฟังก์ชันนี้เป็นฟังก์ชันสากลก็ต่อเมื่อ สำหรับฟังก์ชันที่คำนวณได้ใดๆเราสามารถเข้ารหัสฟังก์ชันนั้นลงใน "โปรแกรม" ได้โดยที่เราสามารถนึกถึง...ในฐานะตัวแปลโปรแกรม ซึ่งรับส่วนเริ่มต้นที่อธิบายโปรแกรม ตามด้วยข้อมูลที่โปรแกรมควรประมวลผล
ปัญหาอย่างหนึ่งของความซับซ้อนแบบธรรมดาคือเพราะโดยสัญชาตญาณแล้ว ไม่มีวิธีทั่วไปที่จะบอกได้ว่าจะแบ่งสตริงผลลัพธ์ตรงไหน เพียงแค่ดูจากสตริงที่ต่อกัน เราสามารถแบ่งได้โดยการระบุความยาวของสตริงหรือแต่ว่านั่นจะต้องใช้เวลาสัญลักษณ์เพิ่มเติม อันที่จริง สำหรับสิ่งใดก็ตามมีอยู่จริงโดยที่[ 2 ]
โดยทั่วไป อสมการที่มีความซับซ้อนธรรมดาจะมีคำลักษณะนี้ในด้านหนึ่ง ในขณะที่ความไม่เท่าเทียมกันแบบเดียวกันที่มีความซับซ้อนแบบไม่มีคำนำหน้ามีเพียง.
ปัญหาหลักของความซับซ้อนแบบธรรมดาคือ มีบางสิ่งบางอย่างแอบแฝงเข้าไปในโปรแกรม โปรแกรมไม่ได้แสดงถึงสิ่งใดสิ่งหนึ่งด้วยรหัสของมันเท่านั้น แต่ยังแสดงถึงความยาวของตัวมันเองด้วย โดยเฉพาะอย่างยิ่ง โปรแกรมอาจแทนเลขฐานสองได้ถึงโดยอาศัยความยาวของมันเอง กล่าวอีกนัยหนึ่งก็คือ เหมือนกับว่าเราใช้สัญลักษณ์สิ้นสุดเพื่อระบุจุดสิ้นสุดของคำ ดังนั้นเราจึงไม่ได้ใช้สัญลักษณ์ 2 ตัว แต่ใช้ 3 ตัว เพื่อแก้ไขข้อบกพร่องนี้ เราจึงนำเสนอความซับซ้อนของ Kolmogorov ที่ไม่มีคำนำหน้า[ 3 ]
ความซับซ้อนของ Kolmogorov ที่ไม่มีคำนำหน้าK
เครื่องจักรทัวริงสากลแบบไม่มีคำนำหน้าคือ ฟังก์ชันคำนวณบางส่วนสากลซึ่งโดเมนคือเซตของสตริงไบนารีที่ไม่มีคำนำหน้า หรือกล่าวอีกนัยหนึ่งคือ ไม่มีโปรแกรมที่ถูกต้องสำหรับหากเป็นคำนำหน้าของคำอื่นใด โดเมนนั้นจะตรงตามคุณสมบัติของคำนำหน้าตัวอย่างเช่น หากทุกโปรแกรมที่ถูกต้องสำหรับเครื่องทัวริงสากลจบลงด้วยข้อความแสดงการสิ้นสุดที่ไม่สามารถปรากฏที่อื่นในโปรแกรมได้จะไม่มีคำนำหน้า
ความซับซ้อนของ Kolmogorov ที่ไม่มีคำนำหน้าของสตริงถูกกำหนดโดย ความยาวของโปรแกรมจำกัดตัวเองที่สั้นที่สุดที่ก่อให้เกิดเพื่อส่งออก.
ตัวเลือกที่แตกต่างกันของเครื่องจักรอเนกประสงค์ที่ไม่มีคำนำหน้าจะเปลี่ยนแปลงไปโดยค่าคงที่บวกอย่างมากที่สุด[ 4 ]
ทฤษฎีบทความไม่แปรเปลี่ยน
การรักษาแบบไม่เป็นทางการ
มีภาษาสำหรับการอธิบายลักษณะวัตถุบางภาษาที่เหมาะสมที่สุดในแง่ต่อไปนี้: เมื่อมีคำอธิบายใดๆ ของวัตถุในภาษาสำหรับการอธิบายลักษณะวัตถุหนึ่งแล้ว คำอธิบายนั้นสามารถนำไปใช้ในภาษาสำหรับการอธิบายลักษณะวัตถุที่เหมาะสมที่สุดได้โดยมีค่าใช้จ่ายคงที่ ค่าคงที่นี้ขึ้นอยู่กับภาษาที่เกี่ยวข้องเท่านั้น ไม่ได้ขึ้นอยู่กับคำอธิบายของวัตถุหรือวัตถุที่กำลังถูกอธิบาย
ต่อไปนี้เป็นตัวอย่างของภาษาการอธิบายที่เหมาะสมที่สุด คำอธิบายจะประกอบด้วยสองส่วน:
- ส่วนแรกอธิบายถึงภาษาการบรรยายอีกภาษาหนึ่ง
- ส่วนที่สองเป็นการอธิบายวัตถุนั้นในภาษาดังกล่าว
ในเชิงเทคนิคแล้ว ส่วนแรกของคำอธิบายคือโปรแกรมคอมพิวเตอร์ (โดยเฉพาะอย่างยิ่ง: คอมไพเลอร์สำหรับภาษาของวัตถุ ซึ่งเขียนด้วยภาษาคำอธิบาย) ส่วนที่สองคือข้อมูลป้อนเข้าของโปรแกรมคอมพิวเตอร์นั้น ซึ่งจะสร้างวัตถุออกมาเป็นผลลัพธ์
ทฤษฎีบทความไม่เปลี่ยนแปลงมีดังนี้:เมื่อกำหนดภาษาการอธิบายใดๆLแล้ว ภาษาการอธิบายที่เหมาะสมที่สุดจะมีประสิทธิภาพอย่างน้อยเท่ากับLโดยมีค่าใช้จ่ายคงที่บางส่วน
บทพิสูจน์:คำอธิบายใดๆDในLสามารถแปลงเป็นคำอธิบายในภาษาที่เหมาะสมที่สุดได้ โดยการอธิบายLเป็นโปรแกรมคอมพิวเตอร์P ก่อน (ส่วนที่ 1) จากนั้นใช้คำอธิบายเดิมDเป็นอินพุตให้กับโปรแกรมนั้น (ส่วนที่ 2) ความยาวทั้งหมดของคำอธิบายใหม่D ′ นี้ คือ (โดยประมาณ):
ความยาวของPเป็นค่าคงที่ที่ไม่ขึ้นอยู่กับDดังนั้นจึงมีค่าใช้จ่ายเพิ่มเติมอย่างมากที่สุดเพียงค่าคงที่เท่านั้น โดยไม่คำนึงถึงวัตถุที่อธิบาย ดังนั้นภาษาที่เหมาะสมที่สุดจึงเป็นสากลจนถึงค่าคงที่เพิ่มเติมนี้
การรักษาที่เป็นทางการมากขึ้น
ทฤษฎีบท : ถ้าK และK เป็นฟังก์ชันความซับซ้อนที่สัมพันธ์กับภาษาการอธิบายที่สมบูรณ์แบบทัวริงL และL แล้วจะมีค่าคงที่c ซึ่งขึ้นอยู่กับภาษาL และL ที่เลือก เท่านั้น โดยที่
บทพิสูจน์ : โดยอาศัยสมมาตร ก็เพียงพอที่จะพิสูจน์ว่ามีค่าคงที่c บางค่า ที่ทำให้สำหรับสตริงs ทุกตัว
ทีนี้ สมมติ ว่ามีโปรแกรมในภาษาL1ซึ่งทำหน้าที่เป็นตัวแปลสำหรับL2
def interpret_language ( p : str )โดยที่pคือโปรแกรมในL2ตัวแปลภาษานี้มีคุณสมบัติดังต่อไปนี้:
interpret_languageด้วยอินพุตp จะ ส่งคืนผลลัพธ์ของการรันpดังนั้น ถ้าPเป็นโปรแกรมในL ซึ่งเป็นคำอธิบายขั้นต่ำของsแล้วinterpret_language( P ) จะส่งคืนสตริงsความยาวของคำอธิบายของs นี้ คือผลรวมของ
- ความยาวของโปรแกรม
interpret_languageซึ่งเราสามารถกำหนดให้เป็นค่าคงที่cได้ - ความยาวของPซึ่งตามนิยามคือK ( s )
สิ่งนี้พิสูจน์ถึงขอบเขตบนที่ต้องการ
ประวัติและบริบท
ทฤษฎีสารสนเทศเชิงอัลกอริทึมเป็นสาขาหนึ่งของวิทยาการคอมพิวเตอร์ที่ศึกษาความซับซ้อนของ Kolmogorov และมาตรวัดความซับซ้อนอื่นๆ บนสตริง (หรือโครงสร้างข้อมูล อื่นๆ )
แนวคิดและทฤษฎีของความซับซ้อนของ Kolmogorov นั้นมีพื้นฐานมาจากทฤษฎีบทสำคัญที่ค้นพบครั้งแรกโดยRay Solomonoffซึ่งตีพิมพ์ในปี 1960 โดยอธิบายไว้ใน "รายงานเบื้องต้นเกี่ยวกับทฤษฎีทั่วไปของการอนุมานแบบอุปนัย" [ 5 ]ซึ่งเป็นส่วนหนึ่งของการคิดค้นความน่าจะเป็นเชิงอัลกอริทึม ของเขา เขาได้ให้คำอธิบายที่สมบูรณ์ยิ่งขึ้นในสิ่งพิมพ์ปี 1964 ของเขา "ทฤษฎีอย่างเป็นทางการของการอนุมานแบบอุปนัย" ตอนที่ 1 และตอนที่ 2 ในInformation and Control [ 6 ] [ 7 ]
ต่อมา Andrey Kolmogorov ได้ตีพิมพ์ทฤษฎีบทนี้ในProblems Inform. Transmission อย่างอิสระ ในปี 1965 [ 8 ] Gregory Chaitinก็ได้นำเสนอทฤษฎีบทนี้ในJournal of the ACM เช่นกัน โดยบทความของ Chaitin ถูกส่งในเดือนตุลาคม 1966 และแก้ไขในเดือนธันวาคม 1968 และอ้างอิงถึงบทความของ Solomonoff และ Kolmogorov [ 9 ]
ทฤษฎีบทนี้กล่าวว่า ในบรรดาอัลกอริธึมที่ใช้ถอดรหัสสตริงจากคำอธิบาย (รหัส) นั้น จะมีอัลกอริธึมที่ดีที่สุดอยู่หนึ่งตัว อัลกอริธึมนี้สำหรับสตริงทุกตัว จะอนุญาตให้ใช้รหัสที่สั้นได้เท่ากับที่อัลกอริธึมอื่นๆ อนุญาต โดยมีค่าคงที่บวกเพิ่มเข้าไป ซึ่งค่าคงที่นี้ขึ้นอยู่กับอัลกอริธึมนั้นๆ แต่ไม่ขึ้นอยู่กับสตริงเอง โซโลมอนอฟใช้อัลกอริธึมนี้และความยาวของรหัสที่อัลกอริธึมนี้อนุญาต เพื่อกำหนด "ความน่าจะเป็นสากล" ของสตริง ซึ่งสามารถใช้เป็นพื้นฐานในการอนุมานแบบอุปนัยของตัวเลขถัดไปในสตริงได้ โคลโมโกโรฟใช้ทฤษฎีบทนี้เพื่อกำหนดฟังก์ชันต่างๆ ของสตริง รวมถึงความซับซ้อน ความสุ่ม และข้อมูล
เมื่อ Kolmogorov ทราบถึงงานของ Solomonoff เขาจึงยอมรับความสำคัญของ Solomonoff [ 10 ]เป็นเวลาหลายปีที่งานของ Solomonoff เป็นที่รู้จักในสหภาพโซเวียตมากกว่าในโลกตะวันตก อย่างไรก็ตาม ความเห็นพ้องโดยทั่วไปในชุมชนวิทยาศาสตร์คือการเชื่อมโยงความซับซ้อนประเภทนี้กับ Kolmogorov ซึ่งให้ความสำคัญกับความสุ่มของลำดับ ในขณะที่ความน่าจะเป็นเชิงอัลกอริทึมกลับเชื่อมโยงกับ Solomonoff ซึ่งมุ่งเน้นไปที่การทำนายโดยใช้การคิดค้นการแจกแจงความน่าจะเป็นก่อนหน้าสากล พื้นที่ที่กว้างขึ้นซึ่งครอบคลุมความซับซ้อนเชิงพรรณนาและความน่าจะเป็นมักเรียกว่าความซับซ้อนของ Kolmogorov นักวิทยาศาสตร์คอมพิวเตอร์Ming Liถือว่านี่เป็นตัวอย่างของปรากฏการณ์ Matthew : "...สำหรับทุกคนที่มีอยู่ จะได้รับเพิ่มมากขึ้น..." [ 11 ]
นอกจากนี้ยังมีรูปแบบอื่นๆ ของความซับซ้อนของ Kolmogorov หรือข้อมูลเชิงอัลกอริทึมอีกหลายแบบ รูปแบบที่ใช้กันอย่างแพร่หลายที่สุดคือรูปแบบที่อิงตามโปรแกรมที่กำหนดขอบเขตด้วยตนเองซึ่งส่วนใหญ่เป็นผลงานของLeonid Levin (1974)
แนวทางเชิงสัจพจน์สำหรับความซับซ้อนของ Kolmogorov โดยอิงตามสัจพจน์ของ Blum (Blum 1967) ได้รับการนำเสนอโดย Mark Burgin ในบทความที่ Andrey Kolmogorov นำเสนอเพื่อตีพิมพ์[ 12 ]
ผลลัพธ์พื้นฐาน
เราเขียนจะเป็น, ที่ไหนหมายถึงวิธีการเขียนโค้ดแบบตายตัวสำหรับทูเปิลของสตริง x และ y
ความไม่เท่าเทียมกัน
เราละเว้นปัจจัยการบวกของส่วนนี้อ้างอิงจาก[ 4 ]
ทฤษฎีบท.
บทพิสูจน์นำโปรแกรมใดๆ สำหรับเครื่องทัวริงสากลที่ใช้ในการกำหนดความซับซ้อนแบบธรรมดามาแปลงเป็นโปรแกรมแบบไม่มีคำนำหน้า โดยการเข้ารหัสความยาวของโปรแกรมในรูปแบบไบนารีเสียก่อน แล้วจึงแปลงความยาวนั้นกลับไปเป็นการเข้ารหัสแบบไม่มีคำนำหน้า ตัวอย่างเช่น สมมติว่าโปรแกรมมีความยาว 9 เราสามารถแปลงได้ดังนี้:โดยที่เราคูณตัวเลขแต่ละหลักด้วยสอง แล้วจึงเพิ่มรหัสสิ้นสุดเข้าไป เครื่องจักรทัวริงสากลแบบไม่มีคำนำหน้าสามารถอ่านโปรแกรมใดๆ สำหรับเครื่องจักรอื่นได้ดังนี้:ส่วนแรกเป็นการตั้งโปรแกรมเครื่องจักรให้จำลองการทำงานของเครื่องจักรอีกเครื่องหนึ่ง ซึ่งเป็นค่าใช้จ่ายคงที่ส่วนที่สองมีความยาวส่วนที่สามมีความยาว.
ทฤษฎีบท : มีอยู่จริงโดยที่กล่าวโดยสรุปคือในทำนองเดียวกัน, และ.
บทพิสูจน์สำหรับความซับซ้อนแบบธรรมดา เพียงแค่เขียนโปรแกรมที่คัดลอกอินพุตไปยังเอาต์พุตเท่านั้น สำหรับความซับซ้อนแบบไม่มีคำนำหน้า เราต้องอธิบายความยาวของสตริงก่อนที่จะเขียนสตริงนั้นออกมา
ทฤษฎีบท (ขอบเขตข้อมูลเพิ่มเติม, คุณสมบัติการบวกย่อย)
โปรดทราบว่าไม่มีวิธีใดที่จะเปรียบเทียบได้และหรือหรือหรือมีสตริงบางประเภทที่สตริงทั้งหมดนั้นอธิบายได้ง่าย แต่ส่วนประกอบย่อยของมันนั้นยากมากที่จะอธิบาย
ทฤษฎีบท (สมมาตรของข้อมูล).
บทพิสูจน์ด้านหนึ่งเรียบง่าย ส่วนอีกด้านหนึ่งนั้น...เราจำเป็นต้องใช้อาร์กิวเมนต์การนับ (หน้า 38 [ 13 ] )
ทฤษฎีบท (ข้อมูลไม่เพิ่มขึ้น)สำหรับฟังก์ชันที่คำนวณได้ใดๆเรามี.
บทพิสูจน์ตั้งโปรแกรมเครื่องจักรทัวริงให้สามารถอ่านโปรแกรมสองโปรแกรมต่อเนื่องกัน โปรแกรมหนึ่งอธิบายฟังก์ชัน และอีกโปรแกรมหนึ่งอธิบายสตริง จากนั้นรันโปรแกรมทั้งสองบนเทปทำงานเพื่อสร้างผลลัพธ์และเขียนออกมาให้ชัดเจน
ความไม่สามารถคำนวณได้ของความซับซ้อนของ Kolmogorov
ความพยายามอย่างง่ายๆ ในการเขียนโปรแกรมเพื่อคำนวณค่าK
มองเผินๆ อาจดูเหมือนง่ายที่จะเขียนโปรแกรมที่สามารถคำนวณK ( s ) สำหรับs ใดๆ เช่น โปรแกรมต่อไปนี้:
def kolmogorov_complexity ( s : str ): for i = 1 to infinity : for each string p of length exactly i if is_valid_program ( p ) and evaluate ( p ) == s return iโปรแกรมนี้จะวนซ้ำผ่านโปรแกรมที่เป็นไปได้ทั้งหมด (โดยการวนซ้ำผ่านสตริงที่เป็นไปได้ทั้งหมดและพิจารณาเฉพาะสตริงที่เป็นโปรแกรมที่ถูกต้องเท่านั้น) โดยเริ่มจากโปรแกรมที่สั้นที่สุด แต่ละโปรแกรมจะถูกเรียกใช้เพื่อค้นหาผลลัพธ์ที่โปรแกรมนั้นสร้างขึ้น โดยเปรียบเทียบกับอินพุตsหากผลลัพธ์ตรงกัน ก็จะส่งคืนความยาวของโปรแกรมนั้น
อย่างไรก็ตาม วิธีนี้จะใช้ไม่ได้ผล เพราะโปรแกรมบางโปรแกรม ที่ ทดสอบ จะไม่สิ้นสุดการทำงาน เช่น โปรแกรมที่มีลูปไม่สิ้นสุด ไม่มีวิธีใดที่จะหลีกเลี่ยงโปรแกรมเหล่านี้ทั้งหมดได้โดยการทดสอบก่อนที่จะเรียกใช้งาน เนื่องจาก ปัญหาการหยุดทำงานนั้นไม่สามารถคำนวณได้
ยิ่งไปกว่านั้น ไม่มีโปรแกรมใดเลยที่สามารถคำนวณฟังก์ชันK ได้ ไม่ว่าโปรแกรมนั้นจะซับซ้อนเพียงใดก็ตาม ซึ่งได้รับการพิสูจน์แล้วในตัวอย่างต่อไปนี้
การพิสูจน์อย่างเป็นทางการถึงความไม่สามารถคำนวณได้ของK
ทฤษฎีบท : มีสตริงที่มีความซับซ้อนของ Kolmogorov มากเท่าใดก็ได้ กล่าวอย่างเป็นทางการคือ สำหรับจำนวนธรรมชาติ n ใดๆจะมีสตริงsที่มีK ( s ) ≥ n [หมายเหตุ 2 ]
พิสูจน์:มิฉะนั้น สตริงจำกัดที่เป็นไปได้ทั้งหมดจำนวนอนันต์จะถูกสร้างขึ้นโดยโปรแกรมจำนวนจำกัด[หมายเหตุ 3 ]ที่มีความซับซ้อนต่ำกว่าnบิต
ทฤษฎีบท : Kไม่ใช่ฟังก์ชันที่คำนวณได้กล่าวคือ ไม่มีโปรแกรมใดที่รับสตริงs ใดๆ เป็นอินพุตและให้ผลลัพธ์เป็นจำนวนเต็มK ( s )
การพิสูจน์โดยการขัดแย้งต่อไปนี้ใช้ภาษาง่ายๆ ที่คล้ายกับ ภาษาปาสคาลในการแสดงโปรแกรม เพื่อความง่ายในการพิสูจน์ ให้สมมติว่าคำอธิบายของมัน (เช่นตัวแปลภาษา ) มีความยาวเท่ากับ1,400,000 บิต สมมติเพื่อหาข้อขัดแย้ง ว่ามีโปรแกรมอยู่
def kolmogorov_complexity ( s : str )ซึ่งรับสตริงs เป็นอินพุต และส่งคืนค่าK ( s ) โปรแกรมทั้งหมดมีความยาวจำกัด ดังนั้นเพื่อความง่ายในการพิสูจน์ ให้สมมติว่ามีความยาวเท่ากับ7,000,000,000 บิตทีนี้ลองพิจารณาโปรแกรมต่อไปนี้ที่มีความยาว1288บิต:
def generate_complex_string (): str for i = 1 to infinity : for each string s of length exactly i if kolmogorov_complexity ( s ) >= 8000000000 return sโดยใช้kolmogorov_complexityเป็นซับรูทีน โปรแกรมจะลองสตริงทุกสตริง เริ่มจากสตริงที่สั้นที่สุด จนกว่าจะได้สตริงที่มีความซับซ้อนของ Kolmogorov อย่างน้อยที่สุด8,000,000,000 บิต[หมายเหตุ 4 ] กล่าวคือสตริงที่ไม่สามารถสร้างได้ด้วยโปรแกรมใดๆ ที่สั้นกว่า8,000,000,000 บิตอย่างไรก็ตาม ความยาวโดยรวมของโปรแกรมข้างต้นที่สร้างค่าs นั้นมีเพียง8 บิตเท่านั้น7,001,401,288บิต[หมายเหตุ 5 ] ซึ่งเป็นข้อขัดแย้ง (ถ้าโค้ดKolmogorovComplexityสั้นลง ข้อขัดแย้งก็ยังคงอยู่ ถ้าโค้ดยาวขึ้น ค่าคงที่ที่ใช้ในสามารถGenerateComplexStringเปลี่ยนแปลงได้อย่างเหมาะสมเสมอ) [หมายเหตุ6 ]
การพิสูจน์ข้างต้นใช้ความขัดแย้งที่คล้ายกับความขัดแย้งของ "นอกจากสามารถให้ถึงไม่คำนวณได้ของการจากความไม่ของปัญหาการหยุด H เนื่องจาก K และ H เทียบเท่ากับทัวริง[ 14 ]
มีข้อสรุปเพิ่มเติมที่เรียกกันอย่างขบขันว่า " ทฤษฎีการจ้างงานเต็มรูปแบบ " ในวงการภาษาโปรแกรม ซึ่งระบุว่าไม่มีคอมไพเลอร์ใดที่ปรับขนาดได้อย่างสมบูรณ์แบบ
กฎลูกโซ่สำหรับความซับซ้อนของ Kolmogorov
กฎลูกโซ่[ 15 ]สำหรับความซับซ้อนของ Kolmogorov ระบุว่ามีค่าคงที่c อยู่ เช่นนั้นสำหรับXและY ทั้งหมด :
ข้อความดัง กล่าวระบุว่า โปรแกรมที่สั้นที่สุดที่สร้างXและY ขึ้นมาใหม่ นั้น จะมีขนาดใหญ่กว่าโปรแกรมที่สร้างX ขึ้นมาใหม่ และโปรแกรมที่สร้างY ขึ้นมาใหม่ โดยกำหนดให้X เพียงแค่ค่าลอการิทึมเท่านั้น โดยใช้ข้อความนี้ เราสามารถกำหนดสิ่งที่เทียบเคียงได้กับข้อมูลร่วมกันสำหรับความซับซ้อนของ Kolmogorovได้
การบีบอัด
การคำนวณขอบเขตบนสำหรับK ( s ) นั้นทำได้ง่าย เพียงแค่บีบอัดสตริงsด้วยวิธีการใดวิธีการหนึ่ง จากนั้นเขียนโปรแกรมคลายการบีบอัดที่เหมาะสมในภาษาที่เลือก นำโปรแกรมคลายการบีบอัดมาต่อกับสตริงที่บีบอัดแล้ว และวัดความยาวของสตริงที่ได้ ซึ่งก็คือ ขนาดของไฟล์เก็บถาวรแบบแตกไฟล์ได้เองในภาษาที่กำหนดนั่นเอง
สตริงsสามารถบีบอัดได้ด้วยจำนวนcถ้ามีคำอธิบายที่มีความยาวไม่เกิน | s | − cบิต ซึ่งเทียบเท่ากับการกล่าวว่าK ( s ) ≤ | s | − cมิฉะนั้นsจะไม่สามารถบีบอัดได้ด้วยcสตริงที่ไม่สามารถบีบอัดได้ด้วย c จะเรียกว่าไม่สามารถบีบอัดได้ เลย – ตามหลักการรังนกพิราบซึ่งใช้ได้เพราะสตริงที่บีบอัดแล้วทุกสตริงจะแปลงเป็นสตริงที่ไม่ถูกบีบอัดได้เพียงสตริงเดียวสตริงที่ไม่สามารถบีบอัดได้จึงต้องมีอยู่ เนื่องจากมีสตริง 2n บิตที่มีความยาวnแต่ มีสตริงที่สั้นกว่าเพียง 2n − 1 สตริงเท่านั้น นั่นคือสตริงที่มีความยาวน้อยกว่าn (เช่น มีความยาว 0, 1, ..., n − 1) [หมายเหตุ 7 ]
ด้วยเหตุผลเดียวกัน สตริงส่วนใหญ่จึงมีความซับซ้อนในแง่ที่ว่าไม่สามารถบีบอัดได้อย่างมีนัยสำคัญ – ค่า K ( s ) ของสตริงเหล่านั้นจะไม่เล็กกว่า | s | มากนัก ซึ่งก็คือความยาวของsในหน่วยบิต เพื่อให้เข้าใจได้ชัดเจนยิ่งขึ้น ให้กำหนดค่าn ไว้ค่า หนึ่ง จะมี สตริงบิตที่มีความยาว nจำนวน2n สตริง การ แจกแจง ความน่าจะเป็นแบบเอกรูป บนพื้นที่ของสตริงบิตเหล่านี้จะ กำหนดน้ำหนักที่เท่ากันเป๊ะคือ 2 − nให้กับแต่ละสตริงที่มีความยาวn
ทฤษฎีบท : ด้วยการแจกแจงความน่าจะเป็นแบบเอกรูปบนปริภูมิของสตริงบิตที่มีความยาวnความน่าจะเป็นที่สตริงนั้นไม่สามารถบีบอัดได้ด้วยc จะมี ค่าอย่างน้อย1 − 2 − c +1 + 2 − n
เพื่อพิสูจน์ทฤษฎีบทนี้ โปรดสังเกตว่าจำนวนคำอธิบายที่มีความยาวไม่เกินn − cนั้นกำหนดโดยอนุกรมเรขาคณิต:
เหลืออยู่อย่างน้อย
สตริงบิตที่มีความยาวnซึ่งไม่สามารถบีบอัดได้ด้วยc ในการหาความน่าจะเป็น ให้หารด้วย2n
ทฤษฎีความไม่สมบูรณ์ของไชติน

prog1(s)prog2(s)จากทฤษฎีบทข้างต้น ( § การบีบอัด ) สตริงส่วนใหญ่มีความซับซ้อนในแง่ที่ว่าไม่สามารถอธิบายได้ในรูปแบบที่ "บีบอัด" ได้อย่างมีนัยสำคัญ อย่างไรก็ตาม ปรากฏว่าข้อเท็จจริงที่ว่าสตริงเฉพาะมีความซับซ้อนนั้นไม่สามารถพิสูจน์ได้อย่างเป็นทางการ หากความซับซ้อนของสตริงนั้นสูงกว่าเกณฑ์ที่กำหนด การกำหนดอย่างเป็นทางการที่แม่นยำมีดังนี้ ขั้นแรก กำหนดระบบสัจพจน์S เฉพาะ สำหรับจำนวนธรรมชาติระบบสัจพจน์นี้ต้องมีประสิทธิภาพมากพอที่จะทำให้ สามารถเชื่อมโยงสูตรF ในS กับข้อความยืนยัน A บางประการเกี่ยวกับความซับซ้อนของสตริงได้ การเชื่อมโยงนี้ต้องมีคุณสมบัติดังต่อไปนี้:
ถ้าF สามารถพิสูจน์ได้จากสัจพจน์ของSแล้ว ข้อความยืนยันA ที่สอดคล้องกัน จะต้องเป็นจริง การ "กำหนดรูปแบบอย่างเป็นทางการ" นี้สามารถทำได้โดยอาศัยการกำหนดหมายเลขแบบเกอเดล
ทฤษฎีบท : มีค่าคงที่L อยู่ค่าหนึ่ง (ซึ่งขึ้นอยู่กับSและการเลือกภาษาอธิบายเท่านั้น) โดยที่ไม่มีสตริงs ใดๆ ที่ทำให้ข้อความนั้น เป็นจริง
สามารถพิสูจน์ได้ภายใน S [ 16 ] [ 17 ]
แนวคิดการพิสูจน์ : การพิสูจน์ผลลัพธ์นี้จำลองมาจากโครงสร้างแบบอ้างอิงตนเองที่ใช้ในปรากฏการณ์ขัดแย้งของเบอร์รีเริ่มต้นด้วยการสร้างโปรแกรมที่แจงนับการพิสูจน์ภายในSและกำหนดขั้นตอนPซึ่งรับอินพุตเป็นจำนวนเต็มLและพิมพ์สตริงxที่อยู่ในหลักฐานการพิสูจน์ภายในSของข้อความK ( x ) ≥ Lโดยการตั้งค่าLให้มากกว่าความยาวของขั้นตอนP นี้ เราจะได้ว่าความยาวที่จำเป็นของโปรแกรมในการพิมพ์xตามที่ระบุไว้ในK ( x ) ≥ Lซึ่งอย่างน้อยที่สุดคือLนั้น น้อยกว่าจำนวนLนับตั้งแต่สตริงxถูกพิมพ์โดยขั้นตอนPนี่คือข้อขัดแย้ง ดังนั้นจึงเป็นไปไม่ได้ที่ระบบการพิสูจน์Sจะพิสูจน์K ( x ) ≥ LสำหรับL ที่ มีขนาดใหญ่มาก โดยเฉพาะอย่างยิ่งสำหรับLที่มากกว่าความยาวของขั้นตอนP (ซึ่งมีค่าจำกัด)
การพิสูจน์ :
เราสามารถค้นหาการแจงนับที่มีประสิทธิภาพของบทพิสูจน์เชิงรูปธรรมทั้งหมดในSได้โดยใช้ขั้นตอนบางอย่าง
def nth_proof ( n : int )ซึ่งรับค่าn เป็นอินพุต และส่งออกหลักฐานบางอย่าง ฟังก์ชันนี้จะแจงนับหลักฐานทั้งหมด บางส่วนเป็นหลักฐานสำหรับสูตรที่เราไม่สนใจในที่นี้ เนื่องจากหลักฐานที่เป็นไปได้ทั้งหมดในภาษาSจะถูกสร้างขึ้นสำหรับค่าn บาง ค่า บางส่วนเป็นสูตรความซับซ้อนในรูปแบบK ( s ) ≥ nโดยที่sและnเป็นค่าคงที่ในภาษาSมีขั้นตอนหนึ่ง
def nth_proof_proves_complexity_formula ( n : int ): boolซึ่งจะกำหนดว่า การพิสูจน์ครั้งที่ nนั้นพิสูจน์สูตรความซับซ้อนK ( s ) ≥ L ได้จริงหรือ ไม่ สตริงsและจำนวนเต็มLนั้นสามารถคำนวณได้โดยใช้ขั้นตอนดังนี้:
def string_nth_proof ( n : int )def complexity_lower_bound_nth_proof ( n : int ): intพิจารณาขั้นตอนต่อไปนี้:
def generate_provably_complex_string ( n : int ): for i = 1 to infinity : if nth_proof_proves_complexity_formula ( i ) and complexity_lower_bound_nth_proof ( i ) ≥ n return string_nth_proof ( i )เมื่อกำหนดขั้นตอนนี้จะลองพิสูจน์ทุกวิธีจนกว่าจะพบสตริงและการพิสูจน์ในระบบที่เป็นทางการSของสูตรสำหรับบางคนหากไม่มีหลักฐานดังกล่าว กระบวนการก็จะวนซ้ำไปเรื่อยๆ
สุดท้ายนี้ ลองพิจารณาโปรแกรมที่ประกอบด้วยคำจำกัดความของขั้นตอนทั้งหมดเหล่านี้ และการเรียกใช้งานหลัก:
generate_provably_complex_string ( n ₀ )โดยที่ค่าคงที่จะกำหนดในภายหลัง ความยาวโดยรวมของโครงการสามารถแสดงได้ดังนี้, ที่ไหนเป็นค่าคงที่บางอย่างและแสดงถึงความยาวของค่าจำนวนเต็มภายใต้สมมติฐานที่สมเหตุสมผลว่ามันถูกเข้ารหัสในรูปแบบเลขฐานสอง เราจะเลือกมีค่ามากกว่าความยาวของโปรแกรม กล่าวคือ มีค่าในลักษณะที่ว่านี่เป็นความจริงอย่างชัดเจนสำหรับมีขนาดใหญ่พอสมควร เนื่องจากด้านซ้ายมือเติบโตเป็นเส้นตรงในในขณะที่ฝั่งขวามือเติบโตแบบลอการิทึมในจนถึงค่าคงที่ที่กำหนดไว้.
งั้นก็ไม่มีหลักฐานของแบบฟอร์มนั้น" กับสามารถหาได้ในSดังที่เห็นได้จากข้อโต้แย้งทางอ้อม : ถ้าcomplexity_lower_bound_nth_proof(i)สามารถส่งคืนค่าได้จากนั้นลูปภายในgenerate_provably_complex_stringจะสิ้นสุดลงในที่สุด และกระบวนการนั้นจะส่งคืนสตริงsโดยที่
| ≥ | โดยการก่อสร้างgenerate_provably_complex_string | |
| > | โดยการเลือกของ | |
| ≥ | เนื่องจากได้รับการอธิบายโดยโปรแกรมที่มีความยาวดังกล่าว |
นี่คือความขัดแย้งพิสูจน์แล้ว
ดังนั้น โปรแกรมข้างต้นจึงมีค่าที่เลือกไว้ดังนี้ต้องวนลูปไปเรื่อยๆ
แนวคิดที่คล้ายกันนี้ถูกนำมาใช้เพื่อพิสูจน์คุณสมบัติของ ค่าคงที่ ของChaitin
ความยาวข้อความขั้นต่ำ
หลักการความยาวข้อความขั้นต่ำของการอนุมานเชิงสถิติและอุปนัยและการเรียนรู้ของเครื่องได้รับการพัฒนาโดยCS Wallaceและ DM Boulton ในปี 1968 MML เป็นแบบเบย์เซียน (กล่าวคือรวมความเชื่อก่อนหน้า) และทฤษฎีสารสนเทศ มีคุณสมบัติที่พึงประสงค์ของความไม่แปรผันทางสถิติ (กล่าวคือ การอนุมานจะแปลงไปเมื่อมีการกำหนดพารามิเตอร์ใหม่ เช่น จากพิกัดเชิงขั้วเป็นพิกัดคาร์ทีเซียน) ความสอดคล้องทางสถิติ (กล่าวคือ แม้แต่สำหรับปัญหาที่ยากมาก MML ก็จะลู่เข้าสู่แบบจำลองพื้นฐานใดๆ) และประสิทธิภาพ (กล่าวคือ แบบจำลอง MML จะลู่เข้าสู่แบบจำลองพื้นฐานที่แท้จริงใดๆ ได้เร็วที่สุดเท่าที่จะเป็นไปได้) CS Wallace และ DL Dowe (1999) ได้แสดงให้เห็นถึงความเชื่อมโยงอย่างเป็นทางการระหว่าง MML และทฤษฎีสารสนเทศเชิงอัลกอริทึม (หรือความซับซ้อนของ Kolmogorov) [ 18 ]
ความสุ่มของ Kolmogorov
นิยามความสุ่มของ Kolmogorovระบุว่า สตริง (โดยปกติจะเป็นบิต ) จะสุ่มได้ก็ต่อ เมื่อ โปรแกรมคอมพิวเตอร์ที่สั้นที่สุดที่สามารถสร้างสตริงนั้นได้มีความยาวประมาณเท่ากับตัวสตริงเอง เพื่อให้ชัดเจนยิ่งขึ้น สตริงคือ...ความยาวเรียกว่าการสุ่มแบบ Kolmogorovถ้า ที่ไหนคือความซับซ้อนของ Kolmogorov ที่ไม่มีคำนำหน้าซึ่งกำหนดไว้ข้างต้น สตริงสุ่มในความหมายนี้ไม่สามารถบีบอัดได้เนื่องจากเป็นไปไม่ได้ที่จะ "บีบอัด" สตริงลงในโปรแกรมที่สั้นกว่าตัวสตริงเอง มีสตริงสุ่ม Kolmogorov อย่างน้อยหนึ่งสตริงสำหรับแต่ละความยาว[ 19 ]
คำจำกัดความนี้สามารถขยายเพื่อกำหนดแนวคิดของความสุ่มสำหรับ ลำดับ อนันต์จากตัวอักษรจำกัดลำดับสุ่มเชิงอัลกอริทึม เหล่านี้ สามารถกำหนดได้ในสามวิธีที่เทียบเท่ากัน วิธีหนึ่งใช้อนาล็อกที่มีประสิทธิภาพของทฤษฎีการวัด อีกวิธี หนึ่งใช้มาร์ติงเกล ที่มีประสิทธิภาพ วิธีที่สามกำหนดลำดับอนันต์ให้เป็นแบบสุ่มหากความซับซ้อนของ Kolmogorov ที่ไม่มีคำนำหน้าของส่วนเริ่มต้นเติบโตเร็วพอ — จะต้องมีค่าคงที่cเช่นนั้นความซับซ้อนของส่วนเริ่มต้นที่มีความยาวnจะ ต้องมี ค่าอย่างน้อยn − c เสมอ [ 20 ]
ความสัมพันธ์กับเอนโทรปี
สำหรับระบบพลวัต อัตราเอนโทรปีและความซับซ้อนเชิงอัลกอริทึมของวิถีการเคลื่อนที่นั้นมีความสัมพันธ์กันตามทฤษฎีบทของบรูดโนที่ว่า ความเท่าเทียมกันใช้ได้กับเกือบทุกอย่าง[ 21 ]
สามารถแสดงได้[ 22 ]ว่าสำหรับเอาต์พุตของแหล่งข้อมูล Markovความซับซ้อนของ Kolmogorov เกี่ยวข้องกับเอนโทรปี ของแหล่งข้อมูล กล่าวคือ ความซับซ้อนของ Kolmogorov ของเอาต์พุตของแหล่งข้อมูล Markov ที่ถูกทำให้เป็นมาตรฐานโดยความยาวของเอาต์พุต จะลู่เข้าสู่ เอนโทรปีของแหล่งข้อมูลเกือบแน่นอน (เมื่อความยาวของเอาต์พุตเข้าสู่ค่าอนันต์)
ทฤษฎีบท (ทฤษฎีบท 14.2.5 [ 23 ] ) ความซับซ้อนแบบ Kolmogorov ของสตริงไบนารีพอใจที่ไหนคือฟังก์ชันเอนโทรปีแบบไบนารี (อย่าสับสนกับอัตราเอนโทรปี)
ปัญหาการหยุด
ฟังก์ชันความซับซ้อนของ Kolmogorov เทียบเท่ากับการตัดสินใจเกี่ยวกับปัญหาการหยุดทำงาน
ถ้าเรามีออราเคิลที่หยุดการทำงานได้ เราสามารถคำนวณความซับซ้อนของคอลโมโกรอฟของสตริงได้โดยการลองใช้โปรแกรมที่หยุดการทำงานทุกโปรแกรมตามลำดับตัวอักษร จนกว่าจะมีโปรแกรมใดโปรแกรมหนึ่งแสดงผลสตริงนั้นออกมา
ทิศทางอื่นมีความซับซ้อนมากกว่ามาก[ 24 ] [ 25 ]แสดงให้เห็นว่าเมื่อกำหนดฟังก์ชันความซับซ้อนของ Kolmogorov แล้ว เราสามารถสร้างฟังก์ชันได้โดยที่สำหรับขนาดใหญ่ทั้งหมด, ที่ไหนคือ ฟังก์ชันการเลื่อนของ Busy Beaver (หรือเขียนแทนด้วยโดยการปรับเปลี่ยนฟังก์ชันที่ค่าต่ำกว่าของเราได้รับขีดจำกัดบนของซึ่งช่วยแก้ปัญหาการหยุดทำงานได้
ลองพิจารณาโปรแกรมนี้ดูซึ่งรับข้อมูลเข้าเป็นและใช้งาน.
- แสดงรายการสตริงทั้งหมดที่มีความยาว.
- สำหรับสตริงแต่ละสตริงดังกล่าวแสดงรายการโปรแกรมทั้งหมด (ที่ไม่มีคำนำหน้า) ที่มีความยาวจนกว่าจะมีตัวใดตัวหนึ่งส่งออกมาบันทึกระยะเวลาการทำงาน.
- ส่งออกค่าที่ใหญ่ที่สุด.
เราพิสูจน์โดยวิธีขัดแย้งว่าสำหรับขนาดใหญ่ทั้งหมด.
อนุญาตเป็นบีเวอร์ที่ขยันขันแข็งตลอดระยะเวลาลองพิจารณาโปรแกรม (ที่ไม่มีคำนำหน้า) นี้ ซึ่งไม่รับอินพุตใดๆ:
- เรียกใช้โปรแกรมและบันทึกระยะเวลาการทำงานของมัน.
- สร้างโปรแกรมทั้งหมดที่มีความยาวเรียกใช้งานแต่ละโปรแกรมเป็นเวลาสูงสุดขั้นตอนต่างๆ โปรดสังเกตผลลัพธ์ของขั้นตอนที่หยุดทำงาน
- แสดงผลลัพธ์เป็นสตริงที่มีลำดับตัวอักษรต่ำที่สุดที่ยังไม่ปรากฏในผลลัพธ์ใดๆ เหล่านั้น
ให้สตริงที่โปรแกรมส่งออกมาเป็น.
โปรแกรมมีระยะเวลา, ที่ไหนมาจากความยาวของ Busy Beaver,มาจากการใช้ รหัสเดลต้าของเอเลียส (ที่ไม่มีคำนำหน้า) สำหรับตัวเลข, และมาจากส่วนอื่นๆ ของโปรแกรม ดังนั้นสำหรับทุกสิ่งใหญ่นอกจากนี้ เนื่องจากมีโปรแกรมที่มีความยาวที่เป็นไปได้เพียงจำนวนจำกัดเท่านั้นเรามีโดยหลักการจัดหมวดหมู่โดยสมมติฐานดังนั้นสตริงทุกสตริงที่มีความยาวมีโปรแกรมขั้นต่ำพร้อมรันไทม์ดังนั้น สตริงมีโปรแกรมขั้นต่ำพร้อมรันไทม์นอกจากนี้ โปรแกรมดังกล่าวยังมีระยะเวลานานสิ่งนี้ขัดแย้งกับอย่างไรได้ถูกสร้างขึ้นแล้ว
ความน่าจะเป็นสากล
แก้ไขเครื่องทัวริงสากลซึ่งเป็นค่าเดียวกันกับที่ใช้ในการกำหนดความซับซ้อนของ Kolmogorov (แบบไม่มีคำนำหน้า) จงกำหนดความน่าจะเป็นสากล (แบบไม่มีคำนำหน้า) ของสตริงจะเป็นกล่าวอีกนัยหนึ่งคือ เป็นความน่าจะเป็นที่เครื่องจักรทัวริงสากลจะหยุดทำงานหลังจากอ่านส่วนนำหน้าบางส่วนของกระแสข้อมูลไบนารีแบบสุ่มสม่ำเสมอเป็นอินพุต และส่งผลลัพธ์ออกมา.
บันทึก.ไม่ได้หมายความว่าสตรีมอินพุตคือแต่เครื่องจักรทัวริงสากลจะหยุดทำงาน ณ จุดใดจุดหนึ่งหลังจากอ่านส่วนแรกเสร็จแล้วโดยไม่อ่านข้อมูลเพิ่มเติมใดๆ และเมื่อหยุดทำงานแล้ว ก็จะเขียนข้อความว่าไปยังเทปเอาต์พุต
ทฤษฎีบท (ทฤษฎีบท 14.11.1 [ 23 ] )
นัยสำคัญในทางชีววิทยา
ความซับซ้อนของ Kolmogorov ถูกนำมาใช้ในบริบทของชีววิทยาเพื่อโต้แย้งว่าสมมาตรและการจัดเรียงแบบโมดูลาร์ที่สังเกตได้ในหลายสปีชีส์เกิดขึ้นจากแนวโน้มของวิวัฒนาการที่จะเลือกความซับซ้อนของ Kolmogorov ที่น้อยที่สุด[ 26 ]เมื่อพิจารณาจีโนมเป็นโปรแกรมที่ต้องแก้ปัญหาหรือดำเนินการฟังก์ชันต่างๆ โปรแกรมที่สั้นกว่าจะเป็นที่ต้องการมากกว่าเนื่องจากกลไกของวิวัฒนาการจะค้นหาได้ง่ายกว่า[ 27 ]ตัวอย่างของแนวทางนี้คือสมมาตรแปดเท่าของวงจรเข็มทิศที่พบในแมลงหลายชนิด ซึ่งสอดคล้องกับวงจรที่ทั้งใช้งานได้และต้องการความซับซ้อนของ Kolmogorov น้อยที่สุดในการสร้างจากหน่วยที่จำลองตัวเองได้[ 28 ]
เวอร์ชันแบบมีเงื่อนไข
ความซับซ้อนของ Kolmogorov แบบมีเงื่อนไขของสตริงสองสตริงโดยคร่าวๆ แล้ว จะถูกนิยามว่าเป็นความซับซ้อนของ Kolmogorov ของxเมื่อกำหนดให้yเป็นอินพุตเสริมของกระบวนการ[ 29 ] [ 30 ]ดังนั้น ในขณะที่ความซับซ้อนของ Kolmogorov (แบบไม่มีเงื่อนไข)ของลำดับคือความยาวของโปรแกรมไบนารีที่สั้นที่สุดที่ส่งออกผลลัพธ์บนคอมพิวเตอร์สากล และสามารถคิดได้ว่าเป็นปริมาณข้อมูลขั้นต่ำที่จำเป็นในการสร้างความซับซ้อนของ Kolmogorov แบบมีเงื่อนไขถูกกำหนดให้เป็นความยาวของโปรแกรมไบนารีที่สั้นที่สุดที่คำนวณเมื่อไรป้อนเป็นข้อมูลเข้าโดยใช้คอมพิวเตอร์สากล[ 31 ]
นอกจากนี้ยังมีความซับซ้อนที่ขึ้นอยู่กับความยาวด้วยซึ่งก็คือความซับซ้อนของxเมื่อกำหนดความยาวของxเป็นค่าที่ทราบ/ป้อนเข้า[ 32 ] [ 33 ]
ความซับซ้อนที่จำกัดเวลา
ความซับซ้อนของ Kolmogorov ที่จำกัดเวลาเป็นเวอร์ชันที่แก้ไขของความซับซ้อนของ Kolmogorov โดยที่พื้นที่ของโปรแกรมที่จะค้นหาวิธีแก้ปัญหาถูกจำกัดไว้เฉพาะโปรแกรมที่สามารถทำงานได้ภายในจำนวนขั้นตอนที่กำหนดไว้ล่วงหน้า[ 34 ]มีการตั้งสมมติฐานว่าความเป็นไปได้ของการมีอยู่ของอัลกอริทึมที่มีประสิทธิภาพสำหรับการกำหนดความซับซ้อนของ Kolmogorov ที่จำกัดเวลาโดยประมาณนั้นเกี่ยวข้องกับคำถามที่ว่าฟังก์ชันทางเดียวที่ แท้จริง มีอยู่ หรือไม่ [ 35 ] [ 36 ]
ดูเพิ่มเติม
หมายเหตุ
- ↑นี่เป็นการตีพิมพ์ซ้ำภาษาอังกฤษของบทความต้นฉบับภาษารัสเซียเมื่อปี 1963 ของโคลโมโกรอฟ เรื่อง “О таблицах случайных чисел”.
- ↑อย่างไรก็ตาม sที่มี K ( s ) = nไม่จำเป็นต้องมีอยู่สำหรับทุก nตัวอย่างเช่น ถ้า nไม่ใช่พหุคูณของ 7 โปรแกรม ASCII ใดๆ ก็ไม่ สามารถมีความยาวเท่ากับ nบิต
- ↑มีข้อความโปรแกรมที่แตกต่างกัน 1 + 2 + 2 2 + 2 3 + ... + 2 n = 2 n +1 − 1 ข้อความที่มีความยาวไม่เกิน nบิต; เปรียบเทียบกับอนุกรมเรขาคณิตหากความยาวของโปรแกรมเป็นพหุคูณของ 7 บิต จะมีข้อความโปรแกรมน้อยลงไปอีก
- ↑จากทฤษฎีบทก่อนหน้านี้ สตริงดังกล่าวมีอยู่จริง ดังนั้น
forลูปจะสิ้นสุดลงในที่สุด - ↑รวมถึงตัวแปลภาษาและรหัสซับรูทีนสำหรับ
KolmogorovComplexity - ↑ถ้า
KolmogorovComplexityมีความยาว nบิต ค่าคงที่ mที่ใช้ในGenerateComplexStringจะต้องถูกปรับให้ตรงตาม n +1,400,000 +1218 + 7·log ( m ) < mซึ่งเป็นไปได้เสมอ เนื่องจาก mเติบโตเร็วกว่า log ( m ) - ↑เนื่องจากมีสตริงความยาว L จำนวน N = 2 Lสตริง ดังนั้นจำนวนสตริงความยาว L = 0, 1, ..., n − 1คือ N + N + ... + N = 2 0 + 2 1 + ... + 2 n −1ซึ่งเป็นอนุกรมเรขาคณิต จำกัด ที่มีผลรวม 2 0 + 2 1 + ... + 2 n −1 = 2 0 × (1 − 2 n ) / (1 − 2) = 2 n − 1
อ่านเพิ่มเติม
- Blum, M. (1967). "เกี่ยวกับขนาดของเครื่องจักร" . ข้อมูลและการควบคุม . 11 (3): 257. doi : 10.1016/S0019-9958(67)90546-3 .
- Brudno, A. (1983). "เอนโทรปีและความซับซ้อนของวิถีการเคลื่อนที่ของระบบพลวัต" วารสารของสมาคมคณิตศาสตร์มอสโก 2 : 127– 151 .
- Cover, Thomas M.; Thomas, Joy A. (2006). องค์ประกอบของทฤษฎีสารสนเทศ ( ฉบับที่ 2). Wiley-Interscience. ISBN 0-471-24195-4.
- ลาโฮส, รอนใหญ่; กาบอร์, อิวานยอส; เรกา, ซาโบ (1999) อัลกอริตมูซอก . พิมพ์ผิดTeX. ไอเอสบีเอ็น 963-279-014-6.
- หลี่หมิง; วิตันยี, พอล (1997) ความรู้เบื้องต้นเกี่ยวกับความซับซ้อนของโคลโมโกรอฟและการประยุกต์ สปริงเกอร์. ไอเอสบีเอ็น 978-0-387-33998-6.
- หยู, มานิน (1977). หลักสูตรตรรกศาสตร์ทางคณิตศาสตร์ . สปริงเกอร์-เวอร์แลก. ISBN 978-0-7204-2844-5.
- Sipser, Michael (1997). บทนำสู่ทฤษฎีการคำนวณ . PWS. ISBN 0-534-95097-3.
- Downey, Rodney G.; Hirschfeldt, Denis R. (2010). "ความสุ่มและความซับซ้อนของอัลกอริทึม" . ทฤษฎีและการประยุกต์ใช้การคำนวณ . doi : 10.1007/978-0-387-68441-3 . ISBN 978-0-387-95567-4ISSN 2190-619X
ลิงก์ภายนอก
- มรดกของ Andrei Nikolaevich Kolmogorov
- สิ่งพิมพ์ออนไลน์ของ Chaitin
- หน้า IDSIA ของ Solomonoff
- การสรุปข้อมูลเชิงอัลกอริทึมโดยเจ. ชมิดฮูเบอร์
- "บทวิจารณ์ของ Li Vitanyi 1997 "
- ทรอมป์, จอห์น. "สนามทดลองแคลคูลัสแลมบ์ดาและตรรกะเชิงผสมของจอห์น "แบบจำลองคอมพิวเตอร์แคลคูลัสแลมบ์ดาของทรอมป์นำเสนอคำจำกัดความที่ชัดเจนของ K()]
- ปัญญาประดิษฐ์สากลบนพื้นฐานของความซับซ้อนของ Kolmogorov ISBN 3-540-22139-5โดยเอ็ม. ฮัตเตอร์ : ISBN 3-540-22139-5
- ความยาวข้อความขั้นต่ำ (MML)ของDavid Doweและหลักการมีดโกนของ Occam
- Grunwald, P.; Pitt, MA (2005). Myung, IJ (บรรณาธิการ). ความก้าวหน้าในความยาวคำอธิบายขั้นต่ำ: ทฤษฎีและการประยุกต์ใช้สำนักพิมพ์ MIT ISBN 0-262-07262-9.