ปัญหาการหยุดชะงักระบุว่าไม่มีอัลกอริทึมที่จะตัดสินว่าโปรแกรมที่ให้หยุดทำงานหรือไม่ ดังนั้นควรมีโปรแกรมที่เราไม่สามารถบอกได้ว่าพวกเขาจะยุติหรือไม่ ตัวอย่างที่รู้จักกันง่ายที่สุด (เล็กที่สุด) ของโปรแกรมดังกล่าวคืออะไร
ปัญหาการหยุดชะงักระบุว่าไม่มีอัลกอริทึมที่จะตัดสินว่าโปรแกรมที่ให้หยุดทำงานหรือไม่ ดังนั้นควรมีโปรแกรมที่เราไม่สามารถบอกได้ว่าพวกเขาจะยุติหรือไม่ ตัวอย่างที่รู้จักกันง่ายที่สุด (เล็กที่สุด) ของโปรแกรมดังกล่าวคืออะไร
คำตอบ:
ตัวอย่างง่ายๆน่าจะเป็นโปรแกรมที่ทดสอบการคาดคะเนของ Collatz :
มันเป็นที่รู้จักกันต้องหยุดชะงักสำหรับขึ้นไปอย่างน้อยแต่โดยทั่วไปก็เป็นปัญหาเปิด
ปัญหาการหยุดชะงักระบุว่าไม่มีอัลกอริทึมที่จะตัดสินว่าโปรแกรมที่ให้หยุดทำงานหรือไม่ ดังนั้นควรมีโปรแกรมที่เราไม่สามารถบอกได้ว่าพวกเขาจะยุติหรือไม่
"เรา" ไม่ได้อัลกอริทึม =) ไม่มีคือทั่วไปขั้นตอนวิธีการที่สามารถตรวจสอบว่าได้รับหยุดโปรแกรมสำหรับทุกโปรแกรม
ตัวอย่างที่รู้จักกันง่ายที่สุด (เล็กที่สุด) ของโปรแกรมดังกล่าวคืออะไร
พิจารณาโปรแกรมต่อไปนี้:
n = 3
while true:
if is_perfect(n):
halt()
n = n + 2
ฟังก์ชัน is_perfect ตรวจสอบว่า n เป็นตัวเลขที่สมบูรณ์หรือไม่ ไม่ทราบว่ามีจำนวนที่สมบูรณ์แบบแปลก ๆ ดังนั้นเราไม่ทราบว่าโปรแกรมนี้หยุดทำงานหรือไม่
ที่คุณเขียน:
ปัญหาการหยุดชะงักระบุว่าไม่มีอัลกอริทึมที่จะตัดสินว่าโปรแกรมที่ให้หยุดทำงานหรือไม่ ดังนั้นควรมีโปรแกรมที่เราไม่สามารถบอกได้ว่าพวกเขาจะยุติหรือไม่
นี่คือไม่ใช่ sequitur ทั้งสองทิศทาง คุณยอมจำนนต่อการเข้าใจผิดทั่วไปที่มีค่าที่อยู่
หากโปรแกรมใด ๆ คงที่ปัญหาการหยุดชะงัก (" Pหยุดตลอดเวลาหรือไม่") จะสามารถตัดสินใจได้เสมอเนื่องจากคำตอบคือ "ใช่" หรือ "ไม่" แม้ว่าคุณจะไม่สามารถบอกได้ว่ามันคืออะไรคุณรู้หรือไม่ว่าหนึ่งในสองอัลกอริธึมเล็กน้อยที่ตอบได้เสมอว่า "ใช่" "ไม่" แก้ปัญหาP -halting
เฉพาะในกรณีที่คุณต้องการให้อัลกอริทึมควรแก้ปัญหาการหยุดชะงักสำหรับโปรแกรมทั้งหมดคุณสามารถแสดงว่าไม่มีอัลกอริทึมดังกล่าว
ตอนนี้การรู้ว่าปัญหาการหยุดชะงักไม่สามารถบอกได้ไม่ได้หมายความว่ามีโปรแกรมใด ๆ ที่ไม่มีใครไม่สามารถพิสูจน์การเลิกจ้างหรือการวนลูปของ แม้ว่าคุณจะไม่ทรงพลังมากกว่าเครื่องทัวริง (ซึ่งเป็นเพียงสมมติฐานไม่ใช่ความจริงที่พิสูจน์แล้ว) สิ่งที่เรารู้ก็คือไม่มีอัลกอริธึม / บุคคลเดียวที่สามารถพิสูจน์ได้สำหรับโปรแกรมทั้งหมด อาจมีบุคคลอื่นที่แตกต่างกันในการตัดสินใจเลือกแต่ละรายการ
การอ่านที่เกี่ยวข้องเพิ่มเติม:
ดังนั้นคุณจะเห็นว่าคำถามที่แท้จริงของคุณ (ดังซ้ำด้านล่าง) ไม่มีส่วนเกี่ยวข้องกับปัญหาการหยุดชะงักที่คำนวณ เลย
อะไรคือตัวอย่างที่รู้จักกันง่ายที่สุด (เล็กที่สุด) ของ [โปรแกรมที่เราไม่รู้ว่าจะหยุดหรือวนซ้ำ]?
จริงอยู่ที่สิ่งเหล่านี้ไม่ใช่ "ธรรมชาติ"
ปัญหาเปิดใด ๆ เกี่ยวกับการมีอยู่ของตัวเลขที่มีคุณสมบัติเฉพาะก่อให้เกิดโปรแกรมดังกล่าว (หนึ่งที่ค้นหาหมายเลขดังกล่าว) ตัวอย่างเช่นใช้การคาดคะเน Collatz; เนื่องจากเราไม่ทราบว่าเป็นจริงหรือไม่เราจึงไม่ทราบด้วยว่าโปรแกรมต่อไปนี้ถูกยกเลิก:
n:=1;
found:=false;
while not found do
s:={};
i:=n;
while i not in s do
add i to s;
if i even then i:=i/2 else i:=3i+1
if 1 not in s then found:=true;
n:=n+1
ระบุว่าปัญหาBusy Beaverไม่ได้รับการแก้ไขสำหรับเครื่องทัวริงแบบ 5 สถานะ -2 จะต้องมีเครื่องทัวริงที่มีเพียงห้าสถานะและมีเพียงสองสัญลักษณ์เท่านั้นที่ไม่ได้แสดงว่าหยุดหรือไม่เมื่อเริ่มใช้เทปเปล่า . นั่นเป็นโปรแกรมสั้นกระชับและปิด
คำถามนี้เป็นเรื่องยุ่งยากเพราะความสามารถในการตัดสินใจ (ความเป็นระเบียบ / การวางนัยทั่วไปของปัญหาการหยุดชะงักของ CS) เกี่ยวข้องกับภาษาต่างๆดังนั้นจึงจำเป็นต้องสร้างใหม่ในรูปแบบนั้น สิ่งนี้ดูเหมือนจะไม่ได้ชี้ให้เห็นมากนัก แต่ปัญหาที่เปิดกว้างในวิชาคณิตศาสตร์ / CS สามารถเปลี่ยนเป็นปัญหา (ภาษา) ที่ไม่สามารถถอดรหัสได้อย่างง่ายดาย นี่เป็นเพราะการติดต่อกันอย่างแน่นหนาระหว่างการพิสูจน์ทฤษฎีบทและการวิเคราะห์ความไม่แน่นอน (un) ตัวอย่างเช่น (เหมือนคำตอบอื่น ๆ ที่สมบูรณ์แบบตัวเลขคี่) ใช้เวลาในการคาดเดาคู่ซึ่งวันที่กรีก (มากกว่า 2 พันปีที่ผ่านมา) และเป็นเรื่องที่สำคัญการวิจัยล่าสุดที่สำคัญเช่นโดยจาง / เต่า แปลงเป็นปัญหาอัลกอริทึมดังนี้:
อินพุต: n . เอาท์พุท: Y / N มีอยู่อย่างน้อยnช่วงเวลาคู่
อัลกอริทึมจะค้นหาช่วงเวลาแฝดและหยุดหากพบว่าnเหล่านั้น ไม่มีใครรู้ว่าภาษานี้แปลได้ การแก้ไขปัญหาช่วงเวลาแฝด (ซึ่งถามว่ามีจำนวน จำกัด หรือไม่มีที่สิ้นสุด) ก็จะแก้ปัญหาความสามารถในการถอดรหัสของภาษานี้
อีกตัวอย่างใช้สมมติฐานของ Riemannและพิจารณาภาษานี้:
อินพุต: n . เอาต์พุต: Y / N มีอยู่อย่างน้อยn nessrivial zeroes ของฟังก์ชัน Riemann zeta
อัลกอริธึมค้นหาเลขศูนย์ (รหัสไม่ซับซ้อนโดยเฉพาะคล้ายกับการค้นหารูทและมีสูตรเทียบเท่าอื่น ๆ ที่ค่อนข้างง่ายซึ่งโดยทั่วไปจะคำนวณผลรวมของ "ความเท่าเทียมกัน" ของช่วงเวลาทั้งหมดน้อยกว่าxฯลฯ ) และหยุดถ้า พบว่าnของพวกเขาและอีกครั้งมันไม่ทราบว่าภาษานี้สามารถตัดสินใจได้และการแก้ปัญหาคือ "เกือบ" เทียบเท่ากับการแก้การคาดเดาของรีมันน์
ทีนี้ตัวอย่างที่น่าประทับใจยิ่งกว่านี้เป็นอย่างไร? ( ข้อแม้อาจขัดแย้งกันมากขึ้นเช่นกัน)
อินพุต: c: เอาต์พุต: Y / N มีอัลกอริทึมO (n c ) สำหรับ SAT
ในทำนองเดียวกันความละเอียดของ decidability ของภาษานี้เป็นเกือบเทียบเท่ากับP VS ปัญหา อย่างไรก็ตามมีกรณีที่ชัดเจนน้อยกว่าสำหรับรหัส "ง่าย" สำหรับปัญหาในกรณีนี้
เขียนโปรแกรมง่าย ๆ ที่ตรวจสอบว่าสำหรับทุก n ลำดับ Collatz ที่ขึ้นต้นด้วย n จะไปถึงหมายเลข 1 ในเวลาน้อยกว่าหนึ่งพันล้านครั้ง เมื่อมีคำตอบให้โปรแกรมหยุดถ้าคำตอบคือ "ใช่" และปล่อยให้มันวนซ้ำตลอดไปหากคำตอบคือ "ไม่"
เราไม่สามารถบอกได้ว่าโปรแกรมนี้ยุติลงหรือไม่ (เราคือใคร? สมมติว่า "เรา" คือทุกคนที่สามารถเพิ่มความคิดเห็นในคำตอบของฉัน) อย่างไรก็ตามบางคนที่มีคอมพิวเตอร์ที่ทรงพลังอย่างเหลือเชื่ออาจบอก นักคณิตศาสตร์อัจฉริยะบางคนอาจบอกได้ อาจมี n ค่อนข้างเล็กพูด n ≈ในกรณีที่ต้องการการทำซ้ำพันล้านครั้ง ที่จะเข้าถึงคนที่มีความมุ่งมั่นมากเวลามากและเงินจำนวนมาก แต่ตอนนี้เราไม่สามารถบอกได้