向量,矩阵,线性基

向量矩阵线性基OI...

向量,矩阵,线性基

向量

定义

既有大小又有方向的量称为向量,记作 \(\vec{a}\)
如果这个向量还有一个起点,那么它就成为了一条有向线段。

有向线段三要素
起点,方向,长度。

有向线段 \(\overrightarrow{AB}\) 的长度称为 \(\overrightarrow{AB}\) 的模,记作 \(|\overrightarrow{AB}|\)

运算

向量加法

向量的加法遵循如下原则:

  • 三角形法则
    如果要相加的向量首尾顺次连接,那么最终的结果是第一个向量的起始点指向最后一个向量的终点。
  • 平行四边形法则
    如果要相加的向量共用一个起点,那么它们的和向量为以这两个向量为邻边的平行四边形的起点为两个向量共有的起点的对角线。

同时,向量的加法满足交换律与结合律

向量减法

向量的减法 \(\vec{a} - \vec{b}\) 可以看作 \(\vec{a} + (-\vec{b})\)

\(-\vec{b}\) 是一个模与 \(\vec{b}\) 相等,方向相反(\(\theta = \pi\))的向量。

如果我们已知两点 \(A, B\),现在要求 \(\overrightarrow{AB}\),我们可以使用 \(\overrightarrow{OB} - \overrightarrow{OA}\) 来解决。

屏幕截图 2023-09-01 212944.png

从图中不难发现,\(\vec{b} - \vec{a} = \vec{c}\),由于 \(\vec{c}\) 的模和方向都与 \(\overrightarrow{AB}\) 相等(平移变换),所以 \(\vec{b} - \vec{a} = \overrightarrow{AB}\)

向量减法的几何意义
共起点向量的差向量是由减向量指向被减向量的有向线段。

向量数乘

定义一个实数 \(\lambda\) 与向量 \(\vec{a}\) 的积也为一个向量,称为向量的数乘运算,记作 \(\lambda\vec{a}\)。结果向量的方向和长度定义如下:

  • \(|\lambda\vec{a}| = |\lambda||\vec{a}|\)
  • \(\lambda = 0\)\(\lambda\vec{a} = \vec{0}\)
  • \(\lambda > 0\) 时,方向与 \(\vec{a}\) 相同,否则相反。

矩阵

定义

对于矩阵 \(A\),主对角线是指 \(A_{i,i}\) 上的元素。
\(I\) 表示单位矩阵,就是主对角线上为 \(1\),其余位置为 \(0\) 的矩阵。
如果两个矩阵,行数与列数对应相同,则称为同型矩阵。

运算

矩阵转置

通过在矩阵右上角写一个 \(T\) 表示将该矩阵的行和列互换。

\[A = \begin{bmatrix} 1 & 2 & 3 \newline 4 & 5 & 6 \newline 7 & 8 & 9 \end{bmatrix} A^T = \begin{bmatrix} 7 & 4 & 1 \newline 8 & 5 & 2 \newline 9 & 6 & 3 \end{bmatrix} \]

\[B = \begin{bmatrix} 1 & 2 & 3 \newline 4 & 5 & 6\end{bmatrix} B^T = \begin{bmatrix} 4 & 1 \newline 5 & 2 \newline 6 & 3\end{bmatrix} \]

矩阵乘法

矩阵的乘法是向量内积的推广。

内积
已知两个向量 \(\vec{a}, \vec{b}\),它们的夹角为 \(\theta\),那么:
\(\vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}| \cos \theta\)
内积的结果是标量而非向量。
内积满足交换律,垂直的向量的内积为 \(0\)

矩阵乘法只能在同型矩阵间运算。
设矩阵 \(A\) 大小为 \(P \times M\)\(B\) 大小为 \(M \times Q\)
那么 \(A\)\(B\) 相乘的结果矩阵 \(C\) 的第 \(i\) 行第 \(j\) 列元素为:

\[\sum^M_{k = 1}A_{i, k}B_{k, j} \]

线性基

