**الگوریتم برلیکمپ-مسی** (به انگلیسی: Berlekamp–Massey algorithm) الگوریتمی است که کوتاهترین ثبات تغییر بازخورد خطی (LFSR) را برای یک دنباله دودویی داده شده پیدا می‌کند. این الگوریتم همچنین کوچکترین چند جمله ای یک دنباله ی خطی بازگشتی در یک میدان دلخواه را پیدا می‌کند. الزام میدان به این معنی است که الگوریتم Berlekamp-Massey به همه عناصر غیر صفر نیاز دارد تا معکوس ضربی داشته باشند. ریدز و اسلون تعمیمی برای حلقه را ارائه می‌دهند.

الوین برلیکمپ یک الگوریتم برای رمزگشایی Bose–Chaudhuri–Hocquenghem (BCH) codes ابداع کرد.

جیمز مسی کاربرد آن در ثبات تغییر بازخورد خطی را یافت و الگوریتم را ساده‌سازی کرد. مسی این الگوریتم را الگوریتم سنتر LFSR نام گذاشت اما اکنون به عنوان الگوریتم برلیکمپ-مسی شناخته می‌شود

شرح الگوریتم
------------

الگوریتم Berlekamp-Massey جایگزینی برای رمزگشایی رید- سلیمان پترسون برای حل مجموعه معادلات خطی است. می‌توان آن را به عنوان یافتن ضرایب Λ *j* از چند جمله ای Λ (*x*) خلاصه کرد به طوری که برای همه موقعیت‌های *i* در یک جریان ورودی *S*:

