แก้ไข: อาร์กิวเมนต์ที่ฉันตอบด้วยไม่ผิด แต่มันเป็นความเข้าใจผิดเล็กน้อยในที่มันแสดงให้เห็นว่าขอบเขตบนต้องแน่นสำหรับบาง (ซึ่งจริง ๆ เล็กน้อยเพราะต้องแน่นเมื่อและขอบเขตคือ 1)nn=2
นี่คือข้อโต้แย้งที่แม่นยำยิ่งขึ้น มันแสดงให้เห็นว่าถ้าผูกไว้บนของ
หลวมสำหรับใด ๆแล้วสำหรับทุกจำนวนของสาย oracle ต้องเป็น(1)log2nn nO(1)
(แน่นอนว่าไม่ใช่ ดังนั้นขอบเขตสูงสุดไม่เคยหลวม! แต่ฉันไม่ได้พิสูจน์ที่นี่จริง ๆ และให้คำตอบอื่น ๆ สำหรับปัญหาดูเหมือนจะไม่คุ้มค่าเลย)O(1)
พิจารณาปัญหาของการคำนวณเอาต์พุตสูงสุด :
รับ -tupleของเครื่องจักรทัวริงคำนวณเอาท์พุทสูงสุด (ของเครื่องจักรทัวริงที่หยุดถ้าทำงานบน ) ถ้าไม่มีพวกเขาหยุดส่งคืน 0n(M1,…,Mn)ϵ
ในฐานะที่เป็นฟังก์ชั่นของที่แย่ที่สุดของการเรียกใช้ oracle ที่ต้องใช้ในการคำนวณฟังก์ชั่นนี้จะเหมือนกับหมายเลขที่ต้องใช้ในการตัดสินใจว่าเครื่องใดที่หยุดรับ (ถ้าฉันรู้ว่าเครื่องหยุดฉันสามารถคำนวณผลลัพธ์สูงสุดได้อย่างง่ายดายในทางกลับกันถ้าฉันต้องการทราบว่าเครื่องหยุดทำงานใดหลังจากการก่อสร้างในคำแถลงปัญหาฉันสามารถสร้างเครื่อง
ที่ทำงานทั้งหมดของเครื่องรับในแบบคู่ขนานแล้วหยุดและเอาท์พุถ้าของพวกเขาเคยหยุด. เอาท์พุทสูงสุดจะบอกฉันหมายเลขที่หยุด. จากที่ผมสามารถคำนวณ หยุดตรงไหน)nn{M′i} (i=1,2,…,n)M′inii
ทีนี้ปล่อยให้เป็นจำนวนเต็มที่น้อยที่สุด (ถ้ามี) ที่เก็บต่อไปนี้:n0n
การใช้ oracle call เราสามารถคำนวณเอาท์พุทสูงสุดของเครื่องที่กำหนดได้ (นั่นคือขอบเขตบนไม่แน่นสำหรับ )C(n)=max{k∈Z:2k<n}nn
เห็นได้ชัดว่าเพราะ-1 ในความเป็นจริงแล้วด้วยเช่นกันเพราะแต่มันไม่สามารถตัดสินใจได้ว่าจะคำนวณเอาต์พุตสูงสุดของเครื่องที่กำหนด (โดยไม่มีการเรียกใช้ oracle) พิจารณาใหญ่กว่า:n0>1C(1)=−1n0>2C(2)=02n
การอ้างสิทธิ์: ถ้ามีค่า จำกัด ดังนั้นสำหรับใด ๆเราสามารถคำนวณเอาต์พุตสูงสุดของเครื่องที่ได้รับในการเรียก oraclen0nnC(n0)(โปรดทราบว่าหากมีค่า จำกัด ดังนั้น )n0C(n0)=O(1)
พิสูจน์ . เราพิสูจน์ได้โดยการเหนี่ยวนำบนnกรณีฐานมีที่ถือโดยความหมายของและCnn≤n0n0C
ให้เป็น TM ที่ได้รับเครื่องทัวริงใด ๆคำนวณเอาต์พุตสูงสุดโดยใช้การเรียกไปยัง oracle เท่านั้นQ0n0C(n0)
แก้ไขใด ๆn>รับเครื่องจักรใดคำนวณผลลัพธ์สูงสุดดังนี้n>n0nM1,…,Mn
มุ่งเน้นไปที่แรก เครื่อง ลองใช้งานกับเครื่องเหล่านี้โปรดทราบว่าทำให้การโทรไปยัง oracle และมีเพียงการตอบสนองที่เป็นไปได้โดย oracle ไปยังการเรียกเหล่านี้ โปรดทราบว่าโดยความหมาย<n_0 ให้แสดงการตอบสนองที่เป็นไปได้ของสำหรับแต่ละสร้างเครื่อง
ที่จำลองบนเครื่องเหล่านี้ดังนี้:M1,…,Mn0Q0n0Q0C(n0)n′=2C(n0)n′=2C(n0)<n0oiii=1,…,n′M′iQ0
TM (ที่อินพุต ):M′iϵ
- จำลองบนเครื่องแต่แทนที่จะเรียกพยากรณ์สมมติตอบสนอง oracle ตามo_iQ0n0(M1,…,Mn0)oi
- การจำลองนี้อาจไม่หยุดชะงัก (เช่นถ้าไม่ใช่สิ่งที่ Oracle จะกลับมาจริง)oi
- หากการจำลองหยุดลงให้เป็นเอาต์พุตสูงสุดที่บอกว่าจะได้รับhiQ0
- ประกบทุกเครื่อง{n_0}) หากหนึ่งในพวกเขาเคยเอาท์พุทหยุดและเอาท์พุทh_in0(M1,…,Mn0)hihi
ตอนนี้ในลำดับที่กำหนดของเครื่องจักรแทนคนแรกเครื่องเหล่านี้เครื่อง'} ส่งกลับค่าคำนวณโดย recursing ในลำดับนี้เครื่อง (โปรดทราบว่า oracle ไม่ได้ถูกเรียกก่อนเรียกใช้ซ้ำดังนั้น oracle จะถูกเรียกใช้เมื่อถึงกรณีพื้นฐานเท่านั้น)nn0M1,…,Mn0n′<n0M′1,…,M′n′n−(n0−n′)<n
นี่คือเหตุผลที่การคำนวณนี้ถูกต้อง สำหรับเช่นนั้นคือการตอบสนองที่ถูกต้องโดย oracleสำหรับเคียวรีจะหยุดและให้เอาต์พุตสูงสุดที่ถูกต้องของเครื่องดั้งเดิม ดังนั้นการส่งออกสูงสุดของเครื่อง
เป็นอย่างน้อยผลผลิตสูงสุดของเครื่อง{n_0}) บนมืออื่น ๆ โดยขั้นตอนที่ 4 ไม่มี
สามารถให้ผลลัพธ์ที่มีขนาดใหญ่กว่าการส่งออกสูงสุดของ{n_0}) ดังนั้นการส่งออกสูงสุดของเครื่องioiQ0M′in0n′(M′1,…,M′n′)n0(M1,…,Mn0)M′i(M1,…,Mn0)n′(M′1,…,M′n′)
เท่ากับเอาท์พุทสูงสุดของเครื่องที่พวกเขาแทนที่ QEDn0