【问题标题】:How is linear algebra used in algorithms?算法中如何使用线性代数?
【发布时间】:2009-07-06 04:28:38
【问题描述】:

我的几位同行都提到“线性代数”在学习算法时非常重要。我研究了各种算法并参加了一些线性代数课程,但我没有看到其中的联系。那么线性代数在算法中是如何应用的呢?

例如,图的连接矩阵可以带来哪些有趣的东西?

【问题讨论】:

    标签: algorithm linear-algebra


    【解决方案1】:

    三个具体例子:

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

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

    【讨论】:

    • 补充:图形的布局是用线性代数完成的;建造东西所需的材料可以用 LA 计算:de.wikipedia.org/wiki/Gozinto;
    • 我还要补充一点,线性分组码(纠错码类 - 基于有限域上的线性代数(不过,这并不是人们通常所学的线性代数)。跨度>
    • +1 用于 3D 图形。不知道矩阵/向量/四元数(好的四元数不在线性代数中)你不会走得太远。事实上,你什么也得不到:)
    【解决方案2】:

    密码学家可能会告诉您,在学习算法时,掌握数论非常重要。他是对的——对于他的特定领域。统计也有它的用途——跳过列表、哈希表等。图论的用处就更明显了。

    线性代数和算法之间没有内在联系; 数学和算法之间有着内在的联系。

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

    【讨论】:

      【解决方案3】:

      哈,我忍不住把这个放在这里(尽管其他答案很好):

      The $25 billion dollar eigenvector.

      我不会撒谎...我什至从来没有读过整本书...也许我现在会:-)。

      【讨论】:

      • 将发布 PageRank 都是线性代数。你明白了!
      【解决方案4】:

      我不知道我是否会将其表述为“线性代数在学习算法时非常重要”。我几乎会反过来说。许多、许多、许多现实世界的问题最终都需要你解决一组线性方程。如果你最终不得不解决其中一个问题,你将需要了解处理线性方程的许多算法中的一些。其中许多算法是在计算机成为工作时开发的,而不是机器。例如,考虑高斯消除和各种矩阵分解算法。例如,关于如何解决非常大的矩阵的这些问题,有很多非常复杂的理论。

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          正如您可能已经猜到的,线性代数在计算机代数的许多算法中也很重要。例如,如果您可以将问题简化为多项式为零,其中多项式的系数在变量 x1, …, xn 中是线性的,那么您可以通过以下方式求解 x1, …, xn 的哪些值使多项式等于 0将每个x^n 项的系数等于 0 并求解线性系统。这称为未定系数法,例如用于计算部分分数分解或积分有理函数。

          对于图论,邻接矩阵最酷的一点是,如果你对未加权图(每个条目是 0 或 1)取邻接矩阵的 n 次方,M^n,那么每个条目 @987654325 @ 将是从顶点 i 到长度为 n 的顶点 j 的路径数。如果这不只是很酷,那么我不知道是什么。

          【讨论】:

            【解决方案7】:

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

            作为一个元答案,我要补充一点,你可能在你的算法中使用线性代数而不知道它。使用 SSE(2) 优化的编译器通常通过并行处理许多数据值来向量化您的代码。这本质上是基本的洛杉矶。

            【讨论】:

              【解决方案8】:

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

              一些例子:

              • 机器学习/统计算法:线性回归(最小二乘、岭、套索)。
              • 信号和其他处理(人脸识别等)的有损压缩。见Eigenfaces

              【讨论】:

                【解决方案9】:

                例如,图的连接矩阵可以带来哪些有趣的东西?

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

                这是一个很好的启发式方法来确定两个图是否 是同构的,因为当然相等并不能保证同构的存在。

                查看algebraic graph theory 了解许多其他有趣的技术。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-09-28
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-13
                  • 1970-01-01
                  相关资源
                  最近更新 更多