Algorithm 为什么乘法是O(n^2)?

Algorithm 为什么乘法是O(n^2)?,algorithm,big-o,Algorithm,Big O,嗨,我正在学习大O,想知道为什么乘法是O(n^2)。我想我知道为什么,但我只是不确定。是因为乘法运算的时间长吗?我知道加法是线性时间O(n),如果我们进行二进制乘法,我们会首先将所有的位相乘并移位。在我们完成所有位的移位和相乘之后,我们将进行加法。我猜乘法的递归调用是O(n),结果的加法是O(n)。因此,梳理这两个运行时将得到O(n^2)。这是对的还是我走错了路? 编辑: 所以我想我要问的是为什么小学乘法是O(n^2) 谢谢首先,乘以什么?你在乘法吗,矩阵?你在乘法吗,多项式?你在乘法吗,整数?

嗨,我正在学习大O,想知道为什么乘法是O(n^2)。我想我知道为什么,但我只是不确定。是因为乘法运算的时间长吗?我知道加法是线性时间O(n),如果我们进行二进制乘法,我们会首先将所有的位相乘并移位。在我们完成所有位的移位和相乘之后,我们将进行加法。我猜乘法的递归调用是O(n),结果的加法是O(n)。因此,梳理这两个运行时将得到O(n^2)。这是对的还是我走错了路? 编辑: 所以我想我要问的是为什么小学乘法是O(n^2)

谢谢

首先,乘以什么?你在乘法吗,矩阵?你在乘法吗,多项式?你在乘法吗,整数?你是在乘浮点数吗?你是在乘,整数模素数吗

假设你在谈论小学时学过的整数乘法--

(天真的)小学算法是
O(n^2)
,因为当你用
n
数字乘以
m
数字时,你最终得到的是
m
移位后的
n
数字的总和,然后你必须相加。它包括用
m
数字网格写下大约一个
n+m
,然后将所有这些数字相加,因此在该方法中,您需要大约
n^2
时间和空间

然而,有许多更好的乘法方法,如俄罗斯农民乘法,对于非常大的数字,最快的方法大约可以实现
O(n logn)
时间。这些方法基于快速傅里叶变换,非常复杂

没有人知道如何证明乘法不能在
O(n)
时间内完成,理论上它是可能的

所以当你问

为什么乘法是O(n^2)


答案是,它不是,它到底是什么,我们不知道,它介于
O(n)
O(n log n)
之间。只有特定的算法是O(n^2)

向上投票,这不仅是因为这是正确的答案,也是因为你在9分钟内写的。那一定是某种记录。但是我认为如果有更多关于这个主题的材料的链接,答案会更好。对不起,我忘了把m位数字x和n位数字y相乘。如果是这样的话,我的第一条思路是正确的,因为我考虑的是长乘法吗?@RonnieGarcia:所以当你说这部分时,“我知道加法是线性时间O(n)如果我们做二进制乘法,我们会先把所有的位相乘,然后移位。在我们把所有的位移位相乘之后,我们会做加法。“这听起来像是俄国农民乘法。”。但是当你说“我猜乘法的递归调用是O(n),结果的加法是O(n)”,我不确定递归调用是什么。因此,编写真正的伪代码可能更好?@Juan Lopes:“那一定是某种记录”呵呵,都是一天的工作:)所以我不确定要添加哪些链接,我的意思是我可以添加到维基百科或其他东西的链接,但这感觉有点一文不值。如果你想要这些算法的参考资料,那么最好参考一些教科书或论文,即使我猜也是如此?但这需要做很多工作。我认为OP只关心gradeschool算法,也许是什么,不确定。@rbaryyoung:卷积在某些情况下肯定用于多项式乘法。我在文章中提到的整数算法是Schonage-Strassen算法,它更像是一系列卷积,而不是单个卷积iiuc