ความเท่าเทียมกันของคำจำกัดความที่ซับซ้อน Kolmogorov


20

มีหลายวิธีในการกำหนดKolmogorov-Complexityและโดยทั่วไปคำจำกัดความทั้งหมดนี้จะเทียบเท่ากับค่าคงที่เพิ่มเติม นั่นคือถ้าK1และK2เป็นฟังก์ชันความซับซ้อนของ kolmogorov (กำหนดผ่านภาษาหรือรุ่นที่แตกต่างกัน) ดังนั้นจึงมีค่าคงที่cเช่นนั้นสำหรับทุกสายx , |K1(x)K2(x)|<c . ฉันเชื่อว่านี่เป็นเพราะสำหรับ Kolmogorov ทุกฟังก์ชันที่ซับซ้อนKและสำหรับทุก ๆxมันเก็บไว้K(x)|x|+cสำหรับบางคนคงคc

ฉันสนใจคำจำกัดความต่อไปนี้ของKโดยอิงจากทัวริง - เครื่องจักร

  1. จำนวนสถานะ : กำหนดK1(x)ให้เป็นจำนวนขั้นต่ำqเช่นที่ TM ที่มีสถานะqแสดงผลxบนสตริงว่าง
  2. K2(x)xMMM xK2(x)=min|M|Mx

มีและเทียบเท่า? ความสัมพันธ์ระหว่างพวกเขาคืออะไรและคนใดที่เข้าใจแนวคิดของความซับซ้อนของ Kolmogorov ได้ดีกว่าหากพวกเขาไม่เท่าเทียมกันK 2K1K2

สิ่งที่ทำให้ฉันเป็นพิเศษคืออัตราเพิ่มขึ้นด้วยซึ่งดูเหมือนจะไม่เป็นแบบเชิงเส้นมาก (หรืออย่างน้อยเป็นเส้นตรงกับค่าคงที่ซึ่งมากกว่า ) พิจารณา TM ที่ง่ายที่สุดที่เอาต์พุต - อันที่เพิ่งเข้ารหัสซึ่งเป็นส่วนหนึ่งของฟังก์ชันสถานะและช่วงการเปลี่ยนภาพ มันเป็นทันทีจะเห็นว่า | อย่างไรก็ตามการเข้ารหัสของเครื่องเดียวกันนั้นใหญ่กว่ามากและขอบเขตที่ฉันได้รับคือ. x C > 1 K 2 < C | x | | x | + c x x K 1 ( x ) | x | + 1 K 2 ( x ) | x | บันทึก| x |K2xC>1K2<C|x||x|+cxxK1(x)|x|+1K2(x)|x|log|x|


มีเครื่องจักรมากกว่ามีรัฐและขนาดเฉลี่ยของพวกมันคืออย่างน้อยดังนั้นจึงไม่น่าเป็นไปได้ที่สิ่งเหล่านี้จะแตกต่างกันเพียงค่าคงที่เพิ่มเติม n n 22n2nn2
Kaveh

1
มีขอบเขตที่รู้จักกันดีว่าสำหรับการแก้ไขบางไม่ได้ขึ้นอยู่กับxนี้เป็นเพราะเราสามารถเข้ารหัสเป็นภาษาคำนำหน้าฟรีโดยเพียงแค่การเสแสร้งบิตของแต่ละแล้วลงท้ายด้วย01ใช้เวลาบิตเพื่อเป็นตัวแทนของxดังนั้นเนื่องจากถูกกำหนดในรูปแบบของเครื่องที่ไม่มีคำนำหน้าอเนกประสงค์สำหรับการแก้ไขบางคสิ่งนี้สามารถปรับปรุงได้โดยใช้วิธีที่ชาญฉลาดยิ่งขึ้นในการเข้ารหัสเป็นภาษาที่ไม่มีคำนำหน้า c x x x 01 2 | x | + 2 x K 2 K 2 ( x ) 2 | x | + 2 + c c xK2(x)c+2|x|cxxx012|x|+2xK2K2(x)2|x|+2+ccx
Carl Mummert

ฉันมองไม่เห็น ดูเหมือนว่าจะให้เป็นส่วนหนึ่งของการเข้ารหัส (เป็นข้อมูลดิบ) หรือคุณต้องสร้างด้วยเครื่องของรัฐ ตัวเลือกแรกดูเหมือนว่าจะมีการโกงและฉันไม่เห็นว่าจะสามารถเปรียบเทียบกับตัวเลือกที่สอง (ซึ่งหมายถึง )xxxK1
Ran G.

@Ran G .: จุดที่สำคัญคือไม่แปรเปลี่ยนทฤษฎีบทอธิบายไว้ที่en.wikipedia.org/wiki/Invariance_theorem ถ้าฉันสามารถอธิบายระบบที่มีประสิทธิภาพใด ๆ ที่มีอัตราการเติบโตเครื่องทัวริงสากล (ตามที่คุณอธิบายสำหรับ ) จะพบสิ่งนี้ภายในค่าคงที่แบบเพิ่มเติม เครื่องจักรอเนกประสงค์คืออุปกรณ์ที่ใช้เป็นอินพุตและส่งคืนเอาต์พุตของหากหยุดทำงาน K 2M M M2|x|K2MMM
Carl Mummert

คำตอบ:


6

ฉันขอโทษล่วงหน้าว่าฉันให้รายละเอียดมากเกินไป แต่ฉันกำลังจะเถียงคนอื่น

