الگوریتم برلیکمپ-مسی

از testwiki
نسخهٔ تاریخ ۱۸ نوامبر ۲۰۲۴، ساعت ۲۱:۳۴ توسط imported>Alrhp (growthexperiments-addlink-summary-summary:2|0|0)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

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

الوین برلیکمپ یک الگوریتم برای کدگشایی کد Bose–Chaudhuri–Hocquenghem (BCH) پدید آورد. جیمز مسی کاربرد آن در ثبات تغییر بازخورد خطی را یافت و الگوریتم را ساده‌سازی کرد. مسی این الگوریتم را الگوریتم سنتر LFSR نام گذاشت اما اکنون به عنوان الگوریتم برلکمپ‌مسی شناخته می‌شود.

شرح الگوریتم

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

Si+ν+Λ1Si+ν1++Λν1Si+1+ΛνSi=0.

در مثالهای کد زیر(C (x یک نمونه از(Λ (x است. خطا یاب چند جمله ای (C (x برای خطاهای L تعریف می‌شود:

C(x)=CLxL+CL1xL1++C2x2+C1x+1

یا معکوس شده:

C(x)=1+C1x+C2x2++CL1xL1+CLxL.

هدف این الگوریتم تعیین حداقل درجه L و(C (x است که منجر به این سندرم‌ها می‌شود

Sn+C1Sn1++CLSnL

برابر با ۰:

Sn+C1Sn1++CLSnL=0,LnN1.

الگوریتم: (C (x در ابتدا ۱ می‌باشد، L تعداد خطاهای فرض شده‌است و در ابتدا صفر است. N تعداد کل سندرم‌هاست. از n به عنوان شمارندهٔ اصلی و برای شماره گذاری سندرمها از ۰ تا N -1 استفاده می‌شود. (B (x یک نسخه از آخرین(C (x است زیرا L به روز شده و برابر ۱ قرار گرفته‌است. b نسخه ای از آخرین اختلاف d است (در زیر توضیح داده شده‌است) از آنجا که L به روز شده و برابر ۱ قرار گرفته‌است. m تعداد شمارش شده از وقتی است که (B (x و، L , B به روز شده و برابر ۱ شده‌اند.

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

dSk+C1Sk1++CLSkL.

اگر d صفر باشد، الگوریتم فرض می‌کند که (C (x و L برای لحظه صحیح اند، m افزایش یافته و ادامه می‌یابد.

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

C(x)C(x)(d/b)xmB(x).

x m، مقدار (B(x را شیفت می‌دهد تا از سندرم‌های مربوط به b پیروی کند. اگر به روزرسانی قبلی L در تکرار j رخ داده باشد، m = k - j و یک اختلاف d مجدد محاسبه می‌شود:

dSk+C1Sk1+(d/b)(Sj+B1Sj1+).

این اختلاف مجدد محاسبه شده را به:

d=d(d/b)b=dd=0.

تغییر می‌دهد.

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

نمونه کد

الگوریتم از الگو:Harvard citation text برای یک زمینه دلخواه:

  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;

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

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

  1. Let s0,s1,s2sN1 be the bits of the stream.
  2. Initialise two arrays b and c each of length N to be zeroes, except b01,c01
  3. assign L0,m1.
  4. For n=0 step 1 while n<N:
    • Let discrepancy d be snc1sn1c2sn2cLsnL.
    • if d=0, then c is already a polynomial which annihilates the portion of the stream from nL to n.
    • else:
      • Let t be a copy of c.
      • Set cnmcnmb0,cnm+1cnm+1b1, up to cN1cN1bNn+m1 (where is the Exclusive or operator).
      • If Ln2, set Ln+1L, set mn, and let bt; otherwise leave L, m and b alone.

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

cLsacL1sa+1cL2sa+2=0

برای همه a .

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

منابع

الگو:پانویس

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