บิตที่สำคัญที่สุดของการคูณจำนวนเต็มและไดอะแกรมการตัดสินใจแบบไบนารี


15

ให้และy ที่สองเลขฐานสองกับnบิตและZ = x Yเลขฐานสอง (ความยาว2 n ) ของผลิตภัณฑ์ของxและy ที่ เราต้องการที่จะคำนวณ siginifcant บิตมากที่สุดZ 2 n - 1ของผลิตภัณฑ์Z = Z 2 n - 1 ... Z 0xYnZ=xY 2nxYZ2n-1Z=Z2n-1...Z0

เพื่อวิเคราะห์ความซับซ้อนของฟังก์ชั่นนี้ในรูปแบบของแผนภาพการตัดสินใจไบนารี (โดยเฉพาะอย่างยิ่งการอ่านครั้งเดียวแตกแขนงโปรแกรม) ผมพยายามที่จะมองหาการแสดงออกเทียบเท่าบางอย่างสำหรับกรณี 1 สิ่งแรกที่ชัดเจนคือz 2 n - 1 = 1 x y 2 2 n - 1 (ที่นี่xและyเป็นจำนวนเต็มที่สอดคล้องกับเลขฐานสอง) ฉันอยากได้สัญชาตญาณว่าจะเกิดอะไรขึ้นถ้าฉันตั้งค่าอินพุตบิตคงที่ เช่นถ้าฉันตั้งบิตที่สำคัญที่สุดจากZ2n-1=1Z2n-1=1xY22n-1xYและ yถึง 0 ฉันได้รับฟังก์ชั่นคงที่ 0 แต่บิตที่มีนัยสำคัญต่ำกว่านั้นก็ไม่ได้มีอิทธิพลต่อผลลัพธ์ดังกล่าวxY

มีนิพจน์ที่เทียบเท่าอื่น ๆ สำหรับเคสซึ่งช่วยได้มากขึ้นในการดูว่าเกิดอะไรขึ้นถ้าฉันแก้ไขบิตอินพุตบางส่วน? มีวิธีการกลั่นกรองเพื่อคำนวณผลิตภัณฑ์ของเลขฐานสองสองตัวที่สามารถช่วยได้หรือไม่? หรือคุณมีวิธีอื่นในการแก้ไขปัญหานี้?Z2n-1=1


ฉันพบคำถามสามข้อในย่อหน้าสุดท้ายค่อนข้างคลุมเครือ โปรดพิจารณาคำถามที่เป็นรูปธรรมมากขึ้น
slimton

คำถามที่คลุมเครือ บางทีบางคนอาจมีวิธีการใหม่หรือแนวคิดใหม่สำหรับปัญหานี้
Marc Bury

คุณกำลังมองหาความกว้างของ BDD สำหรับปัญหาหรือไม่
Sylvain Peyronnet

ฉันสนใจในขอบเขตล่างของขนาด BDD
Marc Bury

1
คุณหมายถึงขอบเขตล่างพหุนามหรือไม่? การคูณอยู่ใน L ดังนั้นจึงมี BDDs ขนาดพหุนามสม่ำเสมอ (แม้แต่ความกว้าง 5 เนื่องจากอยู่ในชุด ) NC1
Emil Jeřábekสนับสนุน Monica

คำตอบ:


5

แหล่งที่น่าสนใจคือ DE Knuth: ศิลปะแห่งการเขียนโปรแกรมคอมพิวเตอร์, เล่ม 4, Fascicle 1, Tricks & เทคนิค Bitwise; ไดอะแกรมการตัดสินใจแบบไบนารี , Addison-Wesley, Pearson Education 2009

บนหน้า 96 มี BDD สำหรับบิตทั้งหมดของ z = x⋅yซึ่ง x และ y มี 3 บิต มันแสดงให้เห็นว่าในกรณีของ 3 บิต BDD แทนบิตที่สำคัญที่สุดมี 7 โหนดที่ไม่ใช่ขั้ว เห็นภาพตะโกนฉันได้วาดใหม่โดยใช้ดัชนีของคุณ x = (x2, x1, x0) และ y = (y2, y1, y0)

ในหน้า 140 ในหนังสือของ Knuth มีคำถาม (หมายเลข 183) เกี่ยวกับ BDD ที่เป็นตัวแทนบิตที่สำคัญที่สุดสำหรับการคูณจำนวนสองจำนวนที่มีจำนวนบิตมากมาย (เรียกว่า "การ จำกัด ฟังก์ชันบิตนำ") - นี่คล้ายกับสิ่งที่คุณ กำลังสำลัก! คำตอบในหน้า 223 ให้ระดับแรกของผลลัพธ์ BDD และกล่าวถึงจำนวนของโหนดในทุกระดับ แต่โชคไม่ดีที่มันไม่ได้ให้อัลกอริทึมในการสร้าง BDD ดังกล่าว

บิตที่สำคัญที่สุดสำหรับการคูณของตัวเลข 3 บิตสองตัว

รูปที่ 1: บิตที่สำคัญที่สุดสำหรับการคูณของ (x2, x1, x0) * (y2, y1, y0)


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