我有一个简单的函数reverseWords(),它显示字符串中的单词。输入a S=“this is a string”将输出“siht si a gnirts”
我想知道这个函数的大O是什么。是O(N)、O(N^2)还是O(N*M)?在
def reverseWords(S):
# code in Python 2.7
listA = S.split()
output = []
for element in listA:
output.append(element[::-1])
return (" ".join(output))
是O(N)、O(N^2)还是O(N*M)?在
它是
O(N)
。我想你不确定的部分是:这里要注意的是,尽管我们确实有嵌套循环(在
listA
及其每个元素中的字符上),但处理的字符总数仍然只有O(N)
。如果k
是每个单词中的平均字母数,那么您可以认为时间是N/k
(对于外循环)*k
(对于内环)=N
。在一个更直接(我认为更好)的分析方法是思考,“我需要为每个角色做什么”?公司名称:
split()
中的新字符串listA
上推进迭代器(同样,少于一次,每个单词只执行一次)output
(每个单词一次)join()
做什么(如果你在意,我请你调查一下,或者相信我的话O(total length of all strings)
)。在因此,如果列表的附录、内存分配等都是摊销的}。在
O(1)
,在CPython中它们是摊销的,那么总的时间复杂度是O(N)
,包括{因为正确的术语很重要,因为它是}。在
O(N)
,所以它也是{相关问题 更多 >
编程相关推荐