ประเมินวงจรบูลีนบนแบตช์ของอินพุตที่คล้ายกัน


10

สมมติว่าฉันมีวงจรบูลีน C ที่คำนวณฟังก์ชันบางอย่าง f:{0,1}n{0,1}. สมมติว่าวงจรประกอบด้วย AND, OR และ NOT เกตกับ fan-in และ fan-out ไม่เกิน 2

ปล่อย x{0,1}nเป็นอินพุตที่ได้รับ ป.ร. ให้ไว้C และ xฉันต้องการประเมิน C บน n อินพุตที่แตกต่างจาก x ในตำแหน่งบิตเดียวคือการคำนวณ n ค่า C(x1),C(x2),,C(xn) ที่ไหน xi เป็นเช่นเดียวกับ x ยกเว้นว่ามัน iบิตที่ถูกพลิก

มีวิธีการทำสิ่งนี้ที่มีประสิทธิภาพมากกว่าที่ประเมินโดยอิสระหรือไม่ C n ครั้งใน n อินพุตแตกต่างกันอย่างไร

สมมติ C มี mประตู จากนั้นประเมินอิสระC ในทุก n อินพุตจะใช้ O(mn)เวลา. มีวิธีคำนวณหรือไม่C(x1),C(x2),,C(xn) ใน o(mn) เวลา?


บริบททางเลือก: ถ้าเรามีวงจรเลขคณิต (ซึ่งมีเกตเป็นการคูณการบวกและการปฏิเสธ)Rแล้วมันจะเป็นไปได้ที่จะคำนวณ n อนุพันธ์ทิศทาง fxi(x) ใน O(m)เวลา. โดยพื้นฐานแล้วเราสามารถใช้วิธีมาตรฐานสำหรับการคำนวณการไล่ระดับสี (กฎการแพร่กระจายกลับ / ห่วงโซ่) ในO(m)เวลา. ใช้งานได้เพราะฟังก์ชั่นที่เกี่ยวข้องนั้นมีความต่อเนื่องและแตกต่างกัน ฉันสงสัยว่าสิ่งที่คล้ายกันสามารถทำได้สำหรับวงจรบูลีน วงจรบูลีนนั้นไม่ต่อเนื่องและสร้างความแตกต่างดังนั้นคุณจึงไม่สามารถทำแบบเดียวกันได้ แต่อาจมีเทคนิคที่ฉลาดอื่น ๆ อาจเป็นกลอุบายของฟูริเยร์หรือบางอย่าง?

(คำถามที่แตกต่าง: ถ้าเรามีประตูบูลีนที่มีแฟน - อินและไม่มีแฟนคลับ จำกัด คุณสามารถทำได้ดีกว่าการประเมิน C n ครั้ง?)


1
เนื่องจากแอนดรูตอบคำถามของคุณค่อนข้างดีฉันจะแสดงความคิดเห็น ถ้าm มีขนาดใหญ่ (เช่น O(2n/n)) และคุณกำลังประเมิน C ในอินพุตจำนวนมาก (มากถึง 2o(n/logn)) จากนั้นมี C ขนาดเท่านั้น O(2n/n) ซึ่งสามารถประเมิน C ในใด ๆ mปัจจัยการผลิต (ปัญหานี้เรียกว่า "การผลิตจำนวนมาก" ในวรรณคดี) ดู Uhlig "ในการสังเคราะห์แผนการแก้ไขตัวเองจากองค์ประกอบการทำงานที่มีองค์ประกอบที่เชื่อถือได้จำนวนน้อย" Math.Notes Acad.Sci สหภาพโซเวียต 15, 558--562 ดังนั้นในบางกรณีคุณสามารถทำได้ดีกว่าด้วยความไม่สม่ำเสมอ
Ryan Williams

คำตอบ:


10

ฉันคิดว่ามันไม่น่าเป็นไปได้ที่กลอุบายดังกล่าวนั้นง่ายต่อการค้นหาและ / หรือจะให้ผลกำไรที่สำคัญแก่คุณ นี่คือวิธี:

ก่อนอื่นในขณะที่ง่ายขึ้นอย่างเห็นได้ชัดปัญหาของคุณสามารถแก้ปัญหาทั่วไปของวงจร C และ N ปัจจัยการผลิต x0,,xN1ประเมินผล C เลยอินพุตเร็วกว่า O~(N|C|)เวลา. เหตุผลก็คือเราสามารถปรับแต่งC เป็นวงจร C ขนาด |C|+O~(Nn) ซึ่งในอินพุต 0i10N1iเอาท์พุท C(xi). โดยพื้นฐานแล้วเราแค่สร้างตารางการค้นหาเล็กน้อยที่ส่ง0i10N1i ถึง xiและสอดมันเข้าไป C.

อัลกอริทึมที่ไม่สำคัญสำหรับการประเมินแบทช์ของวงจรบูลีนนั้นสามารถนำมาใช้เพื่อสร้างอัลกอริทึมที่น่าพอใจได้อย่างรวดเร็ว นี่คือตัวอย่างในกรณีง่าย ๆ ที่เราคิดว่าเรามีอัลกอริทึมที่ทำการประเมินผลในเวลาO~(|C|2ϵ+(N|C|)1ϵ/2+N2ϵ) สำหรับค่าคงที่ใด ๆ ϵ>0. บนอินพุตวงจรCเราสามารถตัดสินใจความพึงพอใจโดยการขยาย C เป็นวงจร C ขนาด 2n/2|C| ซึ่งเป็นเพียงหรือมากกว่าตัวเลือกที่เป็นไปได้ทั้งหมดของครั้งแรก n/2 อินพุตไปยัง C(ปล่อยอินพุตอื่นให้ว่าง) จากนั้นเราประเมินชุดงานC ในทุกสิ่ง 2n/2ปัจจัยการผลิต ผลลัพธ์ที่ได้คือเราพบว่าการมอบหมายที่น่าพอใจC IFF Cเป็นที่น่าพอใจ เวลาทำงานคือO~(2(n/2)(2ϵ)|C|2ϵ)=O~(2n(1ϵ/2)poly(|C|)).

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