В алгоритмі Welch-Berlekamp для декодування кодів Рід-Соломона надається перелік точок представляють повідомлення з помилками на у невідомих місцях (і задано алгоритму). Вихід - це поліном, що проходить через усі задані точки, за винятком тих, в яких виникли помилки.
Метод передбачає розв’язання системи лінійних рівнянь виду
для всіх де має ступінь а має ступінь не більше . Змінні коефіцієнти і .
Щоб забезпечити, що має ступінь зазвичай додається обмеження, що коефіцієнт дорівнює 1 до лінійної системи, наведеної вище. Однак на практиці не обов’язково знати . Один з неефективних (але все-таки багаточленних) способів вирішити це - спробувати для всіх значень, починаючи з знижуючись, поки не буде знайдено рішення.
Моє запитання: чи існує більш ефективний спосіб визначення ? Як варіант, чи є модифікація лінійної системи, яка дозволяє використовувати верхню межу на замість точного значення?
Зокрема, я хочу використовувати цей специфічний декодер для кодів Рід-Соломона, а не зовсім інший алгоритм, заснований на інших методах.
У відповідь на відповідь 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]]
Отже помилка в третьому пункті.
Коли поліномічне рівняння, про яке йдеться, дорівнює
А підключення дає системі в матричному вигляді:
[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, 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
І поділяє . Зауважимо, що коефіцієнти як
Для я отримую вдале рішення:
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
Зауважте, що хоча контрприклад вище генерувався кодом, який я написав з нуля (це було в основному першим, що я спробував), можна перевірити, чи рішення дійсні вручну, тому навіть якщо мій код баггі, він все-таки є дійсним контрприкладом до претензії що використання працює.