<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Polynomial_code</id>
	<title>Polynomial code - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Polynomial_code"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Polynomial_code&amp;action=history"/>
	<updated>2026-05-04T19:01:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Polynomial_code&amp;diff=6405139&amp;oldid=prev</id>
		<title>imported&gt;Onel5969: Disambiguating links to Code word (link changed to Code word (communication)) using DisamAssist.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Polynomial_code&amp;diff=6405139&amp;oldid=prev"/>
		<updated>2023-10-24T01:38:47Z</updated>

		<summary type="html">&lt;p&gt;Disambiguating links to &lt;a href=&quot;/wiki143/index.php?title=Code_word&quot; title=&quot;Code word&quot;&gt;Code word&lt;/a&gt; (link changed to &lt;a href=&quot;/wiki143/index.php?title=Code_word_(communication)&quot; title=&quot;Code word (communication)&quot;&gt;Code word (communication)&lt;/a&gt;) using &lt;a href=&quot;/wiki143/index.php?title=User:Qwertyytrewqqwerty/DisamAssist&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Qwertyytrewqqwerty/DisamAssist (page does not exist)&quot;&gt;DisamAssist&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;In [[coding theory]], a &amp;#039;&amp;#039;&amp;#039;polynomial code&amp;#039;&amp;#039;&amp;#039; is a type of [[linear code]] whose set of valid [[Code word (communication)|code words]] consists of those [[polynomials]] (usually of some fixed length) that are [[polynomial long division|divisible]] by a given fixed polynomial (of shorter length, called the &amp;#039;&amp;#039;generator polynomial&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Fix a [[finite field]] &amp;lt;math&amp;gt;GF(q)&amp;lt;/math&amp;gt;, whose elements we call &amp;#039;&amp;#039;symbols&amp;#039;&amp;#039;. For the purposes of constructing polynomial codes, we identify a string of &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; symbols &amp;lt;math&amp;gt;a_{n-1}\ldots a_0&amp;lt;/math&amp;gt; with the polynomial&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;a_{n-1}x^{n-1} + \cdots + a_1x + a_0.\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fix integers &amp;lt;math&amp;gt;m \leq n&amp;lt;/math&amp;gt; and let &amp;lt;math&amp;gt;g(x)&amp;lt;/math&amp;gt; be some fixed polynomial of degree &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;, called the &amp;#039;&amp;#039;generator polynomial&amp;#039;&amp;#039;. The &amp;#039;&amp;#039;polynomial code generated by &amp;lt;math&amp;gt;g(x)&amp;lt;/math&amp;gt;&amp;#039;&amp;#039; is the code whose code words are precisely the polynomials of degree less than &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; that are [[polynomial long division|divisible]] (without remainder) by &amp;lt;math&amp;gt;g(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Consider the polynomial code over &amp;lt;math&amp;gt;GF(2)=\{0,1\}&amp;lt;/math&amp;gt; with &amp;lt;math&amp;gt;n=5&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m=2&amp;lt;/math&amp;gt;, and generator polynomial &amp;lt;math&amp;gt;g(x)=x^2+x+1&amp;lt;/math&amp;gt;. This code consists of the following code words:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;0\cdot g(x),\quad 1\cdot g(x),\quad x\cdot g(x), \quad (x+1) \cdot g(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x^2 \cdot g(x),\quad (x^2+1)\cdot g(x),\quad (x^2+x)\cdot g(x), \quad (x^2+x+1) \cdot g(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or written explicitly:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;0,\quad x^2+x+1,\quad x^3+x^2+x,\quad x^3+2x^2+2x+1,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x^4+x^3+x^2,\quad x^4+x^3+2x^2+x+1,\quad x^4+2x^3+2x^2+x,\quad x^4+2x^3+3x^2+2x+1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the polynomial code is defined over the Binary Galois Field &amp;lt;math&amp;gt;GF(2)=\{0,1\}&amp;lt;/math&amp;gt;, polynomial elements are represented as a [[Modular arithmetic|modulo]]-2 sum and the final polynomials are:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;0,\quad x^2+x+1,\quad x^3+x^2+x,\quad x^3+1,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x^4+x^3+x^2,\quad x^4+x^3+x+1,\quad x^4+x,\quad x^4+x^2+1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalently, expressed as strings of binary digits, the codewords are:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;00000,\quad 00111,\quad 01110,\quad 01001,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;11100,\quad 11011,\quad 10010,\quad 10101.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This, as every polynomial code, is indeed a [[linear code]], i.e., linear combinations of code words are again code words. In a case like this where the field is GF(2), linear combinations are found by taking the XOR of the codewords expressed in binary form (e.g. 00111 XOR 10010 = 10101).&lt;br /&gt;
