<?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=Block_Wiedemann_algorithm</id>
	<title>Block Wiedemann algorithm - 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=Block_Wiedemann_algorithm"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Block_Wiedemann_algorithm&amp;action=history"/>
	<updated>2026-10-26T21:47:08Z</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=Block_Wiedemann_algorithm&amp;diff=6900980&amp;oldid=prev</id>
		<title>imported&gt;OAbot: Open access bot: arxiv added to citation with #oabot.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Block_Wiedemann_algorithm&amp;diff=6900980&amp;oldid=prev"/>
		<updated>2023-08-13T19:37:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/OABOT&quot; class=&quot;extiw&quot; title=&quot;wikipedia:OABOT&quot;&gt;Open access bot&lt;/a&gt;: arxiv added to citation with #oabot.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;block Wiedemann algorithm&amp;#039;&amp;#039;&amp;#039; for computing [[kernel (linear algebra)|kernel]] [[vector space|vectors]] of a [[matrix (mathematics)|matrix]] over a [[finite field]] is a generalization by [[Don Coppersmith]] of an algorithm due to Doug Wiedemann.&lt;br /&gt;
&lt;br /&gt;
== Wiedemann&amp;#039;s algorithm ==&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; be an &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt; [[square matrix]] over some [[finite field]] F, let &amp;lt;math&amp;gt;x_{\mathrm {base}}&amp;lt;/math&amp;gt; be a random vector of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, and let &amp;lt;math&amp;gt;x = M x_{\mathrm {base}}&amp;lt;/math&amp;gt;. Consider the sequence of vectors &amp;lt;math&amp;gt;S = \left[x, Mx, M^2x, \ldots\right]&amp;lt;/math&amp;gt; obtained by repeatedly multiplying the vector by the matrix &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;; let &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; be any other vector of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, and consider the sequence of finite-field elements &amp;lt;math&amp;gt;S_y = \left[y \cdot x, y \cdot Mx, y \cdot M^2x \ldots\right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that the matrix &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; 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 &amp;lt;math&amp;gt;n_0&amp;lt;/math&amp;gt;) no more than &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Say &amp;lt;math&amp;gt;\sum_{r=0}^{n_0} p_rM^r = 0&amp;lt;/math&amp;gt;.  Then &amp;lt;math&amp;gt;\sum_{r=0}^{n_0} y \cdot (p_r (M^r x)) = 0&amp;lt;/math&amp;gt;; so the minimal polynomial of the matrix annihilates the sequence &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and hence &amp;lt;math&amp;gt;S_y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
But the [[Berlekamp–Massey algorithm]] allows us to calculate relatively efficiently some sequence &amp;lt;math&amp;gt;q_0 \ldots q_L&amp;lt;/math&amp;gt; with &amp;lt;math&amp;gt;\sum_{i=0}^L q_i S_y[{i+r}]=0 \;\forall \; r&amp;lt;/math&amp;gt;. Our hope is that this sequence, which by construction annihilates &amp;lt;math&amp;gt;y \cdot S&amp;lt;/math&amp;gt;, actually annihilates &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;; so we have &amp;lt;math&amp;gt;\sum_{i=0}^L q_i M^i x = 0&amp;lt;/math&amp;gt;. We then take advantage of the initial definition of &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; to say &amp;lt;math&amp;gt;M \sum_{i=0}^L q_i M^i x_{\mathrm {base}} = 0&amp;lt;/math&amp;gt; and so &amp;lt;math&amp;gt;\sum_{i=0}^L q_i M^i x_{\mathrm {base}}&amp;lt;/math&amp;gt; is a hopefully non-zero kernel vector of &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== The block Wiedemann (or Coppersmith-Wiedemann) algorithm ==&lt;br /&gt;
&lt;br /&gt;
The natural implementation of sparse matrix arithmetic on a computer makes it easy to compute the sequence &amp;#039;&amp;#039;S&amp;#039;&amp;#039; 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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt; y_i \cdot M^t x_j&amp;lt;/math&amp;gt; for some &amp;lt;math&amp;gt;i = 0 \ldots i_\max, j=0 \ldots j_\max, t = 0 \ldots t_\max&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;i_\max, j_\max, t_\max&amp;lt;/math&amp;gt; need to satisfy &amp;lt;math&amp;gt;t_\max &amp;gt; \frac{d}{i_\max} + \frac{d}{j_\max} + O(1)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; are a series of vectors of length n; but in practice you can take &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; as a sequence of unit vectors and simply write out the first &amp;lt;math&amp;gt;i_\max&amp;lt;/math&amp;gt; entries in your vectors at each time &amp;#039;&amp;#039;t&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Invariant Factor Calculation ==&lt;br /&gt;
The block Wiedemann algorithm can be used to calculate the leading [[invariant factor]]s of the matrix, ie, the largest blocks of the [[Frobenius normal form]].  Given &amp;lt;math&amp;gt;M \in F_q^{n \times n}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;U, V \in F_q^{b \times n}&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;F_q&amp;lt;/math&amp;gt; is a finite field of size &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, the probability &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; that the leading &amp;lt;math&amp;gt;k &amp;lt; b&amp;lt;/math&amp;gt; invariant factors of &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; are preserved in &amp;lt;math&amp;gt;\sum_{i=0}^{2n-1}UM^iV^T x^i&amp;lt;/math&amp;gt; is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p \geq \begin{cases} 1/64, &amp;amp; \text{if }b = k+1\text{ and } q=2 \\ \left( 1 - \frac{3}{2^{b-k}} \right)^2 \geq 1/16 &amp;amp; \text{if }b \geq k+2\text{ and } q=2 \\ &lt;br /&gt;
\left( 1 - \frac{2}{q^{b-k}} \right)^2 \geq 1/9 &amp;amp; \text{if }b \geq k+1\text{ and }q &amp;gt; 2\end{cases}&amp;lt;/math&amp;gt;.&amp;lt;ref&amp;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|arxiv=1803.03864 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
* Wiedemann, D., &amp;quot;Solving sparse linear equations over finite fields,&amp;quot; IEEE Trans. Inf. Theory IT-32, pp. 54-62, 1986.&lt;br /&gt;
&lt;br /&gt;
* D. Coppersmith, Solving homogeneous linear equations over GF(2) via block Wiedemann algorithm, Math. Comp. 62 (1994), 333-350.&lt;br /&gt;
&lt;br /&gt;
* Villard&amp;#039;s 1997 research report &amp;#039;[http://citeseer.ist.psu.edu/cache/papers/cs/4204/ftp:zSzzSzftp.imag.frzSzpubzSzCALCUL_FORMELzSzRAPPORTzSz1997zSzRR975.pdf A study of Coppersmith&amp;#039;s block Wiedemann algorithm using matrix polynomials]&amp;#039; (the cover material is in French but the content in English) is a reasonable description.&lt;br /&gt;
&lt;br /&gt;
* Thomé&amp;#039;s paper &amp;#039;[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]&amp;#039; uses a more sophisticated [[Fast Fourier transform|FFT]]-based algorithm for computing the vector generating polynomials, and describes a practical implementation with &amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;&amp;#039;&amp;#039;j&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;4 used to compute a kernel vector of a 484603×484603 matrix of entries modulo 2&amp;lt;sup&amp;gt;607&amp;lt;/sup&amp;gt;−1, and hence to compute discrete logarithms in the field &amp;#039;&amp;#039;GF&amp;#039;&amp;#039;(2&amp;lt;sup&amp;gt;607&amp;lt;/sup&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{{Numerical linear algebra}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Numerical linear algebra]]&lt;/div&gt;</summary>
		<author><name>imported&gt;OAbot</name></author>
	</entry>
</feed>