根据 O'Reilly 的 Python in a Nutshell 一书中的 Alex Martelli 所说,复杂度类
根据维基百科的定义,在函数分析中,线性函数是一个线性映射,其中一个示例是
也许可以期望两个线性方程的和能够在图表上被表示为一条直线,该直线会显示出类似于代表每一个方程的直线之间的平均值。
那么我是否正确理解即使在下面这两个函数中,“复杂”函数需要处理的时间是“简单”函数的三倍,它们在大O符号表示法中都是O(n)呢?因为处理时间的弧线会在图表上被表示成一条直线,而时间差异会被表示成更复杂函数的角度更尖锐。
O(n) + O(n) = O(n)
。所以我相信它。但是我有些困惑。他解释道:"N 的两个线性函数之和也是 N 的线性函数"。根据维基百科的定义,在函数分析中,线性函数是一个线性映射,其中一个示例是
f(x+y) = f(x) + f(y)
。这里找到了一个更简单的定义,简单地说明“线性函数是其图形为直线的函数”。它还包括一些比维基百科文章更少玄学的例子。y = f(x) = a + bx
并且:
y = 25 + 5x
let x = 1
then
y = 25 + 5(1) = 30
let x = 3
then
y = 25 + 5(3) = 40
也许可以期望两个线性方程的和能够在图表上被表示为一条直线,该直线会显示出类似于代表每一个方程的直线之间的平均值。
那么我是否正确理解即使在下面这两个函数中,“复杂”函数需要处理的时间是“简单”函数的三倍,它们在大O符号表示法中都是O(n)呢?因为处理时间的弧线会在图表上被表示成一条直线,而时间差异会被表示成更复杂函数的角度更尖锐。
from timer import Timer
def complex(it):
result = []
for i in it:
result.append(i)
result.reverse()
return result
def simple(it):
result = list(it)
longlist = list(range(0, 1000000))
with Timer() as t:
reverse_(longlist)
print "=> elapsed time reverse: %s." % t.secs
with Timer() as t:
straight(longlist)
print "=> elapsed time straight: %s" % t.secs