หาส่วนที่เหลือของพหุนามคงที่ที่มีขนาดใหญ่เมื่อหารด้วยพหุนามที่ไม่รู้จักขนาดเล็ก


9

สมมติว่าเราทำงานในสนาม จำกัด เราได้รับค่าคงที่พหุนามขนาดใหญ่ p (x) (จาก, พูด, องศา 1,000) บนฟิลด์นี้ พหุนามนี้รู้จักกันมาก่อนและเราได้รับอนุญาตให้ทำการคำนวณโดยใช้ทรัพยากรจำนวนมากใน "ช่วงเริ่มต้น" ผลลัพธ์เหล่านี้อาจถูกจัดเก็บในตารางการค้นหาขนาดเล็กพอสมควร

ในตอนท้ายของ "ระยะเริ่มต้น" เราจะได้รับพหุนาม Q (x) ที่ไม่รู้จักจำนวนเล็กน้อย (จาก, พูด, ระดับ 5 หรือน้อยกว่า)

มีวิธีที่รวดเร็วในการคำนวณ p (x) mod q (x) หรือไม่เนื่องจากเราได้รับอนุญาตให้ทำการคำนวณที่ซับซ้อนบางอย่างใน "ระยะเริ่มต้น"? วิธีหนึ่งที่ชัดเจนคือการคำนวณ p (x) mod q (x) สำหรับค่าที่เป็นไปได้ทั้งหมดของ q (x) มีวิธีที่ดีกว่าในการทำเช่นนี้?

คำตอบ:


3

อัลกอริทึมต่อไปนี้ทำงานได้ดีถ้าเขตข้อมูลต้นแบบมีลำดับที่น้อยมาก s.

สมมติว่าเรารู้ q ลดลงไม่ได้ระดับคงที่ d. จากนั้นดัดแปลงq, พวกเรารู้ xsd=xถือ เพราะฉะนั้นมันก็พอเพียงที่จะ pre-คำนวณxp(x)modxsdx

โดยทั่วไปอาจสลายตัวลงในผลิตภัณฑ์ของพหุนามลดลงq_r ในกรณีนี้มีการโต้แย้งที่คล้ายกันกับการคำนวณ modulo แต่ละแยกต่างหากจากนั้นทำการประกอบผลลัพธ์เข้าด้วยกัน ดังนั้นเราจึงจำเป็นจริงๆที่จะคำนวณสำหรับแต่ละdq(x)q=q1qrpq1,,qrp(x)modxsdxdd


2

ฉันคิดว่ามีวิธีที่รวดเร็วในการทำเช่นนี้ ให้ค่าสัมประสิทธิ์ของพหุนามยังไม่ทราบจะดังนั้นที่เป็นจำนวนเล็ก ๆ ตอนนี้ให้เราเริ่มคำนวณโดยที่โดยที่ใหญ่และเป็นที่รู้จัก นี้เราทำโดยการลดระดับการใช้ equalities เป็น{} ในที่สุดสิ่งที่เราได้คือระดับพหุนามซึ่งสัมประสิทธิ์เป็นพหุนามของ (ตั้งแต่qbiq=i=0dbixidp(modq)p=i=0DaixiDaiaDxD=aDbdi=1d1bdixDi<d1biaiเป็นที่รู้จัก). มีหลายชื่อเหล่านี้เราสามารถคำนวณได้อย่างรวดเร็วเมื่อเราได้รับคิวq


-1

ดูความคิดเห็นที่ยอดเยี่ยมเกี่ยวกับโพสต์ด้านล่างนี้ :)


preprocessing; อินพุต: p(x)

  1. ปัจจัยเป็น(x_i-r_i)p(x)p(x)=i=01000(xiri)

  2. เก็บสิ่งนี้เป็นตารางของรูตที่แตกต่างและหลายหลากเกี่ยวข้องTrjmj

ระยะออนไลน์ อินพุต: q(x)

  1. ปัจจัยเป็น(x_i-r'_i)q(x)q(x)=i=05(xiri)

  2. เก็บสิ่งนี้เป็นรายการของรูตที่แตกต่างและหลายหลากเกี่ยวข้องLrjmj

  3. ในขณะที่ไม่ว่างเอาถัดราก / หลายหลากจากและเงื่อนไขใด ๆ เช่นในTLLT

  4. อ่านจากตารางและเอาต์พุตที่แก้ไขp(x)modq(x)T


ความคิดเห็นอื่น ๆ:

  • เห็นได้ชัดว่าคุณต้องการจัดเรียงตารางและเข้าถึงด้วยการค้นหาแบบไบนารี (หรือต้นไม้)T
  • (ให้เป็นระดับของ ) ถ้าคุณต้องการให้เอาท์พุทเป็นค่าสัมประสิทธิ์การสามารถทำ FFT จำนวนมากที่ท้ายได้เวลาdp(x)p(x)modq(x)O~(d)
  • คุณอาจคำนวณล่วงหน้าได้หลายวิธีหลายวิธีที่คุณรวมคำศัพท์ไว้ในล่วงหน้า (สไตล์การเขียนโปรแกรมแบบไดนามิก) เพื่อให้การคูณ (หรือทั้งหมด) ส่วนใหญ่เป็นเพียงการค้นหา ค่าใช้จ่ายในการครอบครองนั้นคือจำนวนการค้นหาหรือโดยประมาณ ถ้านี่เป็นเพียงแค่การดำเนินการทางคณิตศาสตร์ที่เป็นรูปธรรมTO(logd)d=1000

2
คุณกำลังแยกตัวประกอบในสาขาใด คุณคาดหวังว่าการเป็นตัวแทนครั้งนี้จะใหญ่แค่ไหนในด้านของสนามดั้งเดิม? และเมื่อคุณบอกให้อ่านจากตารางและเอาท์พุทที่ถูกดัดแปลงคุณหมายถึงอะไร?
David Eppstein

2
สิ่งนี้จะใช้งานได้หากคุณใช้งานฟิลด์ที่ทั้งและแตกเท่านั้น แต่ดูเหมือนว่าจะขึ้นอยู่กับ ; โดยเฉพาะอย่างยิ่งคุณไม่สามารถคำนวณรากสำหรับเพียงอย่างเดียวได้ นอกจากนี้การคำนวณรากของบนสนามที่มีขนาดใหญ่เช่นนี้จะใช้เวลา (อย่างน้อย); นี่ไม่ได้ดีไปกว่าอัลกอริธึมไร้เดียงสา pqqpq|p|
David Harris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.