อัลกอริทึมที่ทรงพลังที่ยากเกินกว่าจะนำไปใช้ได้จริงจะแน่ใจได้อย่างไรว่าถูกต้อง?


9

ผมหมายถึงคำถามที่นี่: ขั้นตอนวิธีการที่มีประสิทธิภาพที่ซับซ้อนเกินไปที่จะใช้

หากอัลกอริทึมมีประสิทธิภาพ แต่ซับซ้อนเกินกว่าจะนำไปใช้ได้คุณจะมั่นใจได้อย่างไรว่าอัลกอริทึมนั้นถูกต้อง? หากไม่มีการใช้งานคุณจะไม่สามารถทดสอบอัลกอริทึมในสถานการณ์จริงและอัลกอริธึมที่ซับซ้อนเช่นนั้นอาจมีข้อบกพร่องซึ่งอาจทำให้ขั้นตอนวิธีนั้นไม่ถูกต้อง

นี่คือสิ่งที่ฉันไม่เข้าใจ หากคุณมีเทคนิคในการพิสูจน์ความถูกต้องของอัลกอริทึมแล้วคุณจะมีอัลกอริทึมที่จะใช้มันแล้วใช่ไหม? หรืออย่างอื่นเราจะแน่ใจได้อย่างไรว่าเทคนิคการพิสูจน์นั้นถูกต้อง?

ฉันขอโทษถ้าฉันฟังประถม!

อัปเดตจาก Kaveh (ทำซ้ำที่นี่เพราะอาร์กิวเมนต์ดีกว่า!):

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


6
นี่คือเหตุผลที่เรามีเทคนิคเพื่อพิสูจน์ความถูกต้องของอัลกอริทึมแม้ว่า (ถูกต้อง) การนำไปใช้งานบนเครื่องจริงยาก
กราฟิลส์

9
ฉันเห็นด้วยกับราฟาเอล ปรากฏว่าคำถามนั้นตั้งอยู่บนสมมติฐานที่ว่าความถูกต้องของอัลกอริทึมนั้นมักจะพิสูจน์ด้วยการนำไปใช้ แต่ก็ไม่เป็นเช่นนั้น การพิสูจน์ความถูกต้องของอัลกอริทึมและการใช้อัลกอริธึมนั้นเป็นสิ่งที่แตกต่างกันอย่างสิ้นเชิง
Tsuyoshi Ito

8
อัลกอริธึมเรียบง่ายพร้อมการพิสูจน์ความถูกต้องที่ซับซ้อน - คุณจะรู้ได้อย่างไรว่ามันถูกต้อง? เพียงเพราะอัลกอริทึมทำงานกับตัวอย่างทดสอบไม่ได้หมายความว่ามันทำงานได้กับอินพุตทั้งหมด
Peter Shor

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

5
"ระวังข้อบกพร่องในโค้ดด้านบน; ฉันได้พิสูจน์แล้วว่าถูกต้องเท่านั้น, ไม่ได้ทดลองใช้" ~ Donald Knuth
Lev Reyzin

คำตอบ:


11

เมื่อหลายปีก่อนมีการถกเถียงกันอย่างรุนแรงในหัวข้อที่คล้ายกับเรื่องนี้ ทุกอย่างเริ่มต้นเมื่อการพิสูจน์ที่ซับซ้อนหลายอย่างกลายเป็นไม่ถูกต้องและนักวิจัยบางคนเริ่มสงสัยในธรรมชาติของการพิสูจน์ (ดีฉันควรจะพูดว่า "การเข้ารหัสที่พิสูจน์ได้" แต่เพื่อประโยชน์ส่วนรวมฉันไม่ได้) . ทั้งสองด้านของการโต้เถียงกล่าวหาคนอื่นเข้าใจผิดแนวความคิด นี่คือการเชื่อมโยงสำหรับข้อมูลเพิ่มเติม

การพิสูจน์เป็นเครื่องมือ (ทางคณิตศาสตร์) ของเราเพื่อพิสูจน์ทฤษฎี / อัลกอริทึมถูกต้อง แต่เมื่อมันซับซ้อนเกินไปเราอาจลื่นและพิสูจน์สิ่งผิด ๆ ให้ถูกต้อง การพิสูจน์ 100-or-so-page ที่ผ่านมาใน P ≠ NPเป็นตัวอย่างที่ยอดเยี่ยม อย่างไรก็ตามสิ่งนี้ไม่ได้แยกประเภทของการพิสูจน์: ไม่มีอะไรผิดปกติกับพวกเขา

ประเด็นสุดท้ายข้อหนึ่ง: ฉันคิดว่าการศึกษาปรัชญาวิทยาศาสตร์จะทำให้เรามีความเข้าใจในเรื่องนี้มากขึ้น (ใต้ลิงก์ที่ให้ดูหัวข้อย่อย " เราจะรู้ได้อย่างไรว่าการพิสูจน์ทางคณิตศาสตร์นั้นถูกต้องหรือไม่ ")

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