算法中如何使用线性代数?

时间:2009-07-06 04:28:39

标签: algorithm linear-algebra

我的几个同行已经提到“线性代数”在研究算法时非常重要。我研究了各种算法,并参加了一些线性代数课程,但我没有看到这种联系。那么算法中如何使用线性代数?

例如,一个有趣的东西可以用图表的连接矩阵吗?

9 个答案:

答案 0 :(得分:45)

三个具体的例子:

  • 线性代数是现代3d图形的基础。这与你在学校学到的基本相同。数据保存在投影在2d表面的3d空间中,这就是您在屏幕上看到的内容。
  • 大多数搜索引擎都基于线性代数。我们的想法是将每个文档表示为超空间中的向量,并查看向量在此空间中如何相互关联。这由lucene project使用。见VSM
  • 一些现代压缩算法(例如ogg vorbis格式使用的算法)基于线性代数,或者更具体地说是基于Vector Quantization的方法。

基本上,它归结为线性代数在处理多个变量时是一种非常强大的方法,并且在设计算法时使用它作为理论基础有很大的好处。在许多情况下,这个基础并不像你想象的那么明显,但这并不意味着它不存在。你很可能已经实现了在没有linalg的情况下很难得到的算法。

答案 1 :(得分:15)

密码学家可能会告诉你,在研究算法时掌握数论是非常重要的。他是对的 - 因为他的特殊领域。统计数据也有其用途 - 跳过列表,哈希表等。图论的有用性更加明显。

线性代数和算法之间没有固有的联系; 数学与算法之间存在固有的联系。

线性代数是一个具有许多应用的领域,因此利用它的算法也有很多应用。你没有浪费你的时间研究它。

答案 2 :(得分:11)

哈,我无法抗拒把它放在这里(即使其他答案都很好):

The $25 billion dollar eigenvector

我不会撒谎......我甚至从未读过整件事...也许我现在会: - )。

答案 3 :(得分:5)

我不知道我是否会将其称为“线性代数在研究算法时非常重要”。我几乎把它放在另一边。很多很多现实问题最终都要求你解决一组线性方程式。如果你最终必须解决其中一个问题,你将需要了解一些处理线性方程的算法。许多算法是在计算机作为职称时开发的。例如,考虑高斯消元法和各种矩阵分解算法。例如,对于如何解决非常大的矩阵的问题,有一个非常复杂的理论。

机器学习中最常见的方法最终会有一个优化步骤,需要求解一组联立方程。如果你不知道线性代数,那么你将完全迷失。

答案 4 :(得分:5)

许多信号处理算法基于矩阵运算,例如傅里叶变换,拉普拉斯变换,...​​...

通常可以将优化问题简化为求解线性方程组。

答案 5 :(得分:4)

线性代数在计算机代数中的许多算法中也很重要,正如您可能已经猜到的那样。例如,如果您可以减少一个问题,即多项式为零,其中多项式的系数在变量x1, …, xn中是线性的,那么您可以求出x1, …, xn的多项式值通过将每个x^n项的系数等于0并求解线性系统来等于0。这被称为未确定系数的方法,并且例如用于计算部分分数分解或集成有理函数。

对于图论,关于邻接矩阵的最酷的事情是,如果你对非加权图(每个条目是0或1)M^n取邻接矩阵的n次幂,那么每个条目i,j将是从顶点ij的顶点n的路径数量{{1}}。如果这不仅酷,那么我不知道是什么。

答案 6 :(得分:2)

这里的所有答案都是算法中线性代数的很好的例子。

作为一个元回答,我将补充说你可能在你的算法中使用线性代数而不知道它。使用SSE优化的编译器(2)通常通过并行处理许多数据值来对代码进行矢量化。这基本上是元素LA。

答案 7 :(得分:2)

这取决于什么类型的“算法”。

一些例子:

  • 机器学习/统计算法:线性回归(最小二乘,脊,套索)。
  • 信号的有损压缩和其他处理(面部识别等)。请参阅Eigenfaces

答案 8 :(得分:1)

  

例如,一个有趣的东西可以用图表的连接矩阵吗?

矩阵的许多代数性质在顶点排列下是不变的(例如abs(行列式)),因此如果两个图是同构的,它们的值将是相等的。

这是确定两个图表的良好启发式的来源 是同构,因为当然平等并不能保证同构的存在。

检查algebraic graph theory以了解其他许多有趣的技巧。