คุณพิจารณาจำนวนข้อผิดพลาดในอัลกอริทึม Welch-Berlekamp อย่างไร


9

ในอัลกอริทึม Welch-Berlekamp สำหรับการถอดรหัสรหัส Reed-Solomon หนึ่งจะได้รับรายการของจุดแสดงถึงข้อความที่มีข้อผิดพลาดในในสถานที่ที่ไม่รู้จัก (และมอบให้กับอัลกอริทึม) ผลลัพธ์คือพหุนามผ่านจุดที่กำหนดทั้งหมดยกเว้นที่เกิดข้อผิดพลาด(ai,bi)ebie

วิธีนี้เกี่ยวข้องกับการแก้ระบบสมการเชิงเส้นของแบบฟอร์ม

biE(ai)=Q(ai)

สำหรับทุกที่มีปริญญาและมีการศึกษาระดับที่มากที่สุด k ตัวแปรที่มีค่าสัมประสิทธิ์ของและQiEeQe+kEQ

เพื่อให้แน่ใจว่ามีระดับหนึ่งมักจะเพิ่มข้อ จำกัด ที่สัมประสิทธิ์ของเป็น 1 กับระบบเชิงเส้นด้านบน แต่ในทางปฏิบัติอย่างใดอย่างหนึ่งไม่จำเป็นต้องรู้ว่าอีวิธีหนึ่งที่ไม่มีประสิทธิภาพ (แต่ยังคงเป็นพหุนาม) วิธีที่จะจัดการกับสิ่งนี้คือลองสำหรับค่าทั้งหมดที่เริ่มต้นด้วยจะลดลงจนกว่าจะพบวิธีแก้ปัญหาEexeee(n+k1)/21

คำถามของฉันคือ: มีวิธีที่มีประสิทธิภาพมากขึ้นเพื่อกำหนด ? eอีกวิธีหนึ่งมีการปรับเปลี่ยนระบบเชิงเส้นที่อนุญาตให้หนึ่งใช้ขอบเขตบนบนแทนค่าที่แน่นอน?e

โดยเฉพาะฉันต้องการใช้ตัวถอดรหัสนี้สำหรับรหัส Reed-Solomon และไม่ใช่อัลกอริทึมที่แตกต่างอย่างสิ้นเชิงตามเทคนิคอื่น ๆ


เพื่อตอบสนองต่อคำตอบของ DW นี่คือตัวอย่างการทำงานของฉัน ทุกอย่างเสร็จสิ้นแบบโมดูโล 7

plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]

ดังนั้นข้อผิดพลาดอยู่ในจุดที่สาม

เมื่อสมการพหุนามมีปัญหาe=2

bi(e0+e1x+e2x2)q0q1xq2x2q3x3q4x4=0

และการเสียบให้ระบบในรูปแบบเมทริกซ์:x=0,1,2,3,4

[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]

แถวสุดท้ายเป็นข้อ จำกัด ที่1 ใช้การกำจัดแบบเกาส์เราได้e2=1

[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]

และเลือก 1 สำหรับตัวแปรอิสระทั้งคู่ที่เราได้เวกเตอร์ของ

[2, 2, 1, 4, 1, 0, 1, 1]

ซึ่งแปลว่า

E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4

และไม่ได้แบ่งQโปรดทราบว่าปัจจัยเป็นEQQ(t+6)(t3+2t2+2t+3)mod7

สำหรับฉันได้คำตอบที่ดี:e=1

system is:    
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0] 
[0, 1, 0, 0, 0, 0, 1]

reduced system is:

[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]

solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0

โปรดทราบว่าในขณะที่ตัวอย่างโค้ดด้านบนสร้างขึ้นโดยรหัสที่ฉันเขียนตั้งแต่เริ่มแรก (โดยพื้นฐานแล้วเป็นสิ่งแรกที่ฉันลอง) แต่สามารถตรวจสอบวิธีแก้ไขได้ด้วยมือดังนั้นแม้ว่ารหัสของฉันจะเป็นรถก็ยังเป็นตัวอย่างที่ถูกต้อง ว่าการใช้งานe=2


@DW เวกเตอร์โซลูชันนั้นถูกต้อง เป็นจริง 1 * 2 + 1 * 1 + 4 * 1 (ขนาดของสารละลายเวกเตอร์เป็นหนึ่งเนื่องจากคอลัมน์สุดท้ายของเมทริกซ์ถูกปล่อยออกมา) การลาออกของฉันเป็นตัวพิมพ์ผิดใน writeup ที่นี่ แต่มันถูกต้องในการนำไปใช้ของฉัน คุณสามารถเห็นผลของมันตัวอย่างเช่นในแถวที่สองของระบบซึ่งใช้จุด [1, 0], และสามรายการแรกนั้นทั้งหมดเป็นศูนย์เพราะมันถูกคูณด้วย 0 ถ้าตัวอย่างของฉันไม่ชัดเจนฉันสามารถโพสต์ได้ รหัสของฉันบน GitHub ฉันคิดว่าโค้ดของฉันสะอาด แต่มันจะยุ่งกว่าเดิม bi
JeremyKun

