首页 > 其他分享 >线性基学习笔记

线性基学习笔记

时间:2023-08-23 16:58:40浏览次数:33  
标签:ll 笔记 查询 学习 re 异或 构造 线性

\(#defing ll long long\)
线性基用处:
 快速查询一个数是否可以被一堆数异或出来
 快速查询一堆数可以异或出来的最大 \(/\) 最小值
 快速查询一堆数可以异或出来的第 \(k\) 大值

线性基空间复杂度:
 设有一个序列,其值域为 \([1,N]\),我们可以构造一个长度为 \(⌈\log_2 N⌉\) 的线性基。
 其中,满足性质:序列能异或出来的数,线性基都能异或出来,反之,线性基能异或出来的数,序列都能异或出来。
 证明一定存在一种构造的线性基能满足这个性质。
 不妨设整个序列的最大值为 \(N\),则一定存在 \(i=⌈\log_2 N⌉\) 满足 \(2^{i-1}< N\le 2^i\),则这个序列最多最多,只能异或出 \(2^i\) 个数,而我们线性基的所有组合也是 \(2^i\),只要构造出的线性基满足每种组合不一样即可(感性理解,感性裂解)

贪心构造线性基:
 令线性基为数组 \(a\),令 \(a_i\) 最高位表示 \(2^i\)。
 考虑对于一个数 \(x\),从高到低每一位枚举,如果 \(x\) 在第 \(j\) 位为 \(1\)。
 若 \(a_j\) 没有记录,则令 \(a_j=x\)
 否则的话,令 \(x=x \oplus a_j\)
 最后在特判一下,看一下 \(x\) 是否为 \(0\)。
 若是,则记录一下,表示这些数可以异或出来 \(0\)。

void ins(ll x)
{
  for(ll i=N;i>=0;i--)
  	if(x&(1ll<<i))
  		if(!a[i]){a[i]=x;return ;}
  		else x^=a[i];
  flag=true;
}  

判断一个数能否被序列异或出来:
 跟构造差不多,只不过变成了直接\(return\) \(true/false;\)罢了

bool check(ll x)
{
    for(ll i=N;i>=0;i--)
        if(x&(1ll<<i))
            if(!a[i])return false;
            else x^=a[i];
    return true;
}

查询异或最小值:
 首先看一下能否表示 \(0\)。
 若不能,因为线性基的位数都是单调递减的,任意两个数异或出的数必然会大于小一点的那个数,所以直接输出线性基的最小值即可

ll qmin()
{
    if(flag)return 0;
    for(ll i=0;i<=N;i++)
        if(a[i])return a[i];
}

查询异或最大值:
 从高到低枚举线性基 \(a_i\),在异或和不异或之间取 \(max\) 即可。

ll qmax()
{
	ll re=0;
	for(ll i=N;i>=0;i--)
		re=max(re,re^a[i]);
	return re;
}

查询异或\(k\)小值:
 个人认为这个比较难懂,
 首先,先特判\(0\)
 然后要构造出一个 \(b\) 数组,\(b_i\) 表示最高位为 \(2^i\) 且该位为 \(1\) 时能表示出的最小异或值
 很显然,有些 \(b_i\) 是不存在,所以我们可以构造一个 \(tmp\) 数组,\(tmp_j\) 表示从小到大第 \(j\) 个可以表示的 \(b_i\)。(感性理解)
 设 \(tmp\) 长度为 \(cnt\),可以发现我们最多构造出 \(2^{cnt}-1\)个数,所以如果有解必然是 \(2^{cnt} > k\)。
 不能发现

标签:ll,笔记,查询,学习,re,异或,构造,线性
From: https://www.cnblogs.com/pengchujie/p/17652112.html

相关文章

  • 机器学习会取代数据科学吗?
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景真的是这样吗?数据科学真的要死了吗?机器学习会取代数据科学吗?当然没有。我们正在获得更多的数据,这些数据正在产生推动决策的宝贵见解。这些见解无法从计算机中产生,我们需要它们来进行数据科学。可以构建机器学习模型,并......
  • 《我创建了 学习相对论吧 , 大伙来看看吧》 回复
    《我创建了学习相对论吧,大伙来看看吧》     https://tieba.baidu.com/p/8565562689     回复7楼 @东方已晓  , 前些天我们在你的  《旧话重提,什么是相对性原理?》    https://tieba.baidu.com/p/8510119366   里有过思考交流 ......
  • react-player学习
    一个适用于react的视频插件—react-player说明文档转载说明:来源于npm库中的readme.md侵权删调试工具地址:https://cookpete.com/react-player1.可以自动播放2.可以实现画中画、倍速、可控播放等功能ReactPlayerAReactcomponentforplayinga......
  • docker 命令学习
    1.dockerpullnginx 拉取镜像2.dockerrun -d -it --namenginx01-p4433:80nginx 运行容器3.dockerps查看运行的容器4.docker stop nginx01 停止容器5.dockerstart nginx01 启动容器6.dockerrmnginx01删除容器7.dockerstats 查看容器......
  • 线性代数为什么是计算机专业的基础课程
    线性代数在机器学习中比较低阶的应用是矩阵运算,比如softmax分类器y^=σ(WTx+b)\hat{\mathbf{y}}=\sigma(W^T\mathbf{x}+\mathbf{b}),在这里矩阵形式使得书写、计算更方便,也能帮助理解模型(将矩阵看作是一种变换);高阶一点的应用在无监督学习中,可以参考奇异值分解(SVD)等矩阵分解方......
  • 网工学习(三)
    Wifi标准2.4G和5G优缺点对比-2.4G: -优点:兼容性好(所有设备都支持),抗衰性能强(穿墙能力强) -缺点:速度慢-5G: -优点:速度快 -缺点:兼容性差(老设备不支持),抗衰性差(穿墙能力若) -应用情况: -以前:2.4G是主流 -现在:5G是主流(要兼容老终端,无线网络......
  • [刷题笔记] Luogu P2679 [NOIP2015 提高组] 子串
    ProblemDescription我们可以换个思路。从字符串\(A\)中拿出\(k\)个字串使其变成\(B\)。求有几种不同的方案?Analysis我们发现\(A\)中的一个字符取或者不取影响后面的决策,这并不代表它一定有后效性,我们可以记录这一层状态。和最长公共子序列同理,定义\(f_{i,j,k,l}(\fo......
  • Lnton羚通视频算法算力云平台【PyTorch】教程:学习基础知识如何保存和加载模型
    保存和加载模型是指将训练好的神经网络模型保存到文件中,以便在需要时重新加载该模型进行预测、推断或继续训练。保存模型的过程是将模型的参数和其他相关信息(如优化器状态等)保存到文件中。通过保存模型,我们可以在不重新训练的情况下保留模型的状态,方便后续使用。加载模型的过程是从......
  • Python基础入门学习笔记 077 GUI的终极选择:Tkinter14
    Tkinter提供了三种标准对话框模块,分别是:messagebox、filedialog、colorchoosermessagebox(消息对话框)实例1:askokcancel函数1fromtkinterimport*23print(messagebox.askokcancel("FishCDemo","发射核弹?"))45mainloop() 实例2:askquestion函数 实例3:asire......
  • Python基础入门学习笔记 074 GUI的终极选择:Tkinter11
    事件绑定对于每个组件来说,可以通过bind()方法将函数或方法绑定到具体的事件上。当被触发的事件满足该组件绑定的事件时,Tkinter就会带着事件描述去调用handler()方法实例1:捕获单击鼠标位置1fromtkinterimport*23root=Tk()45defcallback(event):6prin......