ผมได้ยินการตีความที่แตกต่างกันของเสียงและสมบูรณ์ ฉันเข้าใจว่าความสมบูรณ์หมายถึงการหาทางออกถ้ามี มันหมายความว่าอะไรที่จะบอกว่าอัลกอริทึมเป็นเสียง
การพูดว่าอัลกอริทึมคือ Sound and Complete หมายความว่าอย่างไร
ผมได้ยินการตีความที่แตกต่างกันของเสียงและสมบูรณ์ ฉันเข้าใจว่าความสมบูรณ์หมายถึงการหาทางออกถ้ามี มันหมายความว่าอะไรที่จะบอกว่าอัลกอริทึมเป็นเสียง
การพูดว่าอัลกอริทึมคือ Sound and Complete หมายความว่าอย่างไร
คำตอบ:
เป็นคำศัพท์เฉพาะที่เกี่ยวข้องกับตรรกะ
นี่คือจุดเริ่มต้นบางส่วน:
http://en.wikipedia.org/wiki/Soundness
http://en.wikipedia.org/wiki/Completeness_(logic)
โดยทั่วไปความสมบูรณ์ (ของอัลกอริทึม) หมายความว่าอัลกอริทึมไม่ให้ผลลัพธ์ที่ไม่เป็นจริง ตัวอย่างเช่นถ้าฉันมีอัลกอริทึมการเรียงลำดับที่บางครั้งไม่ส่งคืนรายการเรียงลำดับอัลกอริทึมจะไม่ดัง
ในทางกลับกันความสมบูรณ์หมายความว่าอัลกอริธึมจัดการกับอินพุตที่เป็นไปได้ทั้งหมดและไม่พลาด ดังนั้นหากอัลกอริทึมการเรียงลำดับของฉันไม่เคยส่งคืนรายการที่ไม่เรียงลำดับ แต่เพียงปฏิเสธที่จะทำงานกับรายการที่มีหมายเลข 7 อยู่ก็จะไม่สมบูรณ์
มันสมบูรณ์และเสียงถ้ามันทำงานกับอินพุตทั้งหมด (ถูกต้องทางความหมายในโลกของโปรแกรม) และได้รับคำตอบที่ถูกต้องเสมอ
ฉันพบว่าคำตอบของ Erik Dietrich ช่างน่าเบื่อ ต่อไปนี้จะดีกว่า:
อัลกอริทึมเป็นเสียงถ้าทุกครั้งที่มันคืนคำตอบคำตอบนั้นเป็นจริง อัลกอริธึมเสร็จสมบูรณ์หากรับประกันว่าจะส่งคืนคำตอบที่ถูกต้องสำหรับอินพุตใด ๆ (หรือหากไม่มีคำตอบก็จะรับประกันว่าจะส่งคืนความล้มเหลว)
สองจุดสำคัญ:
ลองพิจารณาตัวอย่างอัลกอริทึมการเรียงลำดับ A ที่รับเป็นรายการตัวเลข เราบอกว่า A คือเสียงถ้าทุกครั้งที่ส่งกลับผลลัพธ์ผลลัพธ์คือรายการที่เรียงลำดับ ในทำนองเดียวกันเราบอกว่า A เสร็จสมบูรณ์หากรับประกันว่าจะส่งคืนรายการที่เรียงลำดับเมื่อใดก็ตามที่เราให้รายการของตัวเลข
คำเหล่านี้มาจากทฤษฎีการคำนวณดังนั้นจึงมีความหมายในบริบทของทฤษฎีการคำนวณมากกว่าในบริบทของวิศวกรรมซอฟต์แวร์
ในรูปแบบมาตรฐานส่วนใหญ่ของการคำนวณปัญหาคอมพิวเตอร์จะแสดงเป็นภาษา ภาษาคือชุดของสตริง อัลกอริทึมนั้นเป็นเพียงระบบหรือกระบวนการที่ตัดสินว่าสตริงที่กำหนดเป็นสมาชิกของบางภาษา (โดยการส่งกลับจริงหรือเท็จ) ในแง่วิศวกรรมซอฟต์แวร์ทฤษฎีการคำนวณเกี่ยวข้องกับฟังก์ชันที่มีลักษณะเฉพาะเช่นนี้โดยสมมติว่าสตริงนั้นไม่เปลี่ยนรูป:
boolean some_function(string argument){...}
เราเรียกฟังก์ชันนี้ว่าสมบูรณ์ถ้ามันคืนค่าจริงสำหรับทุก ๆ อาร์กิวเมนต์ที่เป็นสมาชิกของภาษา เราเรียกว่าเสียงถ้ามันคืนค่าเท็จสำหรับทุกอาร์กิวเมนต์ที่ไม่ใช่สมาชิกของภาษา
กล่าวอีกนัยหนึ่งก็คือมันเสร็จสมบูรณ์หากมันจะคืนค่าเป็นจริงเสมอเมื่อเราต้องการให้มันกลับมาจริงและเสียงถ้ามันกลับเท็จเมื่อเราต้องการที่จะกลับเท็จ
สิ่งนี้แปลไปยังฟังก์ชั่นประเภทอื่น ๆ ได้อย่างไร? เมื่อปรากฎว่ามันเป็นไปได้ที่จะบรรจุข้อมูลจำนวนหนึ่งเข้าไปในสตริงและสร้างมันใหม่ภายในฟังก์ชั่น ดังนั้นข้อ จำกัด เกี่ยวกับประเภทอาร์กิวเมนต์และ arity จึงไม่มีอะไรมากไปกว่าการลดความซับซ้อนทางทฤษฎี อย่างไรก็ตามข้อ จำกัด ของประเภทส่งคืนมีความสำคัญมากกว่า ปัญหาที่เรียกร้องให้ผลบูลจะเรียกว่าการตัดสินใจแก้ปัญหา ทฤษฎีการคำนวณจำนวนมากเกี่ยวข้องกับปัญหาการตัดสินใจ ชุด P และ NP ถูก จำกัด เฉพาะปัญหาการตัดสินใจ (และอย่างน้อยก็ไม่สามารถกำหนดได้อย่างสมเหตุสมผลโดยไม่มีข้อ จำกัด นี้) ปัญหาการหยุดชะงักเป็นอีกตัวอย่างหนึ่งของปัญหาการตัดสินใจอย่างหนัก
เป็นความเห็นของฉันที่คำเหล่านี้ไม่พูดเกินขอบเขตของปัญหาการตัดสินใจดังนั้นความแตกต่างระหว่างพวกเขาไม่ได้มีความหมายจริงๆเมื่อพูดถึงฟังก์ชั่นทั่วไป
มีคำตอบที่ดีกว่านั้นมาก โดยทั่วไปคุณจะต้องรวบรวมข้อมูลและเกณฑ์ในการค้นหา อัลกอริทึมเสียงจับคุณปลาที่ตรงกับเกณฑ์เท่านั้น แต่อาจพลาดบางรายการข้อมูล อัลกอริธึมสมบูรณ์สร้างชุดผลลัพธ์ที่ร้องขอซึ่งหมายความว่าคุณได้รับขยะบางส่วนจากผลลัพธ์ที่ร้องขอ อัลกอริธึมเสียงค่อนข้างอนุรักษ์นิยม
นักสถิติอาจจะบอกว่าอัลกอริธึมเสียงเป็นข้อผิดพลาดแบบที่เอนเอียงไปได้ (ไม่ยอมรับผู้สมัครที่ถูกต้อง) ในขณะที่อัลกอริธึมที่สมบูรณ์นั้นมีความเอนเอียงไปสู่ข้อผิดพลาดประเภท II (เพื่อยอมรับผู้สมัครผิด ๆ )