随机二进制矩阵可逆的概率分析Probability that a random binary matrix is invertible
John D. Cook 探讨了在 n×n 矩阵中随机填入 0 和 1 时,该矩阵可逆的概率问题。研究显示,随着维度增加,可逆概率趋近于一个稳定值,具体取决于所采用的数域(如有无模运算)。这一结果对密码学与线性代数应用具有重要意义。
John
最近两篇帖子都涉及元素为0和1的可逆矩阵。如果随机填充一个n×n的0-1矩阵,它可逆的概率有多大?
什么样的逆矩阵?
要计算二进制矩阵可逆的概率,有几种方法,具体取决于你对“逆”的定义。
假设你有一个由0和1构成的矩阵M,正在寻找一个矩阵N,使得MN等于单位矩阵。你是否希望N的元素也必须是0或1?另外,你在进行矩阵乘法时,是执行普通的整数运算,还是在模2下进行?
在之前的文章中,我们是在GF(2)(包含两个元素0和1的有限域)上进行的运算。矩阵中的所有元素只能是0或1,且所有算术运算都在模2下进行。在这种设定下,可以得出一个关于方阵可逆概率的简洁表达式。
如果你是在实数域上工作,那么一个二进制矩阵可逆的概率会更高。一种理解方式是:一个二进制矩阵的逆矩阵可以是二进制的,但这并非必须满足的条件。
另一种理解方式是观察行列式。如果你将一个矩阵M视为一个实数矩阵,其元素碰巧只有0或1,那么M可逆当且仅当其行列式非零。但如果你将M视为GF(2)上的矩阵,其元素只能是0或1,那么M可逆当且仅当它在GF(2)下的行列式非零。如果M作为实数矩阵的行列式是一个非零偶数,那么M在实数域上是可逆的,但在GF(2)上不可逆。
GF(2)上的可逆概率
在GF(2)上,一个随机矩阵可逆的概率是多少?实际上,更容易回答一个更一般的问题:一个在GF(q)(包含q个元素的有限域)上的随机n×n矩阵可逆的概率是多少?这个概率是
当q=2且n=8时,这个概率约为0.289919。对于更大的n值,这个概率大致相同,并随着n→∞而收敛到约0.288788。
ℝ上的可逆概率
一个8×8的、元素为随机0和1的矩阵在实数域上可逆的概率是多少?我们可以通过模拟来估计这个概率。
import numpy as np
def simulate_prob_invertible_real(n, numreps=1000):
s = 0
for _ in range(numreps):
M = np.random.randint(0, 2, size=(n, n))
det = np.linalg.det(M)
if abs(det) > 1e-9:
s += 1
return s/numreps当n=8时,我运行了10,000次代码,得到的概率约为0.5477。
当n=32时,我得到的概率是1。显然,一个32×32的二进制矩阵有可能是奇异的,但在10,000次随机抽取中,这种情况并未发生。
需要完整排版与评论请前往来源站点阅读。