เปรียบเทียบผลิตภัณฑ์สองรายการจากจำนวนเต็มหรือไม่


10

สมมติว่าฉันมีสองรายการของจำนวนเต็มบวกของความเป็นลูกโซ่ที่มีขอบเขตและฉันนำผลิตภัณฑ์ขององค์ประกอบทั้งหมดของแต่ละรายการ วิธีที่ดีที่สุดในการพิจารณาว่าผลิตภัณฑ์ใดมีขนาดใหญ่กว่า

แน่นอนฉันสามารถคำนวณแต่ละผลิตภัณฑ์ได้ แต่ฉันหวังว่าจะมีวิธีการที่มีประสิทธิภาพมากขึ้นเนื่องจากจำนวนตัวเลขในผลิตภัณฑ์จะเพิ่มขึ้นเป็นเส้นตรงตามจำนวนคำศัพท์เพื่อให้การคำนวณทั้งหมดเป็นกำลังสอง

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


ถ้าเรารู้ค่าจำนวนเต็มสูงสุดและเป็นอิสระจาก n (เช่นค่าคงที่ k) จากนั้นเราสามารถสร้างตารางการค้นหาปัจจัยของตัวเลขทั้งหมดจาก 1 ถึง k ตอนนี้ฉันคิดว่าถ้าคุณเขียนทุกอย่างในเบส [ผลคูณของปัจจัย] มันจะกลายเป็นเชิงเส้นเพราะคุณสามารถคำนวณผลิตภัณฑ์ในเวลาเชิงเส้นกับฐานนั้นจากนั้นเปรียบเทียบแต่ละหลัก (เริ่มต้นด้วยลำดับที่สูงที่สุด) รายละเอียดมีความยุ่งยากเล็กน้อย แต่ฉันคิดว่ามันน่าจะใช้ได้ถ้า k คงที่
Phylliida

