ผลต่างระหว่างรุ่นของ "ปัญหาการยุติการทำงาน"
เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
ล Bot: Migrating 25 interwiki links, now provided by Wikidata on d:q622849 (translate me) ป้ายระบุ: ลบลิงก์ข้ามภาษา |
ล use en:Quasi-quotation + reword on caution |
||
บรรทัด 1:
ใน[[ทฤษฎีการคำนวณได้]]นั้น '''ปัญหาการยุติการทำงาน''' ({{Lang-en|Halting problem}}) คือ[[ปัญหาการตัดสินใจ]]ที่ถามว่า
:''กำหนด[[ขั้นตอนวิธี]]และ[[ข้อมูลป้อนเข้า]]ให้ จงหาว่าขั้นตอนวิธีเมื่อทำงานกับข้อมูลป้อนเข้าดังกล่าวแล้ว จะยุติการทำงาน (ทำงานเสร็จสิ้น) หรือจะทำงานไป
[[แอลัน ทัวริง]] (Alan Turing) พิสูจน์ในปี ค.ศ. 1936 ว่า ไม่มีขั้นตอนวิธีที่แก้ปัญหาการยุติการทำงานสำหรับข้อมูลป้อนเข้าใด ๆ ได้ทั้งหมดบน[[เครื่องจักรทัวริ่ง]] จึงกล่าวว่าปัญหาการยุติการทำงานนี้[[ปัญหาการตัดสินใจ#การตัดสินได้และการรับได้|ไม่สามารถตัดสินได้]]
== ความสำคัญและผลสืบเนื่อง ==
ปัญหานี้มีความสำคัญเพราะว่าเป็นปัญหาแรกที่พิสูจน์ได้ว่าเป็นปัญหาที่ไม่สามารถตัดสินได้ หลังจากนั้นปัญหาในกลุ่มนี้อีกหลายปัญหาก็ถูกระบุออกมา วิธีพิสูจน์ทั่วไปทำโดยใช้เทคนิค[[การลดรูป (ความซับซ้อน)|การลดรูป]]'' ซึ่งเป็นการแสดงว่าถ้ามีขั้นตอนวิธีในการแก้ปัญหา
การที่เรา[[การไม่สามารถตัดสินได้|ไม่สามารถตัดสิน]]ปัญหาการยุติการทำงานได้ มีผลสืบเนื่องทำให้เราไม่มีทางมีวิธีทั่วไปในการตัดสินได้ว่าถ้อยแถลง (statement) เกี่ยวกับ[[จำนวนธรรมชาติ]]ในเป็นจริงหรือไม่ ทั้งนี้เนื่องจาก[[ประพจน์]]ที่ระบุว่าขั้นตอนวิธี
อย่างไรก็ตาม การแสดงว่าปัญหาบางปัญหาไม่สามารถตัดสินได้นั้น ยังสามารถแสดงได้ด้วยวิธี
แม้ว่าบทพิสูจน์ของทัวริงจะแสดงว่าไม่มีวิธีใดที่สามารถตัดสินได้ว่าขั้นตอนวิธีที่ให้มานั้น ทำงานสิ้นสุดได้ สำหรับบางขั้นตอนวิธีแล้ว เราก็มีวิธีในการแสดงว่าขั้นตอนวิธีนั้นทำงานสิ้นสุด หรือแม้กระทั่งแสดงขอบเขตของเวลาที่ขั้นตอนวิธีดังกล่าวจะต้องใช้ในการทำงาน [[นักวิทยาศาสตร์คอมพิวเตอร์]]มักสร้างบทพิสูจน์ดังกล่าว เพื่อแสดงว่าขั้นตอนวิธีทำงานถูกต้อง ซึ่งบทพิสูจน์ดังกล่าวมักเป็นส่วนหนึ่งของ[[บทพิสูจน์ความถูกต้อง]] อย่างไรก็ตาม บทพิสูจน์ดังกล่าวแต่ละอันนั้น จะใช้รูปแบบในการให้เหตุผลที่แตกต่างกัน นั่นคือ: ไม่มี ''วิธีอัตโนมัติเชิงกล''ที่สามารถตัดสินได้ว่าขั้นตอนวิธี
ข้อจำกัดอีกประการหนึ่งของบทพิสูจน์ว่าปัญหาการยุติการทำงานของโปรแกรมคือ โมเดลใน[[การคำนวณ]]ที่บทพิสูจน์ใช้นั้น อนุญาตให้โปรแกรมสามารถใช้หน่วยความจำได้ไม่จำกัด แม้ว่าในเวลาหนึ่ง ๆ โปรแกรมจะสามารถเก็บข้อมูลได้จำกัด แต่มันจะเก็บข้อมูลเพิ่มขึ้นได้เรื่อย ๆ และไม่มีวันที่หน่วยความจำจะเต็ม ถ้าหน่วยความจำและเนื้อที่เก็บข้อมูลเพิ่มเติมของโปรแกรมมีจำกัด เช่นเดียวกับเครื่องคอมพิวเตอร์ในปัจจุบัน ในทางทฤษฎีแล้ว ปัญหาการยุติการทำงานนั้น ก็จะสามารถแก้ได้ผ่านทางโปรแกรมที่ไม่ซับซ้อนนัก กล่าวคือ ในกรณีดังกล่าว สถานะที่เป็นไปได้ทั้งหมดที่โปรแกรมจะมีได้นั้นมีจำกัด ซึ่งจะทำให้โปรแกรมที่ไล่พิจารณาสถานะทั้งหมดสามารถตัดสินได้ว่า ขั้นตอนวิธีที่รับมานั้นจะยุติการทำงานหรือไม่ อย่างไรก็ดีโปรแกรมดังกล่าวจะใช้เวลาในการทำงานที่นานเกินไป จนไม่สามารถนำมาใช้จริงได้
บรรทัด 19:
บทพิสูจน์ใช้[[การพิสูจน์แบบการสร้างข้อขัดแย้ง]] (หรือที่เรียกใน[[ภาษาละติน]]ว่า reductio ad absurdum) สมมติว่ามีขั้นตอนวิธีที่อธิบายได้ด้วยโปรแกรม <code>halt (a, i) </code> ที่ตัดสินว่าขั้นตอนวิธีที่ระบุด้วยข้อความ ''a'' นั้นจะยุติการทำงานเมื่อได้รับข้อมูลป้อนเข้าเป็นข้อความ ''i'' เราจะแสดงว่าข้อสมมติดังกล่าวจะทำให้เกิดข้อขัดแย้ง, และนั่นหมายความว่าโปรแกรม <code>halt</code> นั้นไม่สามารถมีอยู่ได้
สมมติให้โปรแกรม <code>halt (a, i) </code> คืนค่า <code>'''จริง'''</code> ถ้าขั้นตอนวิธีที่ระบุด้วยข้อความ ''a'' ยุติการทำงานเมื่อรับ ''i'' เป็นข้อมูลป้อนเข้า และคืนค่า <code>'''เท็จ'''</code> ในกรณี
'''function''' trouble (''string'' s)
บรรทัด 29:
โปรแกรมนี้รับข้อความ ''s'' และเรียกโปรแกรม <code>halt</code> โดยใช้ข้อมูลป้อนเข้าทั้งที่เป็นข้อความที่ระบุขั้นตอนวิธี ''a'' และข้อความที่จะใช้เป็นข้อมูลป้อนเข้า ''i'' ของขั้นตอนวิธีดังกล่าวเป็น ''s'' กล่าวอย่างไม่เป็นทางการก็คือ <code>trouble</code> ถาม <code>halt</code> ว่าขั้นตอนวิธี ''s'' เมื่อรับข้อความที่ระบุตัวขั้นตอนวิธีเองแล้ว จะยุติการทำงานหรือไม่ จากนั้น ถ้า <code>halt (s,s) </code> คืนค่า '''เท็จ''' โปรแกรม <code>trouble</code> จะจบการทำงาน แต่ถ้า <code>halt (s,s) </code> คืนค่า '''จริง''' โปรแกรม <code>trouble</code> จะวนรอบไม่รู้จบ
เนื่องจากโปรแกรม
: <code>trouble (
ลองดูความเป็นไปได้ทั้งสองกรณี:
# สมมติว่า <code>trouble (
# สมมติว่า <code>trouble (
เนื่องจากทั้งสองกรณีทำให้เกิดข้อขัดแย้งที่ล้วนเป็นไปไม่ได้ ดังนั้นสามารถสรุปได้ว่าข้อสมมติเริ่มต้นที่ใช้นั้นไม่ถูกต้อง กล่าวคือไม่มีโปรแกรม <code>halt</code> หรือขั้นตอนวิธี
== ข้อควรระวัง ==
ความยากในปัญหาการยุติการทำงานคือการที่ต้องตอบคำถามสำหรับ
ปัญหาการยุติการทำงานเป็นปัญหาที่สามารถตัดสินใจได้ (นั่นคือสามารถแก้ได้) บนเครื่องจักรที่มีหน่วยความจำจำกัด (linear bounded automata; LBAs) เนื่องจากจำนวนสถานะในเครื่องจักรเหล่านี้มีจำกัด เมื่อทำงานไป
ถึงแม้คอมพิวเตอร์ในยุคปัจจุบันจะเป็นเครื่องจักรที่มีหน่วยความจำจำกัดประเภทหนึ่ง จำนวนสถานะที่แตกต่างกันทั้งหมดของคอมพิวเตอร์นั้นมีมากกว่า 2<sup>1,000,000</sup> สถานะ ซึ่งมากมายมหาศาล เวลาในการแก้ไขปัญหานี้จึงมากมายมหาศาลด้วยเช่นกัน (สามารถเปรียบเทียบว่าเวลาในการแก้ไขปัญหานี้ ทำให้ช่วงเวลาอายุของเอกภพไร้ความหมายได้เลย)
|