การคำนวณจำนวนบิตของพลังงานจำนวนเต็มขนาดใหญ่


10

ด้วยจำนวนเต็มสองจำนวนและnในการแทนฐานสองความซับซ้อนของการคำนวณขนาดบิตของx nคืออะไร?xnxn

วิธีหนึ่งในการทำเช่นนั้นคือการคำนวณโดยคำนวณการประมาณของlog 2 ( x )ด้วยความแม่นยำเพียงพอ ปรากฏว่าการคำนวณล็อก2 ( x )พร้อมkบิตของ precisions สามารถทำได้ในO ( M ( k ) บันทึกk )โดยที่M (1+⌊log2⁡(xn)⌋=1+⌊nlog2⁡(x)⌋log2⁡(x)log2⁡(x)kO(M(k)log⁡k)คือเวลาที่จำเป็นในการคำนวณผลิตภัณฑ์สองจำนวนเต็มของความยาวk นี่เป็นอัลกอริธึมของความซับซ้อน (ไม่ใช่แบบธรรมดา) โดยประมาณ O ( s log 2 s )ถ้า sถูกผูกไว้กับบิตของทั้ง xและ n (ถ้าฉันไม่มีข้อผิดพลาด)M(k)kO(slog2⁡s)sxn

เราสามารถเอาชนะโดยที่sคือขนาดของxและn (ในกรณีที่มีขนาดใกล้เคียงกัน)? มีอัลกอริทึมง่าย ๆ ที่จะทำให้เกิดความซับซ้อนนี้หรือดีกว่าO(slog2⁡(s))sxn

หมายเหตุ: ฉันสนใจความซับซ้อนในแบบจำลองทางทฤษฎีเช่นเครื่องทัวริง


แนะนำการโยกย้าย / "การส่งเสริม" สิ่งนี้กับทฤษฎีคอมพิวเตอร์วิทยาการ
— vzn

@vzn: ฉันไม่คิดว่านี่จะเป็นประโยชน์ ...
— บรูโน่

ทำไมจะไม่ล่ะ? คำถามนี้ทำให้ฉันนึกถึงการโจมตีอัลกอริทึมในการคาดเดาของ Dysons เช่นที่ครอบคลุมโดย RJLipton ใน1 , 2
— vzn

เพียงเพราะฉันพบคำตอบสำหรับคำถามของฉันดังนั้นไม่จำเป็นต้องถามที่อื่นในใจของฉัน
— บรูโน่

คำตอบ:


1

[แก้ไข]ตามที่แนะนำฉันแก้ไขคำตอบของฉันเพื่อให้รายละเอียดเพิ่มเติม

คำตอบสำหรับคำถามที่สองของฉันคือไม่ :

เรื่อง คอมพิวเตอร์ขึ้นอยู่กับความแม่นยำkเป็นอย่างน้อยเป็นเรื่องยากที่คำนวณบิตขนาดของx 2 klog⁡(x)kx2k

พิสูจน์ ให้แสดงบิตขนาดของจำนวนเต็มY แจ้งให้ทราบล่วงหน้าครั้งแรกที่ติดลบY , บิตขนาดของปีคือ1 + ⌊ บันทึกY ⌋|y|yyy1+⌊log⁡y⌋

ดังนั้น ⌋ ตอนนี้ล็อก2 k ( x ) คือล็อก( x )เลื่อนตำแหน่งkไปทางซ้าย ดังนั้นเราสามารถคำนวณlog ( x )ถึงความแม่นยำk ได้โดยเพียงแค่ลบ1ถึงบิตขนาดx 2 kและเลื่อนตำแหน่งkผลลัพธ์ไปทางขวา|x2k|=1+⌊2klog⁡x⌋2klog⁡(x)log⁡(x)klog⁡(x)k1x2kk


1
ทำไมจำนวนบิตในทำให้คุณสามารถคำนวณlog xถึงkบิตที่มีความแม่นยำได้ การลดลงของคุณใช้งานได้จริงหรือ จะเกิดอะไรขึ้นถ้ากรณีพิเศษที่n = 2 kนั้นง่ายกว่า / ยากกว่าค่าที่เป็นไปได้อื่น ๆ ของn (ไม่ใช่พาวเวอร์ - ของ - สอง)? คุณมีวิธีที่จะตัดทอนความเป็นไปได้นั้นหรือไม่? x2klog⁡xkn=2kn
— DW

@DW: ฉันกลับมาที่คำถามนี้หลังจากความคิดเห็นของ vzn หลักฐานของฉันจะเป็นดังนี้: จำนวนบิตของจำนวนเต็มคือ1 + ⌊ บันทึกY ⌋ ดังนั้นจำนวนของบิตในx 2 kคือ1 + ⌊ 2 kบันทึกx ⌋ นอกจากนี้2 k log xก็เหมือนกับlog xแต่เลื่อนตำแหน่งkไปทางซ้าย ดังนั้น⌊ 2 k log x ⌋ให้คุณ (อย่างน้อย) kบิตแรกของy1+⌊log⁡y⌋x2k1+⌊2klog⁡x⌋2klog⁡xlog⁡xk⌊2klog⁡x⌋k x ดังนั้นถ้าคุณสามารถคำนวณจำนวนบิตของ x 2 k , โดยการลบ 1จะส่งผลให้คุณได้รับเป็นครั้งแรก kบิตบันทึก x มันสมเหตุสมผลหรือไม่ log⁡xx2k1klog⁡x
— บรูโน่

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