{\displaystyle S\_{i+\nu }+\Lambda \_{1}S\_{i+\nu -1}+\cdots +\Lambda \_{\nu -1}S\_{i+1}+\Lambda \_{\nu }S\_{i}=0.}
در مثالهای کد زیر(*C* *(x* یک نمونه از(*Λ* (*x* است. خطا یاب چند جمله ای (*C* *(x* برای خطاهای *L* تعریف می‌شود:

{\displaystyle C(x)=C\_{L}x^{L}+C\_{L-1}x^{L-1}+\cdots +C\_{2}x^{2}+C\_{1}x+1}
یا معکوس شده:

{\displaystyle C(x)=1+C\_{1}x+C\_{2}x^{2}+\cdots +C\_{L-1}x^{L-1}+C\_{L}x^{L}.}
هدف این الگوریتم تعیین حداقل درجه *L* و(*C* *(x* است که منجر به این سندرم‌ها می‌شود

{\displaystyle S\_{n}+C\_{1}S\_{n-1}+\cdots +C\_{L}S\_{n-L}}
برابر با ۰:

{\displaystyle S\_{n}+C\_{1}S\_{n-1}+\cdots +C\_{L}S\_{n-L}=0,\qquad L\leq n\leq N-1.}
الگوریتم: (*C* *(x* در ابتدا ۱ می‌باشد، *L* تعداد خطاهای فرض شده‌است و در ابتدا صفر است. *N* تعداد کل سندرم‌هاست. *از n* به عنوان شمارندهٔ اصلی و برای شماره گذاری سندرمها از ۰ تا *N* -1 استفاده می‌شود. (*B* *(x* یک نسخه از آخرین(*C* *(x* است زیرا *L* به روز شده و برابر ۱ قرار گرفته‌است. *b* نسخه ای از آخرین اختلاف *d است* (در زیر توضیح داده شده‌است) از آنجا که *L* به روز شده و برابر ۱ قرار گرفته‌است. m تعداد شمارش شده از وقتی است که (*B* *(x و، L , B به روز شده و برابر ۱ شده‌اند.*

در هر بار اجرای الگوریتم، اختلاف d را محاسبه می‌شود*.* در اجرای *kام*:

{\displaystyle d\gets S\_{k}+C\_{1}S\_{k-1}+\cdots +C\_{L}S\_{k-L}.}
اگر *d* صفر باشد، الگوریتم فرض می‌کند که (*C* *(x* و *L* برای لحظه صحیح اند، *m* افزایش یافته و ادامه می‌یابد.

اگر *d* صفر نباشد، الگوریتم (*C* *(x* را تنظیم می‌کند تا در محاسبه مجدد *d* صفر شود:

{\displaystyle C(x)\gets C(x)-(d/b)x^{m}B(x).}
*x m*، مقدار (B*(x* را شیفت می‌دهد تا از سندرم‌های مربوط به *b* پیروی کند. اگر به روزرسانی قبلی *L* در تکرار *j* رخ داده باشد، *m* = *k* - *j* و یک اختلاف d مجدد محاسبه می‌شود:

{\displaystyle d\gets S\_{k}+C\_{1}S\_{k-1}+\cdots -(d/b)(S\_{j}+B\_{1}S\_{j-1}+\cdots ).}
این اختلاف مجدد محاسبه شده را به:

{\displaystyle d=d-(d/b)b=d-d=0.}
تغییر می‌دهد.

الگوریتم همچنین در صورت لزوم نیاز به افزایش *L* (تعداد خطاها) دارد. اگر *L* برابر با تعداد واقعی خطاها باشد، در طی فرایند تکرار، اختلافات قبل از اینکه *n* از ۲ بزرگتر یا برابر با ۲ شود، *L* صفر می‌شوند. در غیر این صورت *L* به روز شده و الگوریتم *B* (*x*)، *b را به روزرسانی کرده و* *L را* افزایش می‌دهد و *m* = ۱ را مجدداً تنظیم می‌کند. فرمول *L* = (*n* + 1 − *L*) , L *را* به تعدادی از سندرمهای موجود برای محاسبه اختلافات محدود می‌کند، و همچنین مواردی را که *L* بیشتر از ۱ افزایش می‌یابد را کنترل می‌کند.

نمونه کد
--------

الگوریتم از (Massey 1969) برای یک زمینه دلخواه: 

```
 polynomial(field K) s(x) = ... /\* coeffs are s\_j; output sequence as N-1 degree polynomial) \*/
 /\* connection polynomial \*/
 polynomial(field K) C(x) = 1; /\* coeffs are c\_j \*/
 polynomial(field K) B(x) = 1;
 int L = 0;
 int m = 1;
 field K b = 1;
 int n;

 /\* steps 2. and 6. \*/
 for (n = 0; n < N; n++) {
 /\* step 2. calculate discrepancy \*/
 field K d = s\_n + \Sigma\_{i=1}^L c\_i \* s\_{n-i};

 if (d == 0) {
 /\* step 3. discrepancy is zero; annihilation continues \*/
 m = m + 1;
 } else if (2 \* L <= n) {
 /\* step 5. \*/
 /\* temporary copy of C(x) \*/
 polynomial(field K) T(x) = C(x);

 C(x) = C(x) - d b^{-1} x^m B(x);
 L = n + 1 - L;
 B(x) = T(x);
 b = d;
 m = 1;
 } else {
 /\* step 4. \*/
 C(x) = C(x) - d b^{-1} x^m B(x);
 m = m + 1;
 }
 }
 return L;

```

الگوریتم برای زمینه باینری
--------------------------

الگوریتم Berlekamp- Massey زیر مخصوص میدان محدود دودویی F 2 (همچنین GF (2)) می‌باشد. عناصر زمینه "۰" و "۱" هستند. عملیات میدانی "+" و "-" معادل عملیات "XOR" هستند. عملگر ضرب '\*' عملیات منطقی AND می‌شود. عملگر تقسیم به عمل هویت کاهش می‌یابد (یعنی تقسیم میدان فقط برای تقسیم بر ۱ و x / 1 = x تعریف می‌شود).

1. Let {\displaystyle s\_{0},s\_{1},s\_{2}\cdots s\_{N-1}} be the bits of the stream.
2. Initialise two arrays b and c each of length N to be zeroes, except {\displaystyle b\_{0}\leftarrow 1,c\_{0}\leftarrow 1}
3. assign {\displaystyle L\leftarrow 0,m\leftarrow -1}.
4. **For** {\displaystyle n=0} **step** 1 **while** {\displaystyle n<N}:
	* Let discrepancy d be {\displaystyle s\_{n}\oplus c\_{1}s\_{n-1}\oplus c\_{2}s\_{n-2}\oplus \cdots \oplus c\_{L}s\_{n-L}}.
	* **if** {\displaystyle d=0}, **then** c is already a polynomial which annihilates the portion of the stream from n-L to n.
	* **else**:
		+ Let t be a copy of c.
		+ Set {\displaystyle c\_{n-m}\leftarrow c\_{n-m}\oplus b\_{0},c\_{n-m+1}\leftarrow c\_{n-m+1}\oplus b\_{1},\dots } up to {\displaystyle c\_{N-1}\leftarrow c\_{N-1}\oplus b\_{N-n+m-1}} (where {\displaystyle \oplus } is the Exclusive or operator).
		+ If {\displaystyle L\leq {\frac {n}{2}}}, set {\displaystyle L\leftarrow n+1-L}, set {\displaystyle m\leftarrow n}, and let {\displaystyle b\leftarrow t}; otherwise leave L, m and b alone.

در پایان الگوریتم ، L طول حداقل LFSR برای جریان است، و ما داریم:

{\displaystyle c\_{L}s\_{a}\oplus c\_{L-1}s\_{a+1}\oplus c\_{L-2}s\_{a+2}\oplus \cdots =0}

برای همه a .

جستارهای وابسته
---------------

* تصحیح خطای رید-سالامون

منابع
-----

1. ↑  (Reeds و Sloane 1985)
2. ↑  Reeds, J. A.; Sloane, N. J. A. (1985), "Shift-Register Synthesis (Modulo n)" (PDF), *SIAM Journal on Computing*, **14** (3): 505–513, doi:10.1137/0214038

پیوند به بیرون
--------------

* "Berlekamp-Massey algorithm", *Encyclopedia of Mathematics*, EMS Press, 2001 [1994]
* Berlekamp–Massey algorithm at PlanetMath.
* Weisstein, Eric W. "Berlekamp–Massey Algorithm". *MathWorld*.
* GF(2) implementation in Mathematica
* (به آلمانی) Applet Berlekamp–Massey algorithm
* Online GF(2) Berlekamp-Massey calculator