ผมอยากจะเขียนคำนำที่นี้คำถามจะคล้ายกัน แต่คำถามของฉันไม่ได้เกี่ยวข้องกับการสุ่มเพียง determinism จู้จี้จุกจิกดังนั้นคำตอบของ "ใช้เมล็ดพันธุ์ที่รู้จักกัน" ไม่ได้จริงๆใช้ ในทำนองเดียวกันนี้เป็นคำถามที่คล้ายกันอีกครั้ง แต่ผมไม่ได้คาดหวังว่าอัลกอริทึมที่เคยล้มเหลว - ผมก็ไม่ทราบว่าวิธีที่มันจะถูกต้อง
คำถามนี้เกิดขึ้นขณะทดสอบอัลกอริธึมกราฟ แต่ไม่มีข้อ จำกัด สำหรับพวกเขา อัลกอริทึมบางอย่างเช่น A * สามารถมีคำตอบที่ถูกต้องได้หลายคำตอบ คุณอาจได้รับคำตอบอย่างใดอย่างหนึ่งซึ่งขึ้นอยู่กับการใช้งานจริงของคุณ สิ่งนี้สามารถทำให้พวกเขาทดสอบได้ยากเพราะคุณไม่รู้ว่ามันกำลังคายแบบไหนก่อนและใช้เวลานานมากในการคำนวณคำตอบด้วยมือ
ในกรณีเฉพาะของฉันฉันได้รับมันโดยการปรับเปลี่ยน Floyd-Warshall เพื่อคายเส้นทางที่สั้นที่สุดเท่าที่จะทำได้และใช้เวลาทดสอบมือ มันมีประโยชน์ในการเป็นคุณสมบัติที่ดีในสิทธิของตนเอง จากนั้นฉันสามารถทดสอบฟังก์ชั่นอื่น ๆ ในแง่ของเส้นทางที่ถูกต้องที่ทราบจาก FW (หากเส้นทางที่ถูกส่งคืนเป็นเส้นทางใดเส้นทางหนึ่งที่ส่งคืนโดย FW สำหรับคู่เริ่มต้น / สิ้นสุดนั้นถูกต้อง) แน่นอนว่าใช้งานได้กับกราฟที่มีความหนาแน่นสูงเท่านั้นเนื่องจาก FW ทำงานอย่างไร แต่ก็ยังดีอยู่
อย่างไรก็ตามอาจไม่สามารถใช้ได้กับอัลกอริทึมทั้งหมดที่มีคุณสมบัตินี้ จนถึงตอนนี้คำตอบที่ดีที่สุดที่ฉันพบคือการทดสอบลักษณะของคำตอบที่ถูกต้องมากกว่าคำตอบที่ถูกต้อง หากต้องการย้อนกลับไปยังอัลกอริธึมพา ธ ที่สั้นที่สุดคุณสามารถตรวจสอบค่าใช้จ่ายของเส้นทางที่ส่งคืนเทียบกับต้นทุนที่ถูกต้องที่ทราบและตรวจสอบให้แน่ใจว่าเส้นทางนั้นถูกต้อง
งานนี้ แต่ก็สามารถใช้ความเสี่ยงของการไม่ตรวจสอบทุกอย่างอย่างถูกต้องตามเกณฑ์ที่มากขึ้นสำหรับความถูกต้องมีโดยเฉพาะอย่างยิ่งถ้าการตรวจสอบเป็นตัวเองที่ซับซ้อน (เช่นในขณะที่ขั้นตอนวิธีการที่ถูกต้องมีอยู่การตรวจสอบขั้นต่ำต้นไม้ทอดเป็นปัญหาหนักที่รู้จักกัน; อาจจะหนักกว่า การสร้าง MST เอง) ซึ่งในกรณีนี้คุณต้องทดสอบรหัสการทดสอบของคุณอย่างกว้างขวาง แย่ลง: สมมุติว่าคุณต้องสร้าง MST เพื่อทดสอบอัลกอริทึมการตรวจสอบ MST เพื่อให้คุณมีสถานการณ์ที่ยอดเยี่ยมที่การทดสอบ MST ของคุณต้องอาศัยอัลกอริทึมการยืนยัน MST ของคุณและการทดสอบอัลกอริทึมการยืนยัน MST ของคุณนั้น
ในที่สุดก็มี "วิธีที่ถูก" ซึ่งเกี่ยวข้องกับการสังเกตผลลัพธ์ตรวจสอบด้วยมือจากนั้นทำการเข้ารหัสอย่างหนักเพื่อทดสอบผลลัพธ์ที่คุณเพิ่งตรวจสอบ แต่นั่นไม่ใช่ความคิดที่ดีเพราะคุณอาจต้องแก้ไขการทดสอบทุกครั้งที่คุณ เปลี่ยนการใช้งานเล็กน้อย (ซึ่งเป็นสิ่งที่การทดสอบอัตโนมัติควรหลีกเลี่ยง)
เห็นได้ชัดว่าคำตอบนั้นขึ้นอยู่กับอัลกอริธึมที่แน่นอนที่คุณกำลังทดสอบในระดับหนึ่ง แต่ฉันสงสัยว่ามี "แนวปฏิบัติที่ดีที่สุด" สำหรับการตรวจสอบอัลกอริทึมที่มีเอาต์พุตที่ถูกต้องแน่นอน "กำหนด" หลายอย่าง รู้ล่วงหน้าและอาจเป็นไปได้ยากที่จะตรวจสอบหลังจากความจริง