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


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)logk)คือเวลาที่จำเป็นในการคำนวณผลิตภัณฑ์สองจำนวนเต็มของความยาวk นี่เป็นอัลกอริธึมของความซับซ้อน (ไม่ใช่แบบธรรมดา) โดยประมาณ O ( s log 2 s )ถ้า sถูกผูกไว้กับบิตของทั้ง xและ n (ถ้าฉันไม่มีข้อผิดพลาด)M(k)kO(slog2s)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+logy

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


1
ทำไมจำนวนบิตในทำให้คุณสามารถคำนวณlog xถึงkบิตที่มีความแม่นยำได้ การลดลงของคุณใช้งานได้จริงหรือ จะเกิดอะไรขึ้นถ้ากรณีพิเศษที่n = 2 kนั้นง่ายกว่า / ยากกว่าค่าที่เป็นไปได้อื่น ๆ ของn (ไม่ใช่พาวเวอร์ - ของ - สอง)? คุณมีวิธีที่จะตัดทอนความเป็นไปได้นั้นหรือไม่? x2klogxkn=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+logyx2k1+2klogx2klogxlogxk2klogxk x ดังนั้นถ้าคุณสามารถคำนวณจำนวนบิตของ x 2 k , โดยการลบ 1จะส่งผลให้คุณได้รับเป็นครั้งแรก kบิตบันทึก x มันสมเหตุสมผลหรือไม่ logxx2k1klogx
บรูโน่

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