【发布时间】:2015-06-30 13:28:14
【问题描述】:
据我了解,乘法的复杂度是二次的,所以如果将两个 1 位数字相乘将有 1 个操作,两个 2 位数字相乘将有 4 个操作,两个 3 位数字 9操作等等。
我想通过简单地将两个数字相乘的程序的执行时间来了解这种复杂性。没想到,不管数字大小,执行时间都是一样的。
import time
num1 = 135
num2 = 342
start = time.time()
total = num1 * num2
finish = time.time()
elapsed = finish - start
print elapsed
所以如果我将两个 3 位数字或两个 30 位数字相乘,结果是 9.53674316406e-07。
我误会了什么?
【问题讨论】:
-
“据我所知,乘法的复杂度是二次的” - 是什么让你这么认为?以十进制计算数字毫无意义,一方面,因为计算机将处理数字的二进制表示。
-
为什么投反对票?这是一个有效的问题。
-
按照这个解释@jonrsharpe stackoverflow.com/questions/487258/…
-
对于大数字它应该。我认为他对小数字感到困惑。
-
Python 使用 Karatsuba 乘法算法进行大整数乘法,该算法将数字相乘 O(n^1.585),而不是 O(n^2)。