คำตอบ:


3

ขั้นตอนเดียวกันใช้งานได้จริงในการแก้ไขจำนวนข้อผิดพลาดใด ๆ ขึ้นไปอีe

ความต้องการคือข้อผิดพลาดพหุนามจะต้องเป็นศูนย์ทุกจุดซึ่งมีข้อผิดพลาด ไม่มีอะไรบอกว่ามันจะต้องเป็นศูนย์ในจุดเหล่านั้นเท่านั้น คุณสามารถมีที่เป็นศูนย์ที่จุดอื่น ๆ ด้วยและที่ตกลงของตราบใดที่การศึกษาระดับปริญญาของมันคืออีE(x)aiE(x)e

ดังนั้นถ้าเป็นขอบเขตบนของจำนวนข้อผิดพลาดจะมีพหุนามมีคุณสมบัติที่ต้องการทั้งหมด (เช่นมีองศาที่แน่นอนและเป็นศูนย์ในทุกจุดที่มีข้อผิดพลาด) ตัวอย่างเช่นถ้ามีน้อยกว่าข้อผิดพลาดแล้วมีอยู่พหุนามว่าเป็นศูนย์ในทุกข้อผิดพลาดและเป็นศูนย์ที่จุดมากขึ้นไม่กี่คนที่ได้รับหมายเลขของศูนย์ถึงว่าอีeE(x)eeE(x)e

ในที่สุดทฤษฎีความถูกต้องบอกว่าถ้ามีพหุนามอยู่แล้วดังนั้นอัลกอริทึม Berlekamp-Welch จะสามารถค้นหาได้ ดังนั้นแม้ว่าจะมีน้อยกว่า ข้อผิดพลาดที่ขั้นตอนที่จะยังคงทำงานได้อย่างถูกต้องเพื่อแจ้ง(x) เมื่อคุณมีคุณสามารถระบุตำแหน่งของที่ปราศจากข้อผิดพลาดจากนั้นคุณสามารถถอดรหัสได้อย่างตรงไปตรงมาE(x)eE(x)E(x)ne


หากต้องการบันทึกผลลัพธ์ของการสนทนาเกี่ยวกับ "counterexample" ในคำถาม:

นั่นเป็นตัวอย่างที่ไม่ถูกต้อง ข้อบกพร่องในการคำนวณจำนวนข้อผิดพลาดที่คุณควรคาดหวังให้ Berlekamp-Welch สามารถแก้ไขได้ ระยะทางคือดังนั้นคุณควรคาดหวังว่ามันจะสามารถแก้ไขข้อผิดพลาดได้สูงสุด (ตามที่ Ran G. ชี้ให้เห็น) ใน counterexample คุณและดังนั้นดังนั้นคุณควรคาดหวังว่าขั้นตอนนี้จะสามารถที่จะผิดพลาดอย่างใดอย่างหนึ่งที่ถูกต้องคือ 1 ดังนั้นเมื่อคุณรันโพรซีเดอร์บนตัวอย่างที่มีไม่มีเหตุผลที่จะคาดว่าโพรซีเดอร์จะทำงานอย่างถูกต้องnk+1(nk)/2n=5k=3(nk)/2=1e=1e=2

ดังนั้น counterexample ไม่ใช่ตัวอย่าง counter จริงและมันไม่ขัดแย้งกับคำตอบของฉันด้านบน


1
@ JeremyKun ระยะทางคือดังนั้นรหัสสามารถแก้ไขข้อผิดพลาดได้ถึงใช่ไหม? nk+1(nk)/2
Ran G.

แม้ว่าหลักฐานจะหายไป แต่คำอธิบายในคำตอบนี้สมเหตุสมผลสำหรับฉัน การตั้งค่าศูนย์ใน "บอก" อัลกอริธึมที่ควรให้ละเว้นเมื่อทำการประมาณพหุนาม ดังนั้นตราบใดที่ชุดของศูนย์ในมีชุดของจุดที่เกิดข้อผิดพลาดการถอดรหัสควรทำงาน ในกรณีนี้ควรมีตัวแปรอิสระมากขึ้น (เพื่อตั้งค่าศูนย์อื่น ๆ ในลักษณะที่กำหนดเอง) E(x)E(x)
Ran G.

Ooooh นี่เป็นปัญหา ... ที่ฉันทำเรื่องยุ่ง ๆ กับซิงเกิล? ดังนั้นเพื่อตรวจสอบว่าถ้าฉันต้องตั้งค่าแนะนำข้อผิดพลาดเดียวและตั้งแล้วเราควรคาดหวังว่าทุกอย่างจะทำงาน ฉันจะลองตอนนี้ n=7e=2
JeremyKun

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