我一直在阅读关于矩阵向量乘法(BLAS2)和矩阵乘法(BLAS3)的性能优化的大量papers。我想考虑这些优化是否/如何应用于O(n ^ 2)和O(n ^ 3)算法,这些算法不会干净地减少到密集或稀疏线性代数。
很容易找到NP-complete或NP-hard算法的列表,但我还没有找到常见(而不是那么常见)多项式时间算法的良好分解。任何人都可以建议一个多项式时间问题列表,其中最着名的算法是O(n ^ 2)或O(n ^ 3)?
编辑:为了使这更具体,我正在寻找像this list of NP-complete problems这样的东西,但是对于多项式问题而不是n ^ 2或n ^ 3算法。
答案 0 :(得分:3)
首先:值得注意的是,二级和三级BLAS操作的复杂性实际上是正式的O(n)和O(n ^ 3/2);输入矩阵本身就是人们通常所认为的二次方式" n"。
通常用于密集线性代数的技术并不直接适用于其他问题域,因为它们倾向于大量使用问题的线性。
下一步:O(n ^ 2)算法的一些最常见的例子是用于排序,整数乘法和计算离散傅里叶变换的朴素算法。在所有这些情况下,存在具有较低复杂度的更好算法。同样,存在大量天真的O(n ^ 3)算法。
可以应用密集线性代数技术来计算DFT(因为它也是线性的),但是你可以通过使用其中一种FFT算法做得更好,所以在实践中没有人这样做。
就非天真的算法而言,由于我必须教授复杂性课程,所以它已经太久了; IIRC,用于判断字符串是否在无上下文语言中的最着名的算法是O(n ^ 3)。