线性

线性基总结

偶尔善良 提交于 2019-11-27 03:49:32
线性基    线性基是向量空间的一组基,通常可以解决有关异或的一些题目。通俗一点的讲法就是由一个集合构造出来的另一个集合,它有以下几个性质: 线性基的元素能相互异或得到原集合的元素的所有相互异或得到的值。 线性基是满足性质 1 的最小的集合。 线性基没有异或和为 0 的子集。 线性基中每个元素的异或方案唯一,也就是说,线性基中不同的异或组合异或出的数都是不一样的。 线性基中每个元素的二进制最高位互不相同。 线性基中每个元素的二进制最高位互不相同。    构造线性基的方法如下   对原集合的每个数 \(x\) 转为二进制,从高位向低位扫,对于第 \(i\) 位是 \(1\) 的,如果 \(p_i\) 不存在,那么令 \(p_i = x\) 并结束扫描,如果存在,令 \(x = x\) \(\oplus\) \(p_i\) 。 inline void insert(long long x) { for (int i = 55; i + 1; i--) { if (!(x >> i)) // x的第i位是0 continue; if (!p[i]) { p[i] = x; break; } x ^= p[i]; } } 查询原集合内任意几个元素 \(xor\) 的最大值,就可以用线性基解决。 将线性基从高位向低位扫,若 $xor \(上当前扫到的\) a_x$答案变大,就把答案异或上

线性基基本操作于模板

本秂侑毒 提交于 2019-11-27 02:47:45
资料出处: https://blog.csdn.net/a_forever_dream/article/details/83654397 https://blog.csdn.net/qaq__qaq/article/details/53812883 基础操作: 定义 设数集TT的值域范围为[1,2n−1]。 T的线性基是TT的一个子集A={a1,a2,a3,...,an}。 A中元素互相xor所形成的异或集合,等价于原数集T的元素互相xor形成的异或集合。 可以理解为将原数集进行了压缩。 性质 1.设线性基的异或集合中不存在0。 2.线性基的异或集合中每个元素的异或方案唯一,其实这个跟性质1是等价的。 3.线性基二进制最高位互不相同。 4.如果线性基是满的,它的异或集合为[1,2n−1]。 5.线性基中元素互相异或,异或集合不变。 维护 插入 如果向线性基中插入数x,从高位到低位扫描它为1的二进制位。 扫描到第i时,如果ai不存在,就令ai=x,否则x=x⊗ai。 x的结局是,要么被扔进线性基,要么经过一系列操作过后,变成了0。 bool insert(long long val) { for (int i=60;i>=0;i--) if (val&(1LL<<i)) { if (!a[i]) { a[i]=val; break; } val^=a[i]; } return val

线性基

主宰稳场 提交于 2019-11-26 21:33:28
(qaq,最近打多校碰到好多线性基的题。而且npy:线性基裸题啊,贴模板。。我:???? 线性基 学习博客: https://blog.csdn.net/u013534123/article/details/79875825 https://blog.csdn.net/a_forever_dream/article/details/83654397 例题:洛谷3812 题意:给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 struct Linear_basis{ 5 ll b[55],tot; 6 bool insert(ll x){ 7 for (int i=50;i>=0;i--){ 8 if (x&(1ll<<i)){ 9 if (!b[i]){ 10 b[i]=x; break; 11 } 12 x^=b[i]; 13 } 14 } 15 return x>0; //是否可插入 16 } 17 ll mx(){ 18 ll res=0,ans=0; 19 for (int i=50;i>=0;i--){ 20 res=max(res,res^b[i]); 21 } 22 return res;

扩展欧几里得算法

丶灬走出姿态 提交于 2019-11-26 17:53:30
拓展欧几里得算法 先来看看一个重要的基本定理 裴蜀定理 对于整数a,b,他们关于x,y的线性不定方程 \(ax+by=d\) ,设 \(gcd(a,b)=g\) ,则可证明 \(g|d\) ,换句话说,就是 g是a,b的最小线性组合 。 证明: 设 \(ax+by=d\) , \(g=gcd(a,b)\) ,设 \(ax+by\) 的最小值为s, \(\because\) \(g|a,g|b\) \(\therefore\) \(g|d\) , \(g|s\) 设 \(q=[\frac{a}{s}].则r= a\mod s=a-q*s=a-q*(ax+by)=a(1-qx)+b(-qy)\) 。 可见r也是x,y的线性组合,又r是s的余数, \(r\in [0,s-1]\) ,又s是最小线性组合, \(\therefore r=0\) 。 推出 \(s|a\) ,同理有 \(s|b\) ,则 \(s|g\) ,又已经有 \(g|s\) ,所以 \(g=s\) 。可知g是ax+by的最小线性组合。 推论: a和b互质的充要条件是存在x,y使 \(ax+by=1\) ,因为由上面的证明结论知道d(这里是1)一定是gcd(a,b)的倍数。 其实还可以推广到一堆数互质(这些数的gcd为1)的情况。 拓展欧几里得 我们知道,一般的 欧几里得算法是来求两个数的最大公因数的

线性基(模板)

删除回忆录丶 提交于 2019-11-26 17:40:48
这里是连接o(´^`)o 线性基性质: 1.原序列里面的任意一个数都可以由线性基里面的一些数异或得到。 2.线性基里面的任意一些数异或起来都不能得到0 0 3.线性基里面的数的个数唯一,并且在保持性质一的前提下,数的个数是最少的 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<queue> #include<set> #include<map> #include<vector> #define mem(a,b) memset(a,b,sizeof(a)) #define ll long long #define sl(x) scanf("%lld",&(x)) #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; int p[105]; void Insert(int now) { per(i,62,0) { if((now&((ll)1<<i))) { if(!p[i]) { p[i]=now; break; } now^=p[i]; } } } #undef int int main() { #define

8.线性回归之非线性回归

一个人想着一个人 提交于 2019-11-26 15:32:32
起步 非线性回归是线性回归的延伸,线性就是每个变量的指数都是 1,而非线性就是至少有一个变量的指数不是 1。生活中,很多现象之间的关系往往不是线性关系。选择合适的曲线类型不是一件轻而易举的工作,主要依靠专业知识和经验。常用的曲线类型有 幂函数,指数函数,抛物线函数,对数函数和S型函数 。 化非线性回归为线性回归 通过变量代换,可以将很多的非线性回归转化为线性回归。比如目标函数假设是 y = b0 + b1x + b2x^2 。那么另 z1 = x, z2 = x^2 。目标函数就变为 y = b0 + b1z1 + b2z2 。就可以用线性回归来解方程了而用上一篇文章《线性回归之多元线性回归》就能解决线性回归的问题。常见的转化模型有: 逻辑回归 逻辑回归是(Logistic Regression)是非线性回归中的一种,在分类问题上有的也能采用逻辑回归分类。这是一个二分器。比如根据肿瘤的大小来判断其良性或恶性,线性方程显然不能够胜任了: 逻辑回归模型中,先给定线性函数: 虽然这边是 θ 表示,但其实和线性回归中 b 是一个意思,都是作为自变量的系数。在二分类器中,经常需要一个分界线作为区分两类结果。再次需要一个函数进行曲线平滑化,由此引入 Sigmoid 函数进行转化: 这样,以0.5作为分界线。因此逻辑回归的最终目标函数就是: 回归就是用来得到样本属于某个分类的概率

[CF724G]Xor-matic Number of the Graph

好久不见. 提交于 2019-11-26 12:27:35
题目大意: 有一张$n$个点$m$条边的无向图,定义三元组$(u,v,s)$是有趣的,当且仅当有一条$u\to v$的路径,路径上所有边的异或和为$s$。问所有有趣的三元组的$s$之和。$n\leqslant10^5,m\leqslant2\times10^5,w\leqslant10^{18}$ 题解: 可知,$u,v$之间路径可能的异或和为任意一条$u->v$的路径再异或上若干个环。先$dfs$求出图中所有环,丢进线性基。令$dis[u]$为任意一条$1\to u$的路径异或和,$ans=\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^ns(dis[i]\oplus dis[j])$,$s(x)$表示$x$异或上若干线性基中的元素的和。而这可以通过枚举每一位的$01$来在$\log_2n$的时间复杂度内求出。 若现在考虑到了第$i$位,$dis$中第$i$位有$d_0$个是$0$,$d_1$个是$1$,线性基中有$m$个元素,这$m$个元素第$i$位有$b_0$个是$0$,$b_1$个是$1$。 $dis$异或出的第$i$位为$1$,有$d_0\times d_1$种方法,那么线性基中异或出来要是$0$,若$b_1=0$,线性基的方案数是$2^m$,否则为$2^{m-1}$ $dis$异或出的第$i$位为$0$,有$\dbinom{d_0}2+