ผลรวมที่ปลอดภัยล้น


13

สมมติว่าฉันกำลังให้สิทธิ์แก่กว้างคงจำนวนเต็ม (เช่นพวกเขาพอดีในการลงทะเบียนของความกว้าง )ดังกล่าวว่าผลรวมของพวกเขายังเหมาะในการลงทะเบียนของความกว้างWw a 1 , a 2 , a n a 1 + a 2 + + a n = S wnwa1,a2,ana1+a2++an=Sw

มันดูเหมือนว่าฉันว่าเราสามารถเปลี่ยนรูปตัวเลขเพื่อเช่นกันว่าผลรวมคำนำหน้ายังเหมาะในการลงทะเบียนของความกว้างWS i = b 1 + b 2 + + b ฉัน wb1,b2,bnSi=b1+b2++biw

โดยทั่วไปแรงจูงใจคือการคำนวณผลรวมบนเครื่องลงทะเบียนความกว้างคงที่โดยไม่ต้องกังวลเกี่ยวกับจำนวนเต็มล้นในระยะกลางใด ๆS=Sn

มีความรวดเร็ว (เส้นเวลากว่า) อัลกอริทึมในการค้นหาเช่นการเปลี่ยนแปลง (สมมติว่าฉันจะได้รับเป็นอาร์เรย์การป้อนข้อมูล)? (หรือบอกว่าไม่มีการเปลี่ยนแปลงดังกล่าว)ai


3
การติดตามผล: การตรวจจับน้ำล้นในการสรุป - มีวิธีที่เร็วกว่าซึ่งคำนึงถึงคุณสมบัติของโปรเซสเซอร์ทั่วไปหรือไม่?
Gilles 'หยุดความชั่วร้าย'

1
เพียงใช้ส่วนเติมเต็มของทั้งสองและรวมเข้าไป แม้ว่ามันจะล้นอยู่ตรงกลางเงื่อนไขล่วงหน้าของคุณรับประกันได้ว่าการล้นจะยกเลิกและผลลัพธ์จะถูกต้อง : P
CodesInChaos

@CodeInChaos: จริงเหรอ?
Aryabhata

1
ฉันคิดอย่างนั้น คุณกำลังหลักที่ทำงานในแบบโมดูโลกลุ่มที่ 2 ^ n โดยที่คุณเลือกเป็นตัวแทนที่ยอมรับจากไป-2^(n-1) 2^(n-1)-1แน่นอนว่าต้องใช้ส่วนประกอบสองอย่างและพฤติกรรมล้นที่กำหนดไว้อย่างดี แต่ในภาษาอย่าง C # ควรใช้งานได้
CodesInChaos

@CodeInChaos: มีไม่สองเป็นไปได้ที่ให้เดียวที่เหลือโมดูโล ? โดยพื้นฐานแล้วคุณพูดโดยไม่คำนึงถึงคำสั่งหนึ่งในนั้นไม่สามารถเกิดขึ้นได้ หรือฉันกำลังพลาดอะไรอยู่? 2n
Aryabhata

คำตอบ:


10

กลยุทธ์
อัลกอริธึมเชิงเส้นเวลาต่อไปนี้ใช้กลยุทธ์ของการโฮเวอร์ประมาณโดยเลือกตัวเลขบวกหรือลบตามเครื่องหมายของผลรวมบางส่วน มันประมวลผลรายการหมายเลขล่วงหน้า มันคำนวณการเรียงสับเปลี่ยนของอินพุตon-the-flyขณะทำการเพิ่ม0

ขั้นตอนวิธี

  1. Partition 1 , ... , nเป็นสองรายการองค์ประกอบในเชิงบวกPและองค์ประกอบเชิงลบM ศูนย์สามารถกรองได้a1,,anPM
  2. Let 0Sum=0
  3. ในขณะที่รายการทั้งสองไม่ว่างเปล่า
  4.       Sum>0Sum:=Sum+head(M)M:=tail(M)
  5.       Sum:=Sum+head(P)P:=tail(P)
  6. S

ความถูก
ต้องสามารถสร้างขึ้นได้โดยใช้การโต้แย้งแบบอุปนัยที่ตรงไปตรงมากับความยาวของรายการตัวเลข

a1,,an

SumSum=0Sum>0SumSumSum0SumSum

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


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