首页 > 其他分享 >线性基求交

线性基求交

时间:2024-11-17 16:29:23浏览次数:1  
标签:node cup int cap tmpa 基求 线性

定义线性空间 \(V_i\) 的基底为 \(B_i\),现在我们希望求出 \(V_1\cap V_2\) 的基底 \(W\)。

  • 引理:令 \(T=V_1\cap B_2\),若 \(B_1\cup(B_2/T)\) 线性无关,则 \(T\) 是所求的 \(W\) 之一。

    证明:考虑反面证明,若 \(T\) 非法则线性有关,设 \(v\in V_1\cap V_2\) 且不能被 \(T\) 表出。

    那么有 \(v=x\oplus y,x\in T,y\in B_2/T\),且 \(y>0\)。

    因为 \(x\in T\implies x\in V_1\),同时 \(v\in V_1\),所以 \(x\oplus v=y\in V_1\)

    \(y\) 就可以被 \(B_1\) 表出

    则 \(B_1\cup (B_2/T)\) 线性相关。

考虑如何求出 \(W\),可以考虑枚举 \(x:1\to |B_2|\):

  • \(b_x\in B_2\)

    1. \(b_x\) 可以被 \(B_1\cup \lbrace b_1,b_2\dots b_{x-1}\rbrace\) 表出

      设 \(b_x=p\oplus q,p\in V_1,q\) 被 \(\lbrace b_1,b_2\dots b_{x-1}\rbrace\) 表出,则将 \(q\) 加入 \(W\)。

    2. 否则不做任何操作。

证明这样可以求出 \(W\),只需要证明 \(V_{B_2-W}\cap V_1=\lbrace 0\rbrace\) 即可。

设 \(x\in V_{B_2/W}\cap V_1,x>0\)

则有 \(x\) 可以被 \(B_1\) 以及 \(B_2/W\) 表出,那么取出 \(B_2/W\) 里下标最大的 \(b_k\),则有 \(b_k\) 可以被 \(B_2/W/\lbrace b_k\rbrace\cup B_1\) 表出,那么与假设不符。

证毕。

实现:

struct node{
    int d[32];
    node(){
        memset(d,0,sizeof d);
    }
    void ins(int x){
        for(int i=31;i>=0;--i)if((x>>i)&1){
            if(d[i])x^=d[i];
            else {d[i]=x;return ;}
        }
    }
    bool count(int x){
        for(int i=31;i>=0;--i)if((x>>i)&1){
            if(!d[i])return false;
            x^=d[i];
        }
        return true;
    }
    node operator&(const node b)const {
        node tmpa;memcpy(tmpa.d,d,sizeof d);
        node uda=tmpa,res;
        for(int i=0;i<32;++i)if(b.d[i]){
            int x=b.d[i],sur=0,tag=1;
            for(int j=i;j>=0;--j)if((x>>j)&1){
                if(tmpa.d[j])x^=tmpa.d[j],sur^=uda.d[j];
                else {tmpa.d[j]=x,uda.d[j]=sur,tag=0;break;}//uda.d[i] 指该元素使用的 B_1 中元素 xor 和
            }
            if(tag)res.ins(sur);
        }
        return res;
    }
};

例题:

牛客884B

给定 \(n\) 个线性基,问 \([l,r]\) 的线性基是否都能够表出 \(x\)

考虑先建立线段树,该节点代表子树内所有线性基的交。

然后查询时在分的log个线性基里各自查询即可。

复杂度 \(O(nk\log n+nk^2)\),其中 \(k\) 是线性基维度。

标签:node,cup,int,cap,tmpa,基求,线性
From: https://www.cnblogs.com/spdarkle/p/18550708

相关文章

  • 换元法与线性代数中的二次型
    一个“神来之笔”的换元?问题:若实数\(x,y\)满足\(x^2+4y^2-2xy=36\),求\(x^2+3y^2-xy\)的取值范围。这个问题比较平凡,使用拉格朗日乘数法可以很机械地解决它。拉格朗日乘数法记\(f(x,y)=x^2+4y^2-2xy-36,g(x,y)=x^2+3y^2-xy\),我们要求\(\nablag\)是\(\{\nablaf\}\)......
  • 线性回归学习笔记
    线性回归概述线性回归是一种基本的监督学习算法,用于解决回归问题。它通过拟合数据点,找出特征与目标变量之间的线性关系。其目标是预测连续数值输出。模型公式线性回归模型的数学表达式为:\[y=\mathbf{w}^\top\mathbf{x}+b\]或展开为:\[y=w_1x_1+w_2x_2+\cdot......
  • 【动手做】Python实现线性回归
    线性回归是机器学习中形式比较简单的模型,能够很好的进行推导和求解,也便于图形化展示。关于线性回归的概念和表示,在线性回归的概念与表示有比较详细的的介绍。本文通过手动实现、调用scikit-learn类库两种方式演示了线性回归模型,并通过matplotlib进行了可视化展示。实现过程本......
  • 探索线性插值以外的插值方法
    引言        插值方法广泛应用于数据处理和科学计算中,不同插值方法适合不同的数据类型和应用场景。在上一篇博客中,我们讨论了线性插值,它通过在两个已知数据点之间绘制一条直线来估计中间值。然而,对于非线性数据或复杂的函数关系,线性插值的准确性可能不足。本篇博客将......
  • 数据结构/第二章 线性表/数据结构习题/线性表的习题/考研/期末复习
    一、选择题1.在线性表中,表尾元素(    )。A.有且仅有一个直接前驱        B.有且仅有一个直接后继C.没有直接前驱               D.有多个直接前驱2.在顺序表上按位查找一个元素的时间复杂度是(    )。A.O......
  • 基于线性回归的粮食产量预测(Python代码)
    一、引言预测粮食产量在农业规划、食品安全和全球经济稳定等多个方面都具有极其重要的意义,其应用场景也十分广泛。以下是对预测粮食产量的重要性和应用场景的详细介绍:1.1预测粮食产量的重要性(1)农业规划与决策支持:粮食产量预测为政府和相关机构提供了农业规划的基础数据。......
  • 线性方程组 入门概念
    解释如下概念入门对比齐次vs非齐次线性vs非线性微分vs求导vs积分方程组vs矩阵乘法齐次线性方程组永远存在零解基础解系vs通解存在非零解↔︎A不满秩r(A)+η的数量=n(x的列有多长)非齐次线性方程组Ax=b的2个解互减,即ξ₁-ξ₂是Ax=0导出组的解Ax=b的......
  • 线性代数
    内容简介本书从应用型本科院校的教学实际要求出发,有针对性地选取内容,分层次安排习题,全书内容包括行列式、矩阵、线性方程组、矩阵的特征值、二次型、线性空间与线性变换共6章.并安排了用MATLAB求解相关问题的内容.本书适合普通高等院校理工类、经管类等专业教学使用.PDF下载:h......
  • mobileViT-V2-线性自注意力计算
    paperclassLinearSelfAttention(nn.Module):"""Thislayerappliesaself-attentionwithlinearcomplexity,asdescribedin`https://arxiv.org/abs/2206.02680`Thislayercanbeusedforself-aswellascross-attention.Args......
  • 探索线性插值:从原理到应用
    目录引言1.线性插值的基本概念2.线性插值的数学公式3.线性插值的示意图4.线性插值的应用场景  (1)图形处理  (2)数据填补  (3)动画制作5.使用Python实现线性插值  代码说明6.线性插值的优缺点7.线性插值的拓展方法8.总结引言  ......