การเพิ่มประสิทธิภาพการใช้งานการเข้ารหัสทางคณิตศาสตร์

ฉันกำลังเพิ่มประสิทธิภาพการใช้งานการบีบอัดทางคณิตศาสตร์ของฉัน ฉันได้รวมอัลกอริธึมการเข้ารหัสทางคณิตศาสตร์พื้นฐานไว้ด้านล่าง:

lower bound = 0
upper bound = 1

while there are still symbols to encode
  current range = upper bound - lower bound
  upper bound = lower bound + (current range × upper bound of new symbol)
  lower bound = lower bound + (current range × lower bound of new symbol)
end while

ฉันมีความคิดที่จะปัดเศษค่าของฉัน แต่การทำเช่นนั้น การคำนวณขอบเขตบนจะไม่สามารถใช้ค่าขอบเขตล่างได้ ฉันคิดไม่ออกว่าต้องทำอย่างไร

ข้อมูลเพิ่มเติม: ฉันวางแผนที่จะปัดเศษขอบเขตล่างขึ้น ทำให้ช่วงแคบลง ดังนั้นจึงรักษาความแม่นยำ ขณะเดียวกันก็ทำให้ตัวเลขของฉันมีหลักน้อยลง จากนั้นปัดขอบบนของฉันล่างด้วยวิธีเดียวกัน อย่างไรก็ตาม การคำนวณขอบเขตบนทำให้เพิ่มขึ้นหากเราเพิ่มค่าของขอบเขตล่าง จึงทำให้อัลกอริทึมไม่ถูกต้อง

คำถามของฉันคือ ฉันจะคำนวณขอบเขตบนโดยไม่ใช้ค่าของขอบเขตล่างได้อย่างไร


person John McBrown    schedule 20.03.2013    source แหล่งที่มา
comment
คุณจงใจละทิ้งการดำเนินการกะ/มาตราส่วนออกจากรหัสเทียมของคุณ หรือคุณวางแผนที่จะเก็บข้อมูลทั้งหมดไว้ในหน่วยความจำจนกว่าการบีบอัดจะเสร็จสิ้น ฉันคิดว่าการปัดเศษที่คุณต้องการนั้นขึ้นอยู่กับรายละเอียดว่าคุณจัดการเรื่องนี้อย่างไร...   -  person comingstorm    schedule 21.03.2013
comment
ฉันเพิ่งอ่านเกี่ยวกับการขยับบิต แต่ฉันใช้ BigDecimals ในการใช้งาน Java ของฉัน และฉันพบว่ามันยากที่จะดำเนินการกับบิตที่สำคัญที่สุดเท่านั้น คุณจะรู้ไหมว่าฉันสามารถทำได้ใน Java ด้วย BigDecimals ได้อย่างไร   -  person John McBrown    schedule 22.03.2013
comment
ฉันแนะนำให้ใช้ long แทน   -  person comingstorm    schedule 22.03.2013
comment
อืม..รู้ไหมว่าจะใช้การเปลี่ยนเกียร์แบบยาวได้อย่างอิสระหรือเปล่า?   -  person John McBrown    schedule 22.03.2013
comment
เนื่องจากคุณใช้ Java คุณสามารถใช้ตัวดำเนินการเลื่อนขวาที่ไม่ได้ลงนาม >>> เพื่อทำการเลื่อนตามที่คุณต้องการสำหรับการบีบอัดทางคณิตศาสตร์   -  person comingstorm    schedule 22.03.2013
comment
ฉันกำลังค้นคว้าเกี่ยวกับเรื่องนี้เพื่อดูว่าฉันไม่สามารถลองใช้แทนได้หรือไม่ ขอบคุณสำหรับความช่วยเหลือทั้งหมดของคุณ ฉันจะอัปเดตให้คุณเร็ว ๆ นี้ หากคุณสามารถให้รหัสใด ๆ ฉันก็ขอบคุณมากเช่นกัน   -  person John McBrown    schedule 22.03.2013
comment
อ๊ะ ตัวดำเนินการหลักที่แท้จริงที่คุณต้องการมากที่สุดสำหรับการบีบอัดทางคณิตศาสตร์คือตัวดำเนินการเลื่อนซ้าย << อย่างไรก็ตาม ขึ้นอยู่กับว่าคุณใช้คณิตศาสตร์อย่างไร การรู้เกี่ยวกับตัวดำเนินการเลื่อนขวาที่ไม่ได้ลงนามก็อาจมีประโยชน์เช่นกัน...   -  person comingstorm    schedule 22.03.2013


คำตอบ (1)


เกี่ยวกับการเลื่อนสตริงไปทางซ้าย ให้ใช้: string.substring(1)

person Amir    schedule 23.06.2013