【发布时间】:2012-10-01 14:35:46
【问题描述】:
def filter(f, lst):
if lst == []: return []
if f(lst[0]): return [lst[0]] + filter(f, lst[1:])
return filter(f, lst[1:])
def my_reverse(lst): # Reverse the list
def reverse_helper(x,y):
if x == []: return y
return reverse_helper(x[1:], [x[0]] + y)
return reverse_helper(lst, [])
def revfilter_alpha(f, lst): # Reverse and filter ...
return my_reverse(filter(f, lst))
def revfilter_beta(f, lst): # Reverse and filter ...
if lst == []: return []
return revfilter_beta(f, lst[1:]) + ([lst[0]] if f(lst[0]) else [])
有人可以向我解释如何以 Big Θ 表示法确定这些的运行时间吗?我已经阅读了很多东西,但仍然不知道从哪里开始。
在filter 中,我认为它是 Θ(n^2),因为它使用谓词函数 f 检查大小为 n 的列表中的每个元素,并进行 n 个递归调用,因此 n*n。
revfilter_beta 看起来非常相似,只是在过滤时反转,所以这不也是 Θ(n^2) 吗?
revfilter_alpha 会过滤然后反向,所以这不是 n^2*n^2 = Θ(n^4) 吗?
有人有什么想法吗?
【问题讨论】:
-
filter中进行了多少次递归调用?真的是n * n吗? -
顺便说一句,
filter和reverse一样是内置的,你也可以称它为my_filter -
现在我不确定我是否正确开始......:P
-
注意:通常称为Big O notation。
Θ(n)提供比O(n)更严格的界限。