这个天真的解决方案的关键是什么?
What is the Big O of this naive solution?
这是一个接受两个输入字符串的简单函数。 returns 如果第二个字符串是第一个字符串的变位词,则为真。
def validAnagram(str1, str2):
if len(str1) != len(str2):
return False
str1_arr = [char for char in str1]
str2_arr = [char for char in str2]
for char in str1_arr:
if char in str2_arr:
str2_arr.remove(char)
else:
return False
return True
我正在学习计算我编写的程序的大 O。这个函数的运行时间是 O(N2) 还是 O(N3)?
我假设它的 O(N3) 因为“if”条件也运行 O(N)。所以它的 3 个嵌套 O(N) 操作,导致 O(N3) 运行时间。如有不妥请指正
是O(N^2)
。您有 O(N)
次迭代,其中执行了 O(N)
次操作。这导致 O(N^2)
整体复杂性。
我认为你错了,计算这部分是 O(N^2)
,而实际上是 O(N)
:
if char in str2_arr:
str2_arr.remove(char)
因为这里有 O(N) + O(N)
,它仍然只是 O(N)
。
这是一个接受两个输入字符串的简单函数。 returns 如果第二个字符串是第一个字符串的变位词,则为真。
def validAnagram(str1, str2):
if len(str1) != len(str2):
return False
str1_arr = [char for char in str1]
str2_arr = [char for char in str2]
for char in str1_arr:
if char in str2_arr:
str2_arr.remove(char)
else:
return False
return True
我正在学习计算我编写的程序的大 O。这个函数的运行时间是 O(N2) 还是 O(N3)?
我假设它的 O(N3) 因为“if”条件也运行 O(N)。所以它的 3 个嵌套 O(N) 操作,导致 O(N3) 运行时间。如有不妥请指正
是O(N^2)
。您有 O(N)
次迭代,其中执行了 O(N)
次操作。这导致 O(N^2)
整体复杂性。
我认为你错了,计算这部分是 O(N^2)
,而实际上是 O(N)
:
if char in str2_arr:
str2_arr.remove(char)
因为这里有 O(N) + O(N)
,它仍然只是 O(N)
。