13
วิธีการแก้ปัญหาแบบฮิวริสติก "ลองใช้กรณีทดสอบ": อัลกอริทึมที่ปรากฏถูกต้อง แต่จริง ๆ แล้วไม่ถูกต้อง
ในการพยายามทดสอบว่าอัลกอริทึมสำหรับปัญหาบางอย่างถูกต้องหรือไม่จุดเริ่มต้นตามปกติคือลองใช้อัลกอริทึมด้วยมือในกรณีทดสอบง่ายๆ - ลองกับตัวอย่างกรณีปัญหารวมถึงกรณีมุมง่าย ๆ สองสามตัวอย่าง " นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยม: มันเป็นวิธีที่ดีในการกำจัดความพยายามที่ไม่ถูกต้องอย่างรวดเร็วของอัลกอริทึมและเพื่อทำความเข้าใจเกี่ยวกับสาเหตุที่อัลกอริทึมไม่ทำงาน อย่างไรก็ตามเมื่อการเรียนรู้อัลกอริทึมนักเรียนบางคนถูกล่อลวงให้หยุดที่นั่น: หากอัลกอริทึมของพวกเขาทำงานอย่างถูกต้องกับตัวอย่างจำนวนหนึ่งรวมถึงกรณีมุมทั้งหมดที่พวกเขาสามารถคิดได้ลองพวกเขาสรุปว่าอัลกอริทึมต้องถูกต้อง มีนักเรียนคนหนึ่งที่ถามอยู่เสมอ: "ทำไมฉันต้องพิสูจน์อัลกอริทึมของฉันให้ถูกต้องถ้าฉันลองได้ในบางกรณีทดสอบ?" ดังนั้นคุณจะหลอก "ฮิวริสติกแบบทดสอบกรณี" ได้อย่างไร ฉันกำลังมองหาตัวอย่างที่ดีเพื่อแสดงว่าฮิวริสติกนี้ไม่เพียงพอ กล่าวอีกนัยหนึ่งฉันกำลังมองหาหนึ่งหรือมากกว่าหนึ่งตัวอย่างของอัลกอริทึมที่เผินๆดูเหมือนว่ามันอาจจะถูกต้องและผลลัพธ์ที่ได้คำตอบที่ถูกต้องในอินพุตขนาดเล็กทั้งหมดที่ทุกคนมีแนวโน้มที่จะเกิดขึ้น ไม่ทำงาน อัลกอริทึมอาจทำงานได้อย่างถูกต้องกับอินพุตขนาดเล็กทั้งหมดและล้มเหลวสำหรับอินพุตขนาดใหญ่เท่านั้นหรือล้มเหลวเฉพาะสำหรับอินพุตที่มีรูปแบบที่ผิดปกติ โดยเฉพาะฉันกำลังมองหา: อัลกอริทึม ข้อบกพร่องจะต้องอยู่ในระดับอัลกอริทึม ฉันไม่ได้กำลังมองหาข้อผิดพลาดในการใช้งาน (ตัวอย่างเช่นอย่างน้อยที่สุดตัวอย่างควรเป็นผู้ไม่เชื่อเรื่องภาษาและข้อบกพร่องควรเกี่ยวข้องกับความกังวลด้านอัลกอริทึมมากกว่าปัญหาด้านวิศวกรรมซอฟต์แวร์หรือปัญหาการใช้งาน) อัลกอริทึมที่บางคนอาจมีความน่าเชื่อถือ รหัสเทียมควรมีลักษณะที่ถูกต้องอย่างน้อยน่าจะเป็นไปได้ (เช่นรหัสที่ obfuscated หรือน่าสงสัยว่าไม่ได้เป็นตัวอย่างที่ดี) คะแนนโบนัสหากเป็นอัลกอริทึมที่นักเรียนบางคนคิดขึ้นมาเมื่อพยายามแก้ไขปัญหาการบ้านหรือการสอบ อัลกอริทึมที่จะผ่านกลยุทธ์การทดสอบด้วยตนเองอย่างสมเหตุสมผลด้วยความน่าจะเป็นสูง คนที่ลองใช้กรณีทดสอบเล็ก ๆ น้อย ๆ ด้วยมือไม่น่าจะค้นพบข้อบกพร่อง ตัวอย่างเช่น "จำลอง QuickCheck ด้วยมือในกรณีทดสอบขนาดเล็กโหล" ไม่น่าจะเปิดเผยว่าอัลกอริทึมไม่ถูกต้อง เป็นอัลกอริทึมที่กำหนดขึ้นโดยเฉพาะ ฉันเคยเห็นนักเรียนหลายคนคิดว่า "ลองใช้กรณีทดสอบด้วยมือ" เป็นวิธีที่สมเหตุสมผลในการตรวจสอบว่าอัลกอริธึมที่กำหนดขึ้นถูกต้องหรือไม่ แต่ฉันสงสัยว่านักเรียนส่วนใหญ่จะไม่คิดว่าการลองใช้กรณีทดสอบสองสามอันเป็นวิธีที่ดี อัลกอริทึม สำหรับอัลกอริธึมความน่าจะเป็นมักจะไม่มีวิธีที่จะบอกได้ว่าเอาต์พุตใด ๆ ที่ถูกต้องหรือไม่ …