ให้เป็นเวกเตอร์ของตัวแปรบูลีน Let C , Dเป็นสองวงจรบูลในx พูดว่าCคล้ายกับDถ้า:
นั้นเล็กมากเมื่อ xถูกสุ่มอย่างสม่ำเสมอจาก { 0 , 1 } n (กล่าวอีกนัยหนึ่งพวกมันมีฟังก์ชั่นเกือบเหมือนกัน); และ,
แตกต่างกันในระยะแก้ไขกราฟโดยจำนวนเล็กน้อย (ระยะแก้ไขของพวกเขามีขนาดเล็กกว่าขนาดของวงจร, พูด, O ( 1 )หรือค่าคงตัวเล็ก ๆ ), หมายความว่าเกือบทั้งหมดของประตูและสายของ Cตรงกัน gate และ wire ที่สอดคล้องกันใน Dโดยเพิ่ม / ลบ / เปลี่ยนแปลงเพียงไม่กี่ประตู
ปัญหาของฉัน: ฉันได้รับวงจรและฉันต้องการที่จะทราบว่ามีอยู่วงจรDที่คล้ายกับCแต่ไม่เหมือนกันกับC (เช่นที่มีอยู่xดังกล่าวว่าC ( x ) ≠ D ( x ) ) .
ใครช่วยแนะนำอัลกอริทึมในการแก้ปัญหานี้ได้บ้าง
ถ้ามันจะช่วยให้เราสามารถ จำกัด การให้ความสนใจกับวงจรที่มีขนาดเล็กกว่าวงจรC (กล่าวคือเราต้องการที่จะทราบว่ามีอยู่วงจรDดังกล่าวว่าDมีขนาดเล็กกว่าC , Dจะคล้ายกับCและมีอยู่xเช่นนั้นC ( x ) ≠ D ( x ) )
ถ้ามันจะช่วยให้คุณยังสามารถสันนิษฐานได้ว่าเราจะได้รับกรณีทดสอบที่รู้จักกันดีดังกล่าวว่าC ( x ฉัน ) = Y ฉันทั้งหมดของฉันและเราสามารถเพิ่มข้อ จำกัด ให้ความสนใจกับวงจรเพียงDเช่นที่D ( x ฉัน ) = Y ฉันทั้งหมดของฉัน
สิ่งนี้เกิดขึ้นจากแอปพลิเคชันที่ใช้งานได้จริงดังนั้นหากคุณไม่สามารถแก้ปัญหานี้ได้โปรดอย่าลังเลที่จะแก้ไขตัวแปรหรือกรณีพิเศษที่น่าสนใจ ตัวอย่างเช่นอย่าลังเลที่จะยกตัวอย่างพารามิเตอร์หรือขีด จำกัด ใด ๆ ในวิธีที่สะดวกสำหรับคุณ คุณสามารถสันนิษฐานได้ว่าวงจรนั้นไม่ใหญ่เกินไป (พหุนามขนาดหรือบางอย่าง) อย่าลังเลที่จะแทนที่ระยะทางแก้ไขกราฟโดยการวัดอื่นที่ใกล้เคียงกับการใช้งาน นอกจากนี้ในทางปฏิบัตินักแก้ปัญหา SAT มักจะมีประสิทธิภาพอย่างน่าประหลาดใจในวงจรโครงสร้างที่เกิดขึ้นในทางปฏิบัติดังนั้นจึงเป็นเรื่องดีที่จะเรียกใช้ตัวแก้ SAT ในฐานะ subroutine / oracle (อย่างน้อยถ้าคุณเรียกใช้งานบางอย่างเช่น จากวงจรเช่น )
อีกวิธีหนึ่งคือขาดขั้นตอนวิธีการใด ๆ ผมก็จะมีความสนใจในการดำรงอยู่คำถาม: สำหรับ "ค่าเฉลี่ย" วงจรสิ่งที่น่าจะเป็นที่มีอยู่บางส่วนDที่ตรงตามเกณฑ์ทั้งหมดหรือไม่ (ฉันหวังว่าความน่าจะเป็นนี้ต่ำมาก แต่ฉันก็ไม่รู้เลยว่าเป็นอย่างนั้น)
แอปพลิเคชันที่ใช้งานได้จริงคือการทดสอบว่าวงจรอาจมีไข่อีสเตอร์ลับๆ / ซ่อนอยู่ที่เป็นอันตรายหรือไม่ สมมติฐานของสิ่งที่แทรกเข้าไปอาจเป็นเช่นนี้ เราเริ่มต้นด้วยวงจร "สีทอง" Dซึ่งคำนวณการทำงานที่ต้องการและไม่มีแบ็คดอร์ที่ซ่อนอยู่ จากนั้นฝ่ายตรงข้ามทำให้มีการเปลี่ยนแปลงขนาดเล็กเพื่อการพัฒนาที่จะแนะนำลับๆที่ซ่อนอยู่ที่ได้รับการปรับเปลี่ยนวงจรC วัตถุประสงค์ของลับๆเพื่อเปลี่ยนฟังก์ชั่นที่คำนวณโดยDในบางวิธี ถ้าPr [ C ( x ) ≠ D ( x ) ]ไม่เล็กเกินไปการเปลี่ยนแปลงสามารถตรวจพบได้โดยการทดสอบแบบสุ่มดังนั้นฝ่ายตรงข้ามอาจพยายามทำให้มีขนาดเล็กมาก ในทำนองเดียวกันถ้าCแตกต่างจากDในสถานที่มากเกินไปอาจสังเกตได้จากการตรวจสอบวงจรแบบสุ่มดังนั้นฝ่ายตรงข้ามอาจพยายามลดจำนวนการเปลี่ยนแปลง (และอาจมีชุดทดสอบของx i , y iคู่ที่แสดงอินสแตนซ์ของฟังก์ชันการทำงานที่ต้องการดังนั้นเรารู้ว่าไม่ว่าวงจร "ทอง" ใด ๆDจะเป็นไปตามD (สำหรับ all i .) ในที่สุดเราจะได้รับวงจร C (แต่ไม่ใช่วงจร "ทอง" D ) และเราต้องการทราบว่า Cอาจเป็นรุ่นดัดแปลงของ Dบางตัวหรือไม่ ทำเพื่อแนะนำลับๆที่ซ่อนอยู่ของประเภทนี้