我的几位同行都提到,“线性代数”在学习算法时非常重要。我研究了各种算法并参加了一些线性代数课程,但我没有看到其中的联系。那么线性代数是如何在算法中使用的呢?
例如,图的连接矩阵可以带来哪些有趣的东西?
我的几位同行都提到,“线性代数”在学习算法时非常重要。我研究了各种算法并参加了一些线性代数课程,但我没有看到其中的联系。那么线性代数是如何在算法中使用的呢?
例如,图的连接矩阵可以带来哪些有趣的东西?
三个具体例子:
基本上归结为线性代数在处理多个变量时是一种非常强大的方法,并且在设计算法时将其用作理论基础有巨大的好处。在许多情况下,这个基础并不像你想象的那么明显,但这并不意味着它不存在。您很可能已经实现了如果没有 linalg 将很难推导出的算法。
密码学家可能会告诉您,在学习算法时,掌握数论非常重要。他是对的——对于他的特定领域。统计也有它的用途——跳过列表、哈希表等。图论的用处就更明显了。
线性代数和算法之间没有内在联系;数学和算法之间有内在的联系。
线性代数是一个有很多应用的领域,因此利用它的算法也有很多应用。你没有浪费时间研究它。
我不知道我是否会将其表述为“线性代数在学习算法时非常重要”。我几乎会反过来说。许多、许多、许多现实世界的问题最终需要你解决一个一组线性方程。如果您最终不得不解决其中一个问题,您将需要了解处理线性方程的许多算法中的一些。其中许多算法是在计算机成为职位时开发的,而不是例如,考虑高斯消元和各种矩阵分解算法。例如,关于如何解决非常大的矩阵的这些问题,有很多非常复杂的理论。
机器学习中最常见的方法最终都有一个优化步骤,需要求解一组联立方程。如果您不了解线性代数,您将完全迷失方向。
许多信号处理算法都基于矩阵运算,例如傅里叶变换、拉普拉斯变换、...
优化问题通常可以简化为求解线性方程组。
正如您可能已经猜到的那样,线性代数在计算机代数的许多算法中也很重要。例如,如果您可以将问题简化为多项式为零,其中多项式的系数在变量 中是线性的,那么您可以通过使每个项的系数相等来x1, …, xn
求解x1, …, xn
使多项式等于 0 的值x^n
为 0 并求解线性系统。这称为未定系数法,例如用于计算部分分数分解或积分有理函数。
对于图论,邻接矩阵最酷的一点是,如果您对未加权图(每个条目是 0 或 1)取邻接矩阵的 n 次方M^n
,那么每个条目i,j
将是来自顶点的路径数到长度i
的顶点。如果这不只是很酷,那么我不知道是什么。 j
n
这里的所有答案都是算法中线性代数的好例子。
作为元答案,我将补充说您可能在您的算法中使用线性代数而不知道它。使用 SSE(2) 进行优化的编译器通常通过并行处理许多数据值来向量化您的代码。这本质上是基本的洛杉矶。
例如,图的连接矩阵可以带来哪些有趣的东西?
矩阵的许多代数性质在顶点排列下是不变的(例如 abs(determinant)),所以如果两个图是同构的,它们的值将相等。
这是确定两个图是否非同构的良好启发式方法的来源,因为当然相等并不能保证同构的存在。
检查代数图论以了解许多其他有趣的技术。