Score:2

มีอัลกอริทึมในการคำนวณ wNAF สำหรับเลขชี้กำลังที่เร็วกว่ากำลังสองหรือไม่?

ธง in

สำหรับการยกกำลังในกลุ่มที่การผกผันทำได้ง่ายเล็กน้อย เช่น กลุ่มเส้นโค้งวงรี มีอัลกอริทึมสำหรับการคำนวณ $w$นาฟ ("$w$-ary non-adjacent form") อาร์เรย์เร็วกว่า $O(n^2)$? เดอะ อัลกอริทึมมาตรฐาน มีรายชื่ออยู่ใน Wikipedia เป็น (แปลเป็น Python):

def wnaf(ง):
    ผลลัพธ์ = []
    สำหรับฉันในช่วง (256):
        ถ้า d & 1:
            di = mods (ง)
            d -= ดิ
            ผลลัพธ์ += [di]
        อื่น:
            ผลลัพธ์ += [0]
        ง >>= 1
    ส่งคืนผลลัพธ์ [::-1]

ส่วนกำลังสองตรงนี้ก็คือ ดิ สามารถลบได้ เปลี่ยนการลบเป็นการบวก สิ่งนี้สามารถนำไปสู่ด้านบนของตัวเลข ดังนั้นการประมวลผลค่าทั้งหมดของ อาจจำเป็นสำหรับการวนซ้ำแต่ละครั้ง ทำให้อัลกอริทึมกำลังสองในจำนวนบิต

มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่?

Score:2
ธง ru

คำถามสนุก! คำตอบคือใช่ เคล็ดลับคือการปรับเปลี่ยนลูปตามเครื่องหมายของหน้าต่างสุดท้าย หากหน้าต่างสุดท้ายเป็นบวก เราจะข้าม 0 ไปและหยุดที่ 1 ถัดไป หากหน้าต่างสุดท้ายเป็นลบ เราจะข้ามไป 1 วินาทีและหยุดที่ 0 ถัดไปแล้วพลิก ฉันคิดว่ายังมีขั้นตอนสุดท้ายสำหรับทั้งสิ่งนี้และอัลกอริทึมที่อ้างถึงในคำถามที่ว่าหากหน้าต่างสุดท้ายเป็นค่าลบเราต้องเติม 1 ข้างหน้า นี่คือวิธีแทงงูหลามที่ดีที่สุดของฉันสำหรับหน้าต่างที่มีความกว้าง $w$.

def wnaf2(ง):
    ผลลัพธ์ = []
    เครื่องหมาย = 0
    ในขณะที่ d !=0:
        ถ้า (d & 1)^เครื่องหมาย:
            di = mods (เครื่องหมาย d ^)
            sign = (d>>(w-1)&1) # มีกรณีสำหรับรีดนี้ในฟังก์ชั่น mods
            d = d>>w # เพียงเช็ดหน้าต่างบานสุดท้ายโดยไม่ต้องถือ
            ผลลัพธ์ += [di]
            ผลลัพธ์ += (w-1)*[0]
        อื่น:
            ผลลัพธ์ += [0]
            ง >>= 1
    ถ้าเครื่องหมาย:
        ผลลัพธ์ += [1]
    ส่งคืนผลลัพธ์ [::-1]

นี่เป็นเชิงเส้นโดยมีเงื่อนไขว่าเรากำลังนับการเปลี่ยนแปลงและการกำบังเป็น $O(1)$ การดำเนินงาน

Myria avatar
in flag
การเปลี่ยนแปลงและการกำบังคือ $O(1)$ ในการใช้งานจริง (เช่น ไม่ใช่ Python) เพราะแทนที่จะเปลี่ยน `d` ทั้งหมดจริง ๆ เราสามารถทำดัชนีไบต์และบิตได้ สิ่งนี้ช่วยแก้ปัญหาที่ฉันมี ขอบคุณ!

โพสต์คำตอบ

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