我有一个简单的函数,reverseWords(),它隐藏了字符串中的单词。例如。输入S =“这是一个字符串”给出“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)?
答案 0 :(得分:5)
它是O(N)
。我认为你不确定的部分是:
for element in listA:
output.append(element[::-1])
这里需要注意的是,虽然我们确实有嵌套循环(超过listA
及其每个元素中的字符),但处理的字符总数仍然只有O(N)
。如果k
是每个单词中的平均字母数,那么您可以将时间视为N/k
(对于外循环)* k
(对于内循环)= {{ 1}}。
更直接(我说更好)分析它的方法是思考,"我需要为每个角色做什么"?:
N
split()
split()
(再次,不到一次,每个单词只有一次)listA
(每个单词一次)output
做什么(如果您愿意,我邀请您进行调查,或者接受我的话join()
)。因此,如果列表追加,内存分配等等都是分摊的O(total length of all strings)
,在CPython中它们是,那么整体时间复杂度为O(1)
,包括O(N)
因为正确的术语很重要,因为它join()
因此O(N)
也是如此。