ฉันอยากบอกว่าเทคนิคแบบอะนาล็อกสำหรับผลิตภัณฑ์คือการรักษาจำนวนตรรกยะให้เท่ากับองค์ประกอบแรกของรายการแรกหารด้วยองค์ประกอบแรกขององค์ประกอบที่สอง (บวกกับการจัดการ s) แต่นั่นไม่เป็นประโยชน์จริง ๆ เพราะถ้าจำนวนทั้งหมดเป็น coprime มันจะคำนวณทั้งสองผลิตภัณฑ์ | นอกจากนี้ฉันไม่แน่ใจว่าอัลกอริทึมไร้เดียงสานั้นเป็นกำลังสอง คอมพิวเตอร์ผลิตภัณฑ์ของnจำนวนเต็มขนาดเมตรอาจใช้เวลาถึงC ( ม. , ม. ) + C ( ม. , 2 ม. ) + . . + C ( m , ( n0nmโดยที่ C ( x , y )คือค่าใช้จ่ายของการคูณจำนวนเต็ม x -bits ด้วยจำนวนเต็ม y -bits เว้นแต่คุณจะพิจารณาว่าผลิตภัณฑ์ยังอยู่ในรูปแบบC(m,m)+C(m,2m)+...+C(m,(n1)m)C(x,y)xY
xavierm02

1
อาจมีวิธีที่จะขยายวิธีการในmath.stackexchange.com/a/1081989/10385
xavierm02

การปรับปรุงวิธีการไร้เดียงสา: นับจำนวนการเกิดขึ้นของแต่ละปัจจัย (ในเวลาเชิงเส้น) และคำนวณเฉพาะผลิตภัณฑ์ในตอนท้ายโดยใช้อัลกอริทึมการเปิดเครื่องที่มีประสิทธิภาพ ใช้งานได้ในเวลาซึ่งก็คือO ( nO(M(n))โดยใช้ปัจจุบัน asymptotically วิธีที่เร็วที่สุด O(nเข้าสู่ระบบn2O(เข้าสู่ระบบ* * * *n))
Emil Jeřábek

2
ฉันจะคิดถึงความแม่นยำที่จำเป็นสำหรับบันทึก มันอาจมีประสิทธิภาพมากกว่า
Emil Jeřábek

คำตอบ:


6

(ฉันเข้าใจคำอธิบายของปัญหาเพื่อให้หมายเลขอินพุตถูกล้อมรอบด้วยค่าคงที่ดังนั้นฉันจะไม่ติดตามการพึ่งพาขอบเขต)

ปัญหาสามารถแก้ไขได้ในเวลาเชิงเส้นและพื้นที่ลอการิทึมโดยใช้ผลรวมของลอการิทึม รายละเอียดเพิ่มเติมอัลกอริทึมเป็นดังนี้:

  1. ใช้ตัวนับไบนารีนับจำนวนการเกิดขึ้นของแต่ละหมายเลขที่เป็นไปได้ในทั้งสองรายการ

สิ่งนี้ต้องใช้เวลาและตัวนับใช้พื้นที่O ( log n )เนื่องจากแต่ละตัวนับถูกล้อมรอบด้วยค่าnO(n)O(เข้าสู่ระบบn)n

ให้เป็นจำนวนเฉพาะด้านล่างO ( 1 )ที่ถูกผูกไว้ โดยการกระจายตัวนับแต่ละตัวสำหรับตัวเลขaถึงปัจจัยหลักของa (ด้วยความเหมาะสมหลายหลาก) และการลบจำนวนสำหรับหนึ่งรายการจากรายการอื่นเราได้รับสิ่งต่อไปนี้ในเวลาO ( log n ) :พี1,...,พีkO(1)aaO(เข้าสู่ระบบn)

  1. จำนวนเต็ม Compute กับO ( บันทึกn )บิตดังกล่าวว่าปัญหาที่เกิดขึ้นจะเทียบเท่ากับการกำหนดสัญลักษณ์ของΛ : = Σ k ฉัน= 1 β ฉันเข้าสู่ระบบPฉันβ1,...,βkO(เข้าสู่ระบบn)Λ=Σผม=1kβผมเข้าสู่ระบบพีผม

  2. หากให้ตอบว่าผลิตภัณฑ์เท่ากันβ1==βk=0

มิฉะนั้น 0 โดยทฤษฎีบทของเบเกอร์เราสามารถลดความผูกพัน | Λ | > 2 - C บันทึกn สำหรับบางอย่างคงที่C ดังนั้นต่อไปนี้อย่างถูกต้องคำนวณสัญลักษณ์ของΛ :Λ0

|Λ|>2-เข้าสู่ระบบn
Λ
  1. เอาท์พุทเครื่องหมายของโดยที่π iเป็นการประมาณของlog p iถึงm : = C log n + k + 1บิตของความแม่นยำΣผม=1kβผมπผมπผมเข้าสู่ระบบพีผมม.=เข้าสู่ระบบn+k+1

ให้เป็นค่าใช้จ่ายของการคูณจำนวนเต็มสองm -bit ขอบเขตที่ดีที่สุดในปัจจุบันคือM ( m ) = O ( mM(ม.)ม.แต่ที่นี่มันจะไม่สร้างความแตกต่างมากแม้ว่าเราจะใช้อัลกอริทึมการคูณ O ( m 2 )เล็กน้อย เราสามารถคำนวณบันทึกหน้าฉันจะบิตของความถูกต้องในเวลา O ( M ( ม. ) เข้าสู่ระบบม. )ใช้ซ้ำประชุมผู้ถือหุ้น (ดูเช่นที่นี่) แล้วประเมิน Σ ฉันβ ฉันπ ฉันต้องใช้เวลา O ( M ( เมตร)M(ม.)=O(ม.เข้าสู่ระบบม.2O(เข้าสู่ระบบ* * * *ม.))O(ม.2)เข้าสู่ระบบพีผมม.O(M(ม.)เข้าสู่ระบบม.)Σผมβผมπผม . โดยรวมแล้วขั้นตอนที่ 4 ต้องใช้เวลา O ( M ( m ) log m ) O ( log nO(M(ม.)) )O(M(ม.)เข้าสู่ระบบม.)O(เข้าสู่ระบบnพีโอล.Y(เข้าสู่ระบบเข้าสู่ระบบn))

ดังนั้นเวลาทำงานของอัลกอริทึมจะถูกควบคุมโดยของขั้นตอนแรกO(n)


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