리드 솔로몬 코드를 디코딩하기위한 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
위의 카운터 예제는 처음부터 작성한 코드에 의해 생성되었지만 (기본적으로 내가 시도한 첫 번째 것임) 솔루션이 손으로 유효한지 확인할 수 있으므로 코드가 버그가 있어도 여전히 주장에 대한 유효한 카운터 예제입니다 를 사용하는 것이 효과적입니다.