群是由一种集合以及一个二元运算所组成的,符合群公理的代数结构,二元运算用 \(\cdot\) 表示。
若一个集合 \(G\) 和一个二元运算符满足如下四条性质(群公理):

  • 封闭性\(\forall a, b \in G, a \cdot b \in G\)
  • 结合律\(\forall a, b, c \in G, (a \cdot b) \cdot c = a \cdot (b \cdot c)\)
  • 单位元:存在一个元素 \(e \in G\)\(\forall a \in G, e \cdot a = a \cdot e = a\)
  • 逆元\(\forall a \in G\),存在一个元素 \(b\) 使得 \(a \cdot b = b \cdot a = e\)

则将 \((G, \cdot)\) 称为一个群。
如果一个群还满足交换律,则称其为阿贝尔群或交换群。

线性空间

线性空间是由向量集合 \(V\)、域 \(\Bbb{P}\)、加法运算 \(+\) 和数乘组成的模类代数结构。

线性相关,线性无关

一组向量被称为线性相关,如果存在不全为零的标量(即不全为零的系数),可以将其中至少一个向量线性组合得到另一个向量。换句话说,向量集合 \({v_1, v_2, \cdots, v_n}\) 是线性相关的,如果存在标量 \(c_1, c_2, \cdots, c_n\),其中至少有一个不等于零,使得以下方程有非零解:

\[c_1v_1 + c_2v_2 + \cdots + c_nv_n = 0 \]

这意味着这些向量之间存在某种线性关系,它们不是相互独立的。
否则称这组向量线性无关。

线性基

对于向量组 \(a_1, a_2, \cdots, a_n\),其张成空间上的一组基称为该向量组的线性基。


一个向量空间的基是一个线性无关的向量集合,它可以用来表示该向量空间中的任何向量。

比较常用的线性基中的向量限定于 \(\Bbb Z_2^n\) 下,即每个向量可以看作一个二进制数,同时它的长度为 \(n\),即每个向量都是一个三维向量,这些向量的加法就相当于异或,本文只讨论限定向量于 \(\Bbb Z_2^n\) 下的线性基。
一般地,我们会动态的向这个线性基内插入元素。
插入一个元素 \(x\) 到线性基 \(b\) 中的方法如下:

  1. 遍历 \(b\),设当前元素为 \(b_i\),那么 \(x \gets \min(x, x \oplus b_i)\)
  2. 如果 \(x\) 变为 \(0\),说明 \(b\) 内的元素已经可以异或出 \(x\),结束。
  3. 否则将 \(x\) 插入 \(b\),再次遍历 \(b\)\(b_i \gets \min(b_i, b_i \oplus x)\)

这样构造出来的线性基一定是线性无关的,并且每个元素的最高位各不相同,如果某个元素的最高位为第 \(i\) 位,那么其他元素在第 \(i\) 位上都为 \(0\)
结论很容易证明:
当你向一个满足此性质的线性基(空集也算)插入元素时,如果异或上 \(b_i\) 可以让 \(x\) 变小,那么此时异或一定比不异或更优,因为后面的元素在这一位上都是 \(0\),后面就无法消除这一位的 \(1\) 了。
还需要注意,如果构造的线性基比原集合小,说明原集合可以异或出 \(0\)

模板题:

点击查看 【模板】线性基 代码
#define int ll
int n, ans;
vector <int> B;
void insert(int x) {
for (auto b : B) x = min(x, x ^ b);
if (!x) return;
for (auto &b : B) b = min(b, b ^ x);
B.emplace_back(x);
}
signed main() {
cin >> n;
rep (i, 1, n) {
int e;
cin >> e;
insert(e);
}
for (auto b : B) ans ^= b;
cout << ans << endl;
}
点击查看 [TJOI2008] 彩灯 代码
int n, m;
vector <ll> B;
void insert(ll x) {
for (auto b : B) x = min(x, x ^ b);
if (!x) return;
for (auto &b : B) b = min(b, b ^ x);;
B.emplace_back(x);
}
signed main() {
cin >> n >> m;
rep (i, 1, m) {
ll res = 0;
rep (j, 1, n) {
char c;
cin >> c;
int f = (c == 'O');
res <<= 1, res += f;
}
insert(res);
}
cout << (1ll << B.size()) % 2008;
return 0;
}
posted @   Arknights_Aak  阅读(96)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
点击右上角即可分享
微信分享提示