&lt;br /&gt;
== Encoding ==&lt;br /&gt;
&lt;br /&gt;
In a polynomial code over &amp;lt;math&amp;gt;GF(q)&amp;lt;/math&amp;gt; with code length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; and generator polynomial &amp;lt;math&amp;gt;g(x)&amp;lt;/math&amp;gt; of degree &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;, &lt;br /&gt;
there will be exactly &amp;lt;math&amp;gt;q^{n-m}&amp;lt;/math&amp;gt; code words. Indeed, by definition, &amp;lt;math&amp;gt;p(x)&amp;lt;/math&amp;gt; is a code word if and only if it is of the form &amp;lt;math&amp;gt;p(x) = g(x)\cdot q(x)&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;q(x)&amp;lt;/math&amp;gt; (the &amp;#039;&amp;#039;quotient&amp;#039;&amp;#039;) is of degree less than &amp;lt;math&amp;gt;n-m&amp;lt;/math&amp;gt;. Since there are &amp;lt;math&amp;gt;q^{n-m}&amp;lt;/math&amp;gt; such quotients available, there are the same number of possible code words.&lt;br /&gt;
Plain (unencoded) data words should therefore be of length &amp;lt;math&amp;gt;n-m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some authors, such as (Lidl &amp;amp; Pilz, 1999), only discuss the mapping &amp;lt;math&amp;gt;q(x) \mapsto g(x)\cdot q(x)&amp;lt;/math&amp;gt; as the assignment from data words to code words. However, this has the disadvantage that the data word does not appear as part of the code word. &lt;br /&gt;
&lt;br /&gt;
Instead, the following method is often used to create a [[systematic code]]: given a data word &amp;lt;math&amp;gt;d(x)&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n-m&amp;lt;/math&amp;gt;, first multiply &amp;lt;math&amp;gt;d(x)&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;x^m&amp;lt;/math&amp;gt;, which has the effect of shifting &amp;lt;math&amp;gt;d(x)&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; places to the left. In general, &amp;lt;math&amp;gt;x^md(x)&amp;lt;/math&amp;gt; will not be divisible by &amp;lt;math&amp;gt;g(x)&amp;lt;/math&amp;gt;, i.e., it will not be a valid code word. However, there is a unique code word that can be obtained by adjusting the rightmost &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; symbols of &amp;lt;math&amp;gt;x^md(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
To calculate it, compute the remainder of dividing &amp;lt;math&amp;gt;x^md(x)&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;g(x)&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x^md(x) = g(x)\cdot q(x) + r(x),\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;r(x)&amp;lt;/math&amp;gt; is of degree less than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. The code word corresponding to the data word &amp;lt;math&amp;gt;d(x)&amp;lt;/math&amp;gt; is then defined to be&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x) := x^md(x) - r(x),\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following properties:&lt;br /&gt;
# &amp;lt;math&amp;gt;p(x) = g(x)\cdot q(x)&amp;lt;/math&amp;gt;, which is divisible by &amp;lt;math&amp;gt;g(x)&amp;lt;/math&amp;gt;. In particular, &amp;lt;math&amp;gt;p(x)&amp;lt;/math&amp;gt; is a valid code word.&lt;br /&gt;
# Since &amp;lt;math&amp;gt;r(x)&amp;lt;/math&amp;gt; is of degree less than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;, the leftmost &amp;lt;math&amp;gt;n-m&amp;lt;/math&amp;gt; symbols of &amp;lt;math&amp;gt;p(x)&amp;lt;/math&amp;gt; agree with the  corresponding symbols of &amp;lt;math&amp;gt;x^md(x)&amp;lt;/math&amp;gt;. In other words, the first &amp;lt;math&amp;gt;n-m&amp;lt;/math&amp;gt; symbols of the code word are the same as the original data word. The remaining &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; symbols are called &amp;#039;&amp;#039;checksum digits&amp;#039;&amp;#039; or &amp;#039;&amp;#039;check bits&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
For the above code with &amp;lt;math&amp;gt;n=5&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m=2&amp;lt;/math&amp;gt;, and generator polynomial &amp;lt;math&amp;gt;g(x)=x^2+x+1&amp;lt;/math&amp;gt;, we obtain the following assignment from data words to codewords:&lt;br /&gt;
&lt;br /&gt;
* 000 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;000&amp;#039;&amp;#039;&amp;#039;00&lt;br /&gt;
* 001 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;001&amp;#039;&amp;#039;&amp;#039;11&lt;br /&gt;
* 010 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;010&amp;#039;&amp;#039;&amp;#039;01&lt;br /&gt;
* 011 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;011&amp;#039;&amp;#039;&amp;#039;10&lt;br /&gt;
* 100 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;100&amp;#039;&amp;#039;&amp;#039;10&lt;br /&gt;
* 101 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;101&amp;#039;&amp;#039;&amp;#039;01&lt;br /&gt;
* 110 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;110&amp;#039;&amp;#039;&amp;#039;11&lt;br /&gt;
* 111 {{mapsto}} &amp;#039;&amp;#039;&amp;#039;111&amp;#039;&amp;#039;&amp;#039;00&lt;br /&gt;
&lt;br /&gt;
== Decoding ==&lt;br /&gt;
&lt;br /&gt;
An erroneous message can be detected in a straightforward way through polynomial division by the generator polynomial resulting in a non-zero remainder.&lt;br /&gt;
&lt;br /&gt;
Assuming that the code word is free of errors, a systematic code can be decoded simply by stripping away the &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; checksum digits. &lt;br /&gt;
&lt;br /&gt;
If there are errors, then error correction should be performed before decoding. Efficient decoding algorithms exist for specific polynomial codes, such as [[BCH code]]s.&lt;br /&gt;
&lt;br /&gt;
== Properties of polynomial codes == &lt;br /&gt;
&lt;br /&gt;
As for all digital codes, the [[error detection and correction]] abilities of polynomial codes are determined by the minimum [[Hamming distance]] of the code. Since polynomial codes are linear codes, the minimum Hamming distance is equal to the minimum weight of any non-zero codeword. In the example above, the minimum Hamming distance is 2, since 01001 is a codeword, and there is no nonzero codeword with only one bit set.&lt;br /&gt;
&lt;br /&gt;
More specific properties of a polynomial code often depend on particular algebraic properties of its generator polynomial. Here are some examples of such properties:&lt;br /&gt;
&lt;br /&gt;
* A polynomial code is [[cyclic code|cyclic]] if and only if the generator polynomial divides &amp;lt;math&amp;gt;x^n-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
* If the generator polynomial is [[Primitive polynomial (field theory)|primitive]], then the resulting code has Hamming distance at least 3, provided that &amp;lt;math&amp;gt;n\leq 2^m-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
* In [[BCH code]]s, the generator polynomial is chosen to have specific roots in an extension field, in a way that achieves high Hamming distance.&lt;br /&gt;
&lt;br /&gt;
The algebraic nature of polynomial codes, with cleverly chosen generator polynomials, can also often be exploited to find efficient error correction algorithms. This is the case for [[BCH code]]s.&lt;br /&gt;
&lt;br /&gt;
== Specific families of polynomial codes ==&lt;br /&gt;
&lt;br /&gt;
* [[Cyclic code]]s &amp;amp;ndash; every cyclic code is also a polynomial code; a popular example is the [[cyclic redundancy check|CRC]] code.&lt;br /&gt;
* [[BCH code]]s &amp;amp;ndash; a family of cyclic codes with high Hamming distance and efficient algebraic error correction algorithms.&lt;br /&gt;
* [[Reed–Solomon code]]s &amp;amp;ndash; an important subset of BCH codes with particularly efficient structure.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* W.J. Gilbert and W.K. Nicholson: &amp;#039;&amp;#039;Modern Algebra with Applications&amp;#039;&amp;#039;, 2nd edition, Wiley, 2004.&lt;br /&gt;
* R. Lidl and G. Pilz. Applied Abstract Algebra, 2nd edition. Wiley, 1999.&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
[[Category:Coding theory]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Onel5969</name></author>
	</entry>
</feed>