เกี่ยวกับK(x)K(x)+c

ความจริงที่ว่ามักมาจากล่ามภาษาคำอธิบาย # 2 เป็นภาษาคำอธิบาย # 1 และไม่ใช่จากการแปลจากโปรแกรมของ 2 เป็นโปรแกรมของ # 1K1(x)K2(x)+c

ตัวอย่างเช่นและคุณจะได้รับความไม่เท่าเทียมกันเช่นนี้:KC(x)KPython(x)+cpy2c

void py_run(char * s) {
    // code of your Python interpreter
}

int main(void) {
    py_run("Put here your Python program of size Kpython(x)");
}

จากนั้นค่าคงที่ของคุณจะเหมือนกับโดยที่คือจำนวนบิตสำหรับโค้ดนี้และบิตเป็นขนาดที่ล่าม Python อย่างเป็นทางการที่เขียนไว้ใน C แน่นอนคุณต้องตีความสิ่งที่เป็นไปได้ ในภาษาคำอธิบายของคุณสำหรับ Python เพื่อให้คุณสามารถทำได้ดีกว่า 69 MB :-) 528 + 490240688 528 490240688cpy2c528+490240688528490240688

สิ่งสำคัญคือคุณสามารถเขียนโปรแกรม Python ของคุณเป็นเส้นตรงในรหัส C ของคุณ ตัวอย่างเช่นภาษาที่คุณต้องใส่ "BANANA" ระหว่างตัวละครทุกตัวไม่ใช่โปรแกรมคำอธิบายที่ดีมากและคุณสมบัตินั้นเป็นเท็จ (แต่ถ้าภาษาคำอธิบายอนุญาตให้คุณเขียนข้อมูลในไฟล์แยกต่างหากหรือในบล็อกปัญหานี้จะหายไป)

ทำไมมีข้อบกพร่องK1(x)=q

ปัญหาเกี่ยวกับคำนิยามของของคุณคือคุณอาจต้องใช้มากกว่าบิตเพื่ออธิบายเครื่องทัวริงที่มีสถานะเนื่องจากคุณต้องเข้ารหัสการเปลี่ยน q qK1qq

ดังนั้นและอาจไม่เท่ากัน แต่นั่นเป็นความผิดของผมคิดว่าเราสามารถพิสูจน์ได้ว่าทั้งหมดมีดังกล่าวว่าK_1แน่นอนว่านั้นเพียงพอที่จะพิสูจน์ความจริงที่ว่านั้นไม่ใช่ฟังก์ชั่นที่ถูกต้องเพราะมันหมายถึงว่าเราสามารถเข้ารหัสสตริงที่มีความยาวทั้งหมดให้บิตK 2 K 1 a > 0 c a K 1 ( x ) a | x | + c a a < 1 K 1 2 n n a n + c aK1K2K1a>0caK1(x)a|x|+caa<1K12nnan+ca

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

เพื่อใช่ ... ด้วยบล็อกขนาดคุณอาจจะพิสูจน์K_1แต่ฉันเขียนไปแล้วมากเกินไปเกี่ยวกับสาเหตุที่จำนวนของรัฐไม่ใช่ฟังก์ชันความซับซ้อนของ Kolmogorov ที่ถูกต้อง ถ้าคุณต้องการให้ฉันทำอย่างละเอียดฉันจะ K 1 ( x ) a | x | + c a21/aK1(x)a|x|+ca

ตอนนี้ประมาณK2

ภาษาบรรยายที่ไร้เดียงสาสอดคล้องกับ (เช่นสำหรับแต่ละสถานะถัดไปและรายละเอียดเกี่ยวกับการเขียนและการเลิกจ้าง)บันทึก2 qK2(x)=q2(log2q+2)log2q

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

อย่างไรก็ตามถ้าคุณเก็บเดิมคุณสามารถใช้เทคนิคเดียวกันกับที่ฉันใช้ในส่วนก่อนหน้าเพื่อบันทึกสองสามบิต แต่ดูเหมือนว่าฉันจะติดอยู่ที่ (สำหรับ ใด ๆ ) .. อาจจะน้อยกว่าแม้จะได้รับดูเหมือนยาก (และฉันคาดหวังว่ามันควรจะเป็นไม่ใช่แม้แต่ )K 2 ( x ) a | x | เข้าสู่ระบบK2a > 0 บันทึก| x | O ( | x | ) | x | O ( | x | )K2(x)a|x|log|x|+ca>0log|x|O(|x|)|x|O(|x|)


คุณอ้างว่าไม่ใช่ฟังก์ชันความซับซ้อนของ kolmogorov หรือไม่ นี่เป็นเรื่องที่น่าประหลาดใจมากสำหรับฉันเนื่องจากเป็นคำจำกัดความที่ใช้ในหลักสูตรการคำนวณความสามารถในการคำนวณบางอย่างที่ฉันเคยทำมาแล้ว K 1K1K1
Ran G.

ความจริงที่ว่าค่อนข้างรบกวน ลองพิจารณาสิ่งนี้: มีคำที่เป็นไปได้ของ bits และคุณสามารถเข้ารหัสได้โดยใช้ bits? ที่จะบ่งบอกถึง (คุณเข้ารหัสจะต้องมีนึง)2nn1K1(x)12|x|+c2nn2n=O(2 112n+c2n=O(212n)
jmad

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