https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Block_Wiedemann_algorithm Block Wiedemann algorithm - Revision history 2025-05-30T07:23:29Z Revision history for this page on the wiki MediaWiki 1.45.0-wmf.3 https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=1170214599&oldid=prev OAbot: Open access bot: arxiv added to citation with #oabot. 2023-08-13T19:37:53Z <p><a href="/wiki/Wikipedia:OABOT" class="mw-redirect" title="Wikipedia:OABOT">Open access bot</a>: arxiv added to citation with #oabot.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 19:37, 13 August 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 20:</td> <td colspan="2" class="diff-lineno">Line 20:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;div class="center"&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;div class="center"&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;math&gt;p \geq \begin{cases} 1/64, &amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp; \text{if }b \geq k+2\text{ and } q=2 \\ </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;math&gt;p \geq \begin{cases} 1/64, &amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp; \text{if }b \geq k+2\text{ and } q=2 \\ </div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp; \text{if }b \geq k+1\text{ and }q &gt; 2\end{cases}&lt;/math&gt;.&lt;ref&gt;{{Cite journal |last=Harrison |first=Gavin |last2=Johnson |first2=Jeremy |last3=Saunders |first3=B. David |date=2022-01-01 |title=Probabilistic analysis of block Wiedemann for leading invariant factors |url=https://www.sciencedirect.com/science/article/pii/S0747717121000419 |journal=Journal of Symbolic Computation |language=en |volume=108 |pages=98–116 |doi=10.1016/j.jsc.2021.06.005 |issn=0747-7171}}&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp; \text{if }b \geq k+1\text{ and }q &gt; 2\end{cases}&lt;/math&gt;.&lt;ref&gt;{{Cite journal |last=Harrison |first=Gavin |last2=Johnson |first2=Jeremy |last3=Saunders |first3=B. David |date=2022-01-01 |title=Probabilistic analysis of block Wiedemann for leading invariant factors |url=https://www.sciencedirect.com/science/article/pii/S0747717121000419 |journal=Journal of Symbolic Computation |language=en |volume=108 |pages=98–116 |doi=10.1016/j.jsc.2021.06.005 |issn=0747-7171<ins style="font-weight: bold; text-decoration: none;">|arxiv=1803.03864 </ins>}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/div&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/div&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> OAbot https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=1142846308&oldid=prev GünniX: Reflist 2023-03-04T18:04:10Z <p>Reflist</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 18:04, 4 March 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 5:</td> <td colspan="2" class="diff-lineno">Line 5:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Let &lt;math&gt;M&lt;/math&gt; be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length &lt;math&gt;n&lt;/math&gt;, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix &lt;math&gt;M&lt;/math&gt;; let &lt;math&gt;y&lt;/math&gt; be any other vector of length &lt;math&gt;n&lt;/math&gt;, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Let &lt;math&gt;M&lt;/math&gt; be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length &lt;math&gt;n&lt;/math&gt;, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix &lt;math&gt;M&lt;/math&gt;; let &lt;math&gt;y&lt;/math&gt; be any other vector of length &lt;math&gt;n&lt;/math&gt;, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>We know that the matrix &lt;math&gt;M&lt;/math&gt; has a [[<del style="font-weight: bold; text-decoration: none;">Minimal_polynomial_</del>(<del style="font-weight: bold; text-decoration: none;">linear_algebra</del>)|minimal polynomial]]; by the [[Cayley–Hamilton theorem]] we know that this polynomial is of degree (which we will call &lt;math&gt;n_0&lt;/math&gt;) no more than &lt;math&gt;n&lt;/math&gt;. Say &lt;math&gt;\sum_{r=0}^{n_0} p_rM^r = 0&lt;/math&gt;. Then &lt;math&gt;\sum_{r=0}^{n_0} y \cdot (p_r (M^r x)) = 0&lt;/math&gt;; so the minimal polynomial of the matrix annihilates the sequence &lt;math&gt;S&lt;/math&gt; and hence &lt;math&gt;S_y&lt;/math&gt;.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>We know that the matrix &lt;math&gt;M&lt;/math&gt; has a [[<ins style="font-weight: bold; text-decoration: none;">Minimal polynomial </ins>(<ins style="font-weight: bold; text-decoration: none;">linear algebra</ins>)|minimal polynomial]]; by the [[Cayley–Hamilton theorem]] we know that this polynomial is of degree (which we will call &lt;math&gt;n_0&lt;/math&gt;) no more than &lt;math&gt;n&lt;/math&gt;. Say &lt;math&gt;\sum_{r=0}^{n_0} p_rM^r = 0&lt;/math&gt;. Then &lt;math&gt;\sum_{r=0}^{n_0} y \cdot (p_r (M^r x)) = 0&lt;/math&gt;; so the minimal polynomial of the matrix annihilates the sequence &lt;math&gt;S&lt;/math&gt; and hence &lt;math&gt;S_y&lt;/math&gt;.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>But the [[Berlekamp–Massey algorithm]] allows us to calculate relatively efficiently some sequence &lt;math&gt;q_0 \ldots q_L&lt;/math&gt; with &lt;math&gt;\sum_{i=0}^L q_i S_y[{i+r}]=0 \;\forall \; r&lt;/math&gt;. Our hope is that this sequence, which by construction annihilates &lt;math&gt;y \cdot S&lt;/math&gt;, actually annihilates &lt;math&gt;S&lt;/math&gt;; so we have &lt;math&gt;\sum_{i=0}^L q_i M^i x = 0&lt;/math&gt;. We then take advantage of the initial definition of &lt;math&gt;x&lt;/math&gt; to say &lt;math&gt;M \sum_{i=0}^L q_i M^i x_{\mathrm {base}} = 0&lt;/math&gt; and so &lt;math&gt;\sum_{i=0}^L q_i M^i x_{\mathrm {base}}&lt;/math&gt; is a hopefully non-zero kernel vector of &lt;math&gt;M&lt;/math&gt;.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>But the [[Berlekamp–Massey algorithm]] allows us to calculate relatively efficiently some sequence &lt;math&gt;q_0 \ldots q_L&lt;/math&gt; with &lt;math&gt;\sum_{i=0}^L q_i S_y[{i+r}]=0 \;\forall \; r&lt;/math&gt;. Our hope is that this sequence, which by construction annihilates &lt;math&gt;y \cdot S&lt;/math&gt;, actually annihilates &lt;math&gt;S&lt;/math&gt;; so we have &lt;math&gt;\sum_{i=0}^L q_i M^i x = 0&lt;/math&gt;. We then take advantage of the initial definition of &lt;math&gt;x&lt;/math&gt; to say &lt;math&gt;M \sum_{i=0}^L q_i M^i x_{\mathrm {base}} = 0&lt;/math&gt; and so &lt;math&gt;\sum_{i=0}^L q_i M^i x_{\mathrm {base}}&lt;/math&gt; is a hopefully non-zero kernel vector of &lt;math&gt;M&lt;/math&gt;.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 16:</td> <td colspan="2" class="diff-lineno">Line 16:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Invariant Factor Calculation ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Invariant Factor Calculation ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The block Wiedemann algorithm can be used to calculate the leading [[<del style="font-weight: bold; text-decoration: none;">Invariant</del> factor<del style="font-weight: bold; text-decoration: none;">|invariant factors</del>]] of the matrix, ie, the largest blocks of the [[Frobenius normal form]]. Given &lt;math&gt;M \in F_q^{n \times n}&lt;/math&gt; and &lt;math&gt;U, V \in F_q^{b \times n}&lt;/math&gt; where &lt;math&gt;F_q&lt;/math&gt; is a finite field of size &lt;math&gt;q&lt;/math&gt;, the probability &lt;math&gt;p&lt;/math&gt; that the leading &lt;math&gt;k &lt; b&lt;/math&gt; invariant factors of &lt;math&gt;M&lt;/math&gt; are preserved in &lt;math&gt;\sum_{i=0}^{2n-1}UM^iV^T x^i&lt;/math&gt; is</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The block Wiedemann algorithm can be used to calculate the leading [[<ins style="font-weight: bold; text-decoration: none;">invariant</ins> factor]]<ins style="font-weight: bold; text-decoration: none;">s</ins> of the matrix, ie, the largest blocks of the [[Frobenius normal form]]. Given &lt;math&gt;M \in F_q^{n \times n}&lt;/math&gt; and &lt;math&gt;U, V \in F_q^{b \times n}&lt;/math&gt; where &lt;math&gt;F_q&lt;/math&gt; is a finite field of size &lt;math&gt;q&lt;/math&gt;, the probability &lt;math&gt;p&lt;/math&gt; that the leading &lt;math&gt;k &lt; b&lt;/math&gt; invariant factors of &lt;math&gt;M&lt;/math&gt; are preserved in &lt;math&gt;\sum_{i=0}^{2n-1}UM^iV^T x^i&lt;/math&gt; is</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;div class="center"&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;div class="center"&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;math&gt;p \geq \begin{cases} 1/64, &amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp; \text{if }b \geq k+2\text{ and } q=2 \\ </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;math&gt;p \geq \begin{cases} 1/64, &amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp; \text{if }b \geq k+2\text{ and } q=2 \\ </div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp; \text{if }b \geq k+1\text{ and }q &gt; 2\end{cases}&lt;/math&gt;<del style="font-weight: bold; text-decoration: none;"> </del>&lt;ref&gt;{{Cite journal |last=Harrison |first=Gavin |last2=Johnson |first2=Jeremy |last3=Saunders |first3=B. David |date=2022-01-01 |title=Probabilistic analysis of block Wiedemann for leading invariant factors |url=https://www.sciencedirect.com/science/article/pii/S0747717121000419 |journal=Journal of Symbolic Computation |language=en |volume=108 |pages=98–116 |doi=10.1016/j.jsc.2021.06.005 |issn=0747-7171}}&lt;/ref&gt;<del style="font-weight: bold; text-decoration: none;">.</del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp; \text{if }b \geq k+1\text{ and }q &gt; 2\end{cases}&lt;/math&gt;<ins style="font-weight: bold; text-decoration: none;">.</ins>&lt;ref&gt;{{Cite journal |last=Harrison |first=Gavin |last2=Johnson |first2=Jeremy |last3=Saunders |first3=B. David |date=2022-01-01 |title=Probabilistic analysis of block Wiedemann for leading invariant factors |url=https://www.sciencedirect.com/science/article/pii/S0747717121000419 |journal=Journal of Symbolic Computation |language=en |volume=108 |pages=98–116 |doi=10.1016/j.jsc.2021.06.005 |issn=0747-7171}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/div&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/div&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{Reflist}}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Wiedemann, D., "Solving sparse linear equations over finite fields," IEEE Trans. Inf. Theory IT-32, pp. 54-62, 1986.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">* </ins>Wiedemann, D., "Solving sparse linear equations over finite fields," IEEE Trans. Inf. Theory IT-32, pp. 54-62, 1986.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>D. Coppersmith, Solving homogeneous linear equations over GF(2) via block Wiedemann algorithm, Math. Comp. 62 (1994), 333-350.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">* </ins>D. Coppersmith, Solving homogeneous linear equations over GF(2) via block Wiedemann algorithm, Math. Comp. 62 (1994), 333-350.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Villard's 1997 research report '[http://citeseer.ist.psu.edu/cache/papers/cs/4204/ftp:zSzzSzftp.imag.frzSzpubzSzCALCUL_FORMELzSzRAPPORTzSz1997zSzRR975.pdf A study of Coppersmith's block Wiedemann algorithm using matrix polynomials]' (the cover material is in French but the content in English) is a reasonable description.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">* </ins>Villard's 1997 research report '[http://citeseer.ist.psu.edu/cache/papers/cs/4204/ftp:zSzzSzftp.imag.frzSzpubzSzCALCUL_FORMELzSzRAPPORTzSz1997zSzRR975.pdf A study of Coppersmith's block Wiedemann algorithm using matrix polynomials]' (the cover material is in French but the content in English) is a reasonable description.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Thomé's paper '[http://hal.archives-ouvertes.fr/docs/00/10/34/17/PDF/jsc.pdf Subquadratic computation of vector generating polynomials and improvement of the block Wiedemann algorithm]' uses a more sophisticated [[Fast Fourier transform|FFT]]-based algorithm for computing the vector generating polynomials, and describes a practical implementation with ''i''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;''j''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;4 used to compute a kernel vector of a 484603×484603 matrix of entries modulo 2&lt;sup&gt;607&lt;/sup&gt;−1, and hence to compute discrete logarithms in the field ''GF''(2&lt;sup&gt;607&lt;/sup&gt;).</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">* </ins>Thomé's paper '[http://hal.archives-ouvertes.fr/docs/00/10/34/17/PDF/jsc.pdf Subquadratic computation of vector generating polynomials and improvement of the block Wiedemann algorithm]' uses a more sophisticated [[Fast Fourier transform|FFT]]-based algorithm for computing the vector generating polynomials, and describes a practical implementation with ''i''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;''j''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;4 used to compute a kernel vector of a 484603×484603 matrix of entries modulo 2&lt;sup&gt;607&lt;/sup&gt;−1, and hence to compute discrete logarithms in the field ''GF''(2&lt;sup&gt;607&lt;/sup&gt;).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Numerical linear algebra}}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Numerical linear algebra}}</div></td> </tr> </table> GünniX https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=1142304512&oldid=prev Bruce1ee: fixed lint errors – obsolete center HTML tags 2023-03-01T17:36:41Z <p>fixed <a href="/wiki/Special:LintErrors" title="Special:LintErrors">lint errors</a> – obsolete center HTML tags</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 17:36, 1 March 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 18:</td> <td colspan="2" class="diff-lineno">Line 18:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The block Wiedemann algorithm can be used to calculate the leading [[Invariant factor|invariant factors]] of the matrix, ie, the largest blocks of the [[Frobenius normal form]]. Given &lt;math&gt;M \in F_q^{n \times n}&lt;/math&gt; and &lt;math&gt;U, V \in F_q^{b \times n}&lt;/math&gt; where &lt;math&gt;F_q&lt;/math&gt; is a finite field of size &lt;math&gt;q&lt;/math&gt;, the probability &lt;math&gt;p&lt;/math&gt; that the leading &lt;math&gt;k &lt; b&lt;/math&gt; invariant factors of &lt;math&gt;M&lt;/math&gt; are preserved in &lt;math&gt;\sum_{i=0}^{2n-1}UM^iV^T x^i&lt;/math&gt; is</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The block Wiedemann algorithm can be used to calculate the leading [[Invariant factor|invariant factors]] of the matrix, ie, the largest blocks of the [[Frobenius normal form]]. Given &lt;math&gt;M \in F_q^{n \times n}&lt;/math&gt; and &lt;math&gt;U, V \in F_q^{b \times n}&lt;/math&gt; where &lt;math&gt;F_q&lt;/math&gt; is a finite field of size &lt;math&gt;q&lt;/math&gt;, the probability &lt;math&gt;p&lt;/math&gt; that the leading &lt;math&gt;k &lt; b&lt;/math&gt; invariant factors of &lt;math&gt;M&lt;/math&gt; are preserved in &lt;math&gt;\sum_{i=0}^{2n-1}UM^iV^T x^i&lt;/math&gt; is</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>&lt;center&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>&lt;<ins style="font-weight: bold; text-decoration: none;">div class="</ins>center<ins style="font-weight: bold; text-decoration: none;">"</ins>&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;math&gt;p \geq \begin{cases} 1/64, &amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp; \text{if }b \geq k+2\text{ and } q=2 \\ </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;math&gt;p \geq \begin{cases} 1/64, &amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp; \text{if }b \geq k+2\text{ and } q=2 \\ </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp; \text{if }b \geq k+1\text{ and }q &gt; 2\end{cases}&lt;/math&gt; &lt;ref&gt;{{Cite journal |last=Harrison |first=Gavin |last2=Johnson |first2=Jeremy |last3=Saunders |first3=B. David |date=2022-01-01 |title=Probabilistic analysis of block Wiedemann for leading invariant factors |url=https://www.sciencedirect.com/science/article/pii/S0747717121000419 |journal=Journal of Symbolic Computation |language=en |volume=108 |pages=98–116 |doi=10.1016/j.jsc.2021.06.005 |issn=0747-7171}}&lt;/ref&gt;.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp; \text{if }b \geq k+1\text{ and }q &gt; 2\end{cases}&lt;/math&gt; &lt;ref&gt;{{Cite journal |last=Harrison |first=Gavin |last2=Johnson |first2=Jeremy |last3=Saunders |first3=B. David |date=2022-01-01 |title=Probabilistic analysis of block Wiedemann for leading invariant factors |url=https://www.sciencedirect.com/science/article/pii/S0747717121000419 |journal=Journal of Symbolic Computation |language=en |volume=108 |pages=98–116 |doi=10.1016/j.jsc.2021.06.005 |issn=0747-7171}}&lt;/ref&gt;.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>&lt;/<del style="font-weight: bold; text-decoration: none;">center</del>&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>&lt;/<ins style="font-weight: bold; text-decoration: none;">div</ins>&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> </tr> </table> Bruce1ee https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=1142301054&oldid=prev 198.52.235.3: Added probability bound for leading invariant factor calculation using the block Wiedemann algorithm. 2023-03-01T17:11:59Z <p>Added probability bound for leading invariant factor calculation using the block Wiedemann algorithm.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 17:11, 1 March 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 14:</td> <td colspan="2" class="diff-lineno">Line 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>It turns out, by a generalization of the Berlekamp–Massey algorithm to provide a sequence of small matrices, that you can take the sequence produced for a large number of vectors and generate a kernel vector of the original large matrix. You need to compute &lt;math&gt; y_i \cdot M^t x_j&lt;/math&gt; for some &lt;math&gt;i = 0 \ldots i_\max, j=0 \ldots j_\max, t = 0 \ldots t_\max&lt;/math&gt; where &lt;math&gt;i_\max, j_\max, t_\max&lt;/math&gt; need to satisfy &lt;math&gt;t_\max &gt; \frac{d}{i_\max} + \frac{d}{j_\max} + O(1)&lt;/math&gt; and &lt;math&gt;y_i&lt;/math&gt; are a series of vectors of length n; but in practice you can take &lt;math&gt;y_i&lt;/math&gt; as a sequence of unit vectors and simply write out the first &lt;math&gt;i_\max&lt;/math&gt; entries in your vectors at each time ''t''.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>It turns out, by a generalization of the Berlekamp–Massey algorithm to provide a sequence of small matrices, that you can take the sequence produced for a large number of vectors and generate a kernel vector of the original large matrix. You need to compute &lt;math&gt; y_i \cdot M^t x_j&lt;/math&gt; for some &lt;math&gt;i = 0 \ldots i_\max, j=0 \ldots j_\max, t = 0 \ldots t_\max&lt;/math&gt; where &lt;math&gt;i_\max, j_\max, t_\max&lt;/math&gt; need to satisfy &lt;math&gt;t_\max &gt; \frac{d}{i_\max} + \frac{d}{j_\max} + O(1)&lt;/math&gt; and &lt;math&gt;y_i&lt;/math&gt; are a series of vectors of length n; but in practice you can take &lt;math&gt;y_i&lt;/math&gt; as a sequence of unit vectors and simply write out the first &lt;math&gt;i_\max&lt;/math&gt; entries in your vectors at each time ''t''.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== Invariant Factor Calculation ==</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The block Wiedemann algorithm can be used to calculate the leading [[Invariant factor|invariant factors]] of the matrix, ie, the largest blocks of the [[Frobenius normal form]]. Given &lt;math&gt;M \in F_q^{n \times n}&lt;/math&gt; and &lt;math&gt;U, V \in F_q^{b \times n}&lt;/math&gt; where &lt;math&gt;F_q&lt;/math&gt; is a finite field of size &lt;math&gt;q&lt;/math&gt;, the probability &lt;math&gt;p&lt;/math&gt; that the leading &lt;math&gt;k &lt; b&lt;/math&gt; invariant factors of &lt;math&gt;M&lt;/math&gt; are preserved in &lt;math&gt;\sum_{i=0}^{2n-1}UM^iV^T x^i&lt;/math&gt; is</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>&lt;center&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>&lt;math&gt;p \geq \begin{cases} 1/64, &amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp; \text{if }b \geq k+2\text{ and } q=2 \\ </div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp; \text{if }b \geq k+1\text{ and }q &gt; 2\end{cases}&lt;/math&gt; &lt;ref&gt;{{Cite journal |last=Harrison |first=Gavin |last2=Johnson |first2=Jeremy |last3=Saunders |first3=B. David |date=2022-01-01 |title=Probabilistic analysis of block Wiedemann for leading invariant factors |url=https://www.sciencedirect.com/science/article/pii/S0747717121000419 |journal=Journal of Symbolic Computation |language=en |volume=108 |pages=98–116 |doi=10.1016/j.jsc.2021.06.005 |issn=0747-7171}}&lt;/ref&gt;.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>&lt;/center&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> </tr> </table> 198.52.235.3 https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=1091944571&oldid=prev AlexanderJHabib: I did not know that the British spelling for generalization was so different. Change it back if you like. No harm meant. 2022-06-07T09:36:12Z <p>I did not know that the British spelling for generalization was so different. Change it back if you like. No harm meant.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 09:36, 7 June 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The '''block Wiedemann algorithm''' for computing [[kernel (linear algebra)|kernel]] [[vector space|vectors]] of a [[matrix (mathematics)|matrix]] over a [[finite field]] is a <del style="font-weight: bold; text-decoration: none;">generalisation</del> by [[Don Coppersmith]] of an algorithm due to Doug Wiedemann.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The '''block Wiedemann algorithm''' for computing [[kernel (linear algebra)|kernel]] [[vector space|vectors]] of a [[matrix (mathematics)|matrix]] over a [[finite field]] is a <ins style="font-weight: bold; text-decoration: none;">generalization</ins> by [[Don Coppersmith]] of an algorithm due to Doug Wiedemann.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Wiedemann's algorithm ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Wiedemann's algorithm ==</div></td> </tr> </table> AlexanderJHabib https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=1083927740&oldid=prev Ciphergoth: wikilink the lede 2022-04-21T16:17:33Z <p>wikilink the lede</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:17, 21 April 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The '''block Wiedemann algorithm''' for computing kernel vectors of a [[matrix (mathematics)|matrix]] over a finite field is a generalisation by [[Don Coppersmith]] of an algorithm due to Doug Wiedemann.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The '''block Wiedemann algorithm''' for computing <ins style="font-weight: bold; text-decoration: none;">[[</ins>kernel <ins style="font-weight: bold; text-decoration: none;">(linear algebra)|kernel]] [[vector space|</ins>vectors<ins style="font-weight: bold; text-decoration: none;">]]</ins> of a [[matrix (mathematics)|matrix]] over a <ins style="font-weight: bold; text-decoration: none;">[[</ins>finite field<ins style="font-weight: bold; text-decoration: none;">]]</ins> is a generalisation by [[Don Coppersmith]] of an algorithm due to Doug Wiedemann.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Wiedemann's algorithm ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Wiedemann's algorithm ==</div></td> </tr> </table> Ciphergoth https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=1022697230&oldid=prev 172.88.126.150: Algorithm and modification to it were wrongly named and attributed. Also I included references to the original papers. 2021-05-12T00:06:53Z <p>Algorithm and modification to it were wrongly named and attributed. Also I included references to the original papers.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 00:06, 12 May 2021</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The '''block Wiedemann algorithm''' for computing kernel vectors of a [[matrix (mathematics)|matrix]] over a finite field is a generalisation of an algorithm due to <del style="font-weight: bold; text-decoration: none;">[[Don</del> <del style="font-weight: bold; text-decoration: none;">Coppersmith]]</del>.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The '''block Wiedemann algorithm''' for computing kernel vectors of a [[matrix (mathematics)|matrix]] over a finite field is a generalisation<ins style="font-weight: bold; text-decoration: none;"> by [[Don Coppersmith]]</ins> of an algorithm due to <ins style="font-weight: bold; text-decoration: none;">Doug</ins> <ins style="font-weight: bold; text-decoration: none;">Wiedemann</ins>.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>== <del style="font-weight: bold; text-decoration: none;">Coppersmith</del>'s algorithm ==</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== <ins style="font-weight: bold; text-decoration: none;">Wiedemann</ins>'s algorithm ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Let &lt;math&gt;M&lt;/math&gt; be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length &lt;math&gt;n&lt;/math&gt;, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix &lt;math&gt;M&lt;/math&gt;; let &lt;math&gt;y&lt;/math&gt; be any other vector of length &lt;math&gt;n&lt;/math&gt;, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Let &lt;math&gt;M&lt;/math&gt; be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length &lt;math&gt;n&lt;/math&gt;, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix &lt;math&gt;M&lt;/math&gt;; let &lt;math&gt;y&lt;/math&gt; be any other vector of length &lt;math&gt;n&lt;/math&gt;, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 9:</td> <td colspan="2" class="diff-lineno">Line 9:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>But the [[Berlekamp–Massey algorithm]] allows us to calculate relatively efficiently some sequence &lt;math&gt;q_0 \ldots q_L&lt;/math&gt; with &lt;math&gt;\sum_{i=0}^L q_i S_y[{i+r}]=0 \;\forall \; r&lt;/math&gt;. Our hope is that this sequence, which by construction annihilates &lt;math&gt;y \cdot S&lt;/math&gt;, actually annihilates &lt;math&gt;S&lt;/math&gt;; so we have &lt;math&gt;\sum_{i=0}^L q_i M^i x = 0&lt;/math&gt;. We then take advantage of the initial definition of &lt;math&gt;x&lt;/math&gt; to say &lt;math&gt;M \sum_{i=0}^L q_i M^i x_{\mathrm {base}} = 0&lt;/math&gt; and so &lt;math&gt;\sum_{i=0}^L q_i M^i x_{\mathrm {base}}&lt;/math&gt; is a hopefully non-zero kernel vector of &lt;math&gt;M&lt;/math&gt;.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>But the [[Berlekamp–Massey algorithm]] allows us to calculate relatively efficiently some sequence &lt;math&gt;q_0 \ldots q_L&lt;/math&gt; with &lt;math&gt;\sum_{i=0}^L q_i S_y[{i+r}]=0 \;\forall \; r&lt;/math&gt;. Our hope is that this sequence, which by construction annihilates &lt;math&gt;y \cdot S&lt;/math&gt;, actually annihilates &lt;math&gt;S&lt;/math&gt;; so we have &lt;math&gt;\sum_{i=0}^L q_i M^i x = 0&lt;/math&gt;. We then take advantage of the initial definition of &lt;math&gt;x&lt;/math&gt; to say &lt;math&gt;M \sum_{i=0}^L q_i M^i x_{\mathrm {base}} = 0&lt;/math&gt; and so &lt;math&gt;\sum_{i=0}^L q_i M^i x_{\mathrm {base}}&lt;/math&gt; is a hopefully non-zero kernel vector of &lt;math&gt;M&lt;/math&gt;.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>== The block Wiedemann algorithm ==</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== The block Wiedemann<ins style="font-weight: bold; text-decoration: none;"> (or Coppersmith-Wiedemann)</ins> algorithm ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The natural implementation of sparse matrix arithmetic on a computer makes it easy to compute the sequence ''S'' in parallel for a number of vectors equal to the width of a machine word – indeed, it will normally take no longer to compute for that many vectors than for one. If you have several processors, you can compute the sequence S for a different set of random vectors in parallel on all the computers.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The natural implementation of sparse matrix arithmetic on a computer makes it easy to compute the sequence ''S'' in parallel for a number of vectors equal to the width of a machine word – indeed, it will normally take no longer to compute for that many vectors than for one. If you have several processors, you can compute the sequence S for a different set of random vectors in parallel on all the computers.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 16:</td> <td colspan="2" class="diff-lineno">Line 16:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Wiedemann, D., "Solving sparse linear equations over finite fields," IEEE Trans. Inf. Theory IT-32, pp. 54-62, 1986.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>D. Coppersmith, Solving homogeneous linear equations over GF(2) via block Wiedemann algorithm, Math. Comp. 62 (1994), 333-350.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Villard's 1997 research report '[http://citeseer.ist.psu.edu/cache/papers/cs/4204/ftp:zSzzSzftp.imag.frzSzpubzSzCALCUL_FORMELzSzRAPPORTzSz1997zSzRR975.pdf A study of Coppersmith's block Wiedemann algorithm using matrix polynomials]' (the cover material is in French but the content in English) is a reasonable description.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Villard's 1997 research report '[http://citeseer.ist.psu.edu/cache/papers/cs/4204/ftp:zSzzSzftp.imag.frzSzpubzSzCALCUL_FORMELzSzRAPPORTzSz1997zSzRR975.pdf A study of Coppersmith's block Wiedemann algorithm using matrix polynomials]' (the cover material is in French but the content in English) is a reasonable description.</div></td> </tr> </table> 172.88.126.150 https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=720122510&oldid=prev 166.137.178.185 at 21:40, 13 May 2016 2016-05-13T21:40:56Z <p></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:40, 13 May 2016</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 3:</td> <td colspan="2" class="diff-lineno">Line 3:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Coppersmith's algorithm ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Coppersmith's algorithm ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Let M be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length n, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix M; let y be any other vector of length &lt;math&gt;n&lt;/math&gt;, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Let <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;</ins>M<ins style="font-weight: bold; text-decoration: none;">&lt;/math&gt;</ins> be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;</ins>n<ins style="font-weight: bold; text-decoration: none;">&lt;/math&gt;</ins>, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;</ins>M<ins style="font-weight: bold; text-decoration: none;">&lt;/math&gt;</ins>; let <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;</ins>y<ins style="font-weight: bold; text-decoration: none;">&lt;/math&gt;</ins> be any other vector of length &lt;math&gt;n&lt;/math&gt;, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>We know that the matrix M has a [[Minimal_polynomial_(linear_algebra)|minimal polynomial]]; by the [[Cayley–Hamilton theorem]] we know that this polynomial is of degree (which we will call &lt;math&gt;n_0&lt;/math&gt;) no more than n. Say &lt;math&gt;\sum_{r=0}^{n_0} p_rM^r = 0&lt;/math&gt;. Then &lt;math&gt;\sum_{r=0}^{n_0} y \cdot (p_r (M^r x)) = 0&lt;/math&gt;; so the minimal polynomial of the matrix annihilates the sequence &lt;math&gt;S&lt;/math&gt; and hence &lt;math&gt;S_y&lt;/math&gt;.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>We know that the matrix <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;</ins>M<ins style="font-weight: bold; text-decoration: none;">&lt;/math&gt;</ins> has a [[Minimal_polynomial_(linear_algebra)|minimal polynomial]]; by the [[Cayley–Hamilton theorem]] we know that this polynomial is of degree (which we will call &lt;math&gt;n_0&lt;/math&gt;) no more than <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;</ins>n<ins style="font-weight: bold; text-decoration: none;">&lt;/math&gt;</ins>. Say &lt;math&gt;\sum_{r=0}^{n_0} p_rM^r = 0&lt;/math&gt;. Then &lt;math&gt;\sum_{r=0}^{n_0} y \cdot (p_r (M^r x)) = 0&lt;/math&gt;; so the minimal polynomial of the matrix annihilates the sequence &lt;math&gt;S&lt;/math&gt; and hence &lt;math&gt;S_y&lt;/math&gt;.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>But the [[Berlekamp–Massey algorithm]] allows us to calculate relatively efficiently some sequence &lt;math&gt;q_0 \ldots q_L&lt;/math&gt; with &lt;math&gt;\sum_{i=0}^L q_i S_y[{i+r}]=0 \forall r&lt;/math&gt;.<del style="font-weight: bold; text-decoration: none;"> </del> Our hope is that this sequence, which by construction annihilates &lt;math&gt;y \cdot S&lt;/math&gt;, actually annihilates &lt;math&gt;S&lt;/math&gt;; so we have &lt;math&gt;\sum_{i=0}^L q_i M^i x = 0&lt;/math&gt;. We then take advantage of the initial definition of &lt;math&gt;x&lt;/math&gt; to say &lt;math&gt;M \sum_{i=0}^L q_i M^i x_{\mathrm {base}} = 0&lt;/math&gt; and so &lt;math&gt;\sum_{i=0}^L q_i M^i x_{\mathrm {base}}&lt;/math&gt; is a hopefully non-zero kernel vector of &lt;math&gt;M&lt;/math&gt;.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>But the [[Berlekamp–Massey algorithm]] allows us to calculate relatively efficiently some sequence &lt;math&gt;q_0 \ldots q_L&lt;/math&gt; with &lt;math&gt;\sum_{i=0}^L q_i S_y[{i+r}]=0 <ins style="font-weight: bold; text-decoration: none;">\;</ins>\forall<ins style="font-weight: bold; text-decoration: none;"> \;</ins> r&lt;/math&gt;. Our hope is that this sequence, which by construction annihilates &lt;math&gt;y \cdot S&lt;/math&gt;, actually annihilates &lt;math&gt;S&lt;/math&gt;; so we have &lt;math&gt;\sum_{i=0}^L q_i M^i x = 0&lt;/math&gt;. We then take advantage of the initial definition of &lt;math&gt;x&lt;/math&gt; to say &lt;math&gt;M \sum_{i=0}^L q_i M^i x_{\mathrm {base}} = 0&lt;/math&gt; and so &lt;math&gt;\sum_{i=0}^L q_i M^i x_{\mathrm {base}}&lt;/math&gt; is a hopefully non-zero kernel vector of &lt;math&gt;M&lt;/math&gt;.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== The block Wiedemann algorithm ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== The block Wiedemann algorithm ==</div></td> </tr> </table> 166.137.178.185 https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=720119543&oldid=prev 166.137.178.185 at 21:18, 13 May 2016 2016-05-13T21:18:13Z <p></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:18, 13 May 2016</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 3:</td> <td colspan="2" class="diff-lineno">Line 3:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Coppersmith's algorithm ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Coppersmith's algorithm ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Let M be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length n, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix M; let y be any other vector of length n, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Let M be an &lt;math&gt;n\times n&lt;/math&gt; [[square matrix]] over some [[finite field]] F, let &lt;math&gt;x_{\mathrm {base}}&lt;/math&gt; be a random vector of length n, and let &lt;math&gt;x = M x_{\mathrm {base}}&lt;/math&gt;. Consider the sequence of vectors &lt;math&gt;S = \left[x, Mx, M^2x, \ldots\right]&lt;/math&gt; obtained by repeatedly multiplying the vector by the matrix M; let y be any other vector of length <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;</ins>n<ins style="font-weight: bold; text-decoration: none;">&lt;/math&gt;</ins>, and consider the sequence of finite-field elements &lt;math&gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&lt;/math&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>We know that the matrix M has a [[Minimal_polynomial_(linear_algebra)|minimal polynomial]]; by the [[Cayley–Hamilton theorem]] we know that this polynomial is of degree (which we will call &lt;math&gt;n_0&lt;/math&gt;) no more than n. Say &lt;math&gt;\sum_{r=0}^{n_0} p_rM^r = 0&lt;/math&gt;. Then &lt;math&gt;\sum_{r=0}^{n_0} y \cdot (p_r (M^r x)) = 0&lt;/math&gt;; so the minimal polynomial of the matrix annihilates the sequence &lt;math&gt;S&lt;/math&gt; and hence &lt;math&gt;S_y&lt;/math&gt;.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>We know that the matrix M has a [[Minimal_polynomial_(linear_algebra)|minimal polynomial]]; by the [[Cayley–Hamilton theorem]] we know that this polynomial is of degree (which we will call &lt;math&gt;n_0&lt;/math&gt;) no more than n. Say &lt;math&gt;\sum_{r=0}^{n_0} p_rM^r = 0&lt;/math&gt;. Then &lt;math&gt;\sum_{r=0}^{n_0} y \cdot (p_r (M^r x)) = 0&lt;/math&gt;; so the minimal polynomial of the matrix annihilates the sequence &lt;math&gt;S&lt;/math&gt; and hence &lt;math&gt;S_y&lt;/math&gt;.</div></td> </tr> </table> 166.137.178.185 https://en.wikipedia.org/w/index.php?title=Block_Wiedemann_algorithm&diff=601994760&oldid=prev 88.137.8.229: /* References */ 2014-03-30T19:03:57Z <p><span class="autocomment">References</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 19:03, 30 March 2014</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 19:</td> <td colspan="2" class="diff-lineno">Line 19:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Villard's 1997 research report '[http://citeseer.ist.psu.edu/cache/papers/cs/4204/ftp:zSzzSzftp.imag.frzSzpubzSzCALCUL_FORMELzSzRAPPORTzSz1997zSzRR975.pdf A study of Coppersmith's block Wiedemann algorithm using matrix polynomials]' (the cover material is in French but the content in English) is a reasonable description.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Villard's 1997 research report '[http://citeseer.ist.psu.edu/cache/papers/cs/4204/ftp:zSzzSzftp.imag.frzSzpubzSzCALCUL_FORMELzSzRAPPORTzSz1997zSzRR975.pdf A study of Coppersmith's block Wiedemann algorithm using matrix polynomials]' (the cover material is in French but the content in English) is a reasonable description.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Thomé's paper '[http://<del style="font-weight: bold; text-decoration: none;">citeseer</del>.<del style="font-weight: bold; text-decoration: none;">ist</del>.<del style="font-weight: bold; text-decoration: none;">psu.edu</del>/<del style="font-weight: bold; text-decoration: none;">rd</del>/<del style="font-weight: bold; text-decoration: none;">13850609%2C564537%2C1%2C0.25%2CDownload</del>/<del style="font-weight: bold; text-decoration: none;">http:</del>//<del style="font-weight: bold; text-decoration: none;">citeseer.ist.psu.edu</del>/<del style="font-weight: bold; text-decoration: none;">cache</del>/<del style="font-weight: bold; text-decoration: none;">papers/cs/27081/http:zSzzSzwww.lix.polytechnique.frzSzLabozSzEmmanuel.ThomezSzpubliszSzjsc.pdf/subquadratic-computation-of-vector</del>.pdf Subquadratic computation of vector generating polynomials and improvement of the block Wiedemann algorithm]' uses a more sophisticated [[Fast Fourier transform|FFT]]-based algorithm for computing the vector generating polynomials, and describes a practical implementation with ''i''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;''j''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;4 used to compute a kernel vector of a 484603×484603 matrix of entries modulo 2&lt;sup&gt;607&lt;/sup&gt;−1, and hence to compute discrete logarithms in the field ''GF''(2&lt;sup&gt;607&lt;/sup&gt;).</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Thomé's paper '[http://<ins style="font-weight: bold; text-decoration: none;">hal</ins>.<ins style="font-weight: bold; text-decoration: none;">archives-ouvertes</ins>.<ins style="font-weight: bold; text-decoration: none;">fr</ins>/<ins style="font-weight: bold; text-decoration: none;">docs</ins>/<ins style="font-weight: bold; text-decoration: none;">00</ins>/<ins style="font-weight: bold; text-decoration: none;">10</ins>/<ins style="font-weight: bold; text-decoration: none;">34</ins>/<ins style="font-weight: bold; text-decoration: none;">17</ins>/<ins style="font-weight: bold; text-decoration: none;">PDF</ins>/<ins style="font-weight: bold; text-decoration: none;">jsc</ins>.pdf Subquadratic computation of vector generating polynomials and improvement of the block Wiedemann algorithm]' uses a more sophisticated [[Fast Fourier transform|FFT]]-based algorithm for computing the vector generating polynomials, and describes a practical implementation with ''i''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;''j''&lt;sub&gt;max&lt;/sub&gt;&amp;nbsp;=&amp;nbsp;4 used to compute a kernel vector of a 484603×484603 matrix of entries modulo 2&lt;sup&gt;607&lt;/sup&gt;−1, and hence to compute discrete logarithms in the field ''GF''(2&lt;sup&gt;607&lt;/sup&gt;).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Numerical linear algebra}}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Numerical linear algebra}}</div></td> </tr> </table> 88.137.8.229