首页 > 其他分享 >01 矩阵反转每个位置的秩

01 矩阵反转每个位置的秩

时间:2023-03-22 14:14:14浏览次数:40  
标签:01 反转 矩阵 异或 Rank 满足 子集 性质

http://qoj.ac/contest/750/problem/3319

题意

给定 \(n\times m\) 的 01 矩阵 \(A\),求反转每个位置后,新矩阵的秩。

数据范围:\(n,m\le 10^3\)。

分析

记 \(A_i\) 为 \(A\) 的第 \(i\) 行,设 \(H(A_i,j)\) 为把 \(A_i\) 的第 \(j\) 列取反得到的向量。设 \(F(A,i,j)\) 为把 \(A_{i,j}\) 取反得到的矩阵,\(G(A,i)\) 为把 \(A\) 的第 \(i\) 行删去得到的矩阵。我们只需算出以下 3 个值既可间接算出答案:

  • \(Rank(A)\)
  • \(Rank(A)-Rank(G(A,i))\)
  • \(Rank(F(A,i,j))-Rank(G(A,i))\)

由于 \(A\) 是 01 矩阵,计算 \(Rank(A)\) 可以用 bitset 优化,时间复杂度为 \(O(\frac{n^3}{w})\)。

要计算 \(Rank(A)-Rank(G(A,i))\),我们只需判断 \(G(A,i)\) 的所有行向量张成的线性空间是否包含 \(A_i\)。将该命题称为 \(P_i\),则 \(Rank(A)-Rank(G(A,i))+[P_i]=1\)。

称 \(A\) 的一个行子集满足性质 \(X\),当且仅当其中所有行向量的异或和为 \(0\)。那么 \(P_i\) 成立等价于存在一个满足性质 \(X\) 的行子集包含 \(i\)。注意到任意 2 个满足性质 \(X\) 的行子集的异或仍然满足性质 \(X\),因此只需求出满足性质 \(X\) 的行子集的一组基,这样,\(P_i\) 成立等价于 \(i\) 在所有基的并集(设为 \(S\))中。而这组基的求解过程正是将 \(A\) 的每行插入线性基,若插入失败就添加一个行子集。

同理,要计算 \(Rank(F(A,i,j))-Rank(G(A,i))\),只需判断 \(G(A,i)\) 的所有行向量张成的线性空间是否包含 \(H(A_i,j)\)。将命题称为 \(Q_{i,j}\),则 \(Rank(F(A,i,j))-Rank(G(A,i))+Q_{i,j}=1\)。

称 \(A\) 的一个行子集满足性质 \(Y_j\),当且仅当其中所有行向量的异或和为:
\(\left[\underbrace{0,\cdots,0}_{j-1},1,0,\cdots,0\right]\)

注意到任意两个满足性质 \(Y_j\) 的行子集的异或满足性质 \(X\)。设使 \(Q_{i,j}\) 成立的 \(i\) 构成的集合为 \(T_j\)。那么分 2 种情况:

  1. 若不存在满足性质 \(Y_j\) 的行子集,\(T_j=\varnothing\)。
  2. 否则,设任意一个满足性质 \(Y_j\) 的行子集为 \(y_j\),那么 \(T_j=S\cup \{y_j\}\)。

因此我们只需求出 \(y_j\),直接把向量放到线性基里消元既可。总时间复杂度仍为 \(O(\frac{n^3}{w})\)。

标签:01,反转,矩阵,异或,Rank,满足,子集,性质
From: https://www.cnblogs.com/alfalfa-w/p/17243500.html

相关文章

  • COMP3121/9101 23T1难点分析
    COMP3121/910123T1—Assignment2(UNSWSydney)DueMonday27thMarchat5pmSydneytimeInthisassignmentweapplythegreedymethodandassociatedgraphalgo......
  • C01素数之和
    publicclassA01素数之和{publicstaticvoidmain(String[]args){intsum=0;//累加求和for(inti=2;i<=100;i++){if(isSS(i)){//如果i是素数,就累加到su......
  • 面试题01
    面试题011面试官上来要看你项目-看你的编码水平-公司的项目看不了的不用慌,给面试官看的都是个人项目开源的-公司项目看不了签了保密协议2数据库如何处理用的......
  • 邻接矩阵、稀疏矩阵(torch, sparse, numpy)相互转换 [转载]
    原链接:邻接矩阵转稀疏矩阵邻接矩阵转稀疏矩阵Example:importscipy.sparseasspimportnumpyasnpimporttorchadj_matrix=torch.randint(0,2,(4,4))print(ad......
  • esxi主机安装完毕后漏洞:CVE-2018-3646解决方法
    [解决方案]由于此漏洞属于芯片级漏洞,更新固件会造成较大的性能损失,在私有云环境下,此漏洞的影响范围可控,我们可以选择禁用此提示,暂缓漏洞的修复。esxi主机安装完毕后漏洞:C......
  • Python系列001
    1.注意缩进//会引起代码逻辑异常2.字符串的一些方法方法title()//以首字母大写的方式显示每个单词name="adalovelace"print(name.title())方法upper()//将......
  • 2019杭电多校赛第一场Vacation
    Vacation题意:n辆车排队过路口,每辆车给定最大车速、车长、车头到路口的距离,求最后一辆车的最短通过时间分析:确定每辆车通过路口需要的总路程sum[i],然后分情况讨论:......
  • Day01 JS整数是怎么表示的 | 面试打卡365
    知识讲解系统+全面万能的NumberJavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。做一个实验typeof1//numbertypeof......
  • Matlab 将矩阵循环写入同一个Excel中不同命名的Sheet中
    前言由于需要计算不同行政区划不同年份的某个指标变化情况,实际上是三种变量三维数组,除去在matlab内部保存变量外,写入Excel方便查看制表教程代码参考:https://ww2.mathw......
  • algrothm_reverse(algrothm+round)【反转链表】
    ......