对于Python中的该算法,我的运行时估计是否正确?

对于Python中的该算法,我的运行时估计是否正确?,python,algorithm,runtime,big-o,Python,Algorithm,Runtime,Big O,下面的代码是我最近做的一个挑战。我估计这个函数的运行时间是O(n^2),但我有点不确定这是否正确,因为if语句行有点昂贵,我不知道应该在多大程度上将其考虑到我的计算中 主代码中的If条件说明 计数器->运行时O(n)的Dict构造方法,操作为O(1) j不在tupleVal中->O(n)运行时 主代码 from collections import Counter def funWith(texts): words = set() tuples = (0,) for i in

下面的代码是我最近做的一个挑战。我估计这个函数的运行时间是
O(n^2)
,但我有点不确定这是否正确,因为if语句行有点昂贵,我不知道应该在多大程度上将其考虑到我的计算中

主代码中的If条件说明

计数器
->运行时O(n)的Dict构造方法,操作为O(1)

j不在tupleVal中
->O(n)运行时

主代码

from collections import Counter

def funWith(texts):
   words = set()
   tuples = (0,)
   for i in range(0,len(text)):
       for j in range(i+1,len(text)):
           if Counter(text[i]) == Counter(text[j]) and j not in tuples :
              tuples +=(j,)
              words.add(text[i])
   return (sorted(list(words)) if len(words) > 0 else text)

text = ["cncvbn", "fdhfh", "anagrartyrtyms","cnvcbn"]

print(funWithAnagrams(text))
谢谢你的帮助


谢谢

我将使用
时间.性能计数器
而不是估算。这基本上保留了一个计时器,显示程序运行的时间,是“性能计数器”的缩写。我会先启动它,运行你的程序,然后捕获它所花费的时间。这将是您真正的运行时。更多信息在这里:

要确定big-O的复杂性,需要使用多种不同的输入大小进行测试,然后找出它们之间的关系。是的。这似乎是一个合理的估计方法,但又是一个乏味的任务。你能仅仅通过看代码就知道估算值吗?我认为它是
O(n^3)
,因为循环取O(n^2),然后
if
行可以表述如下:
O(3n)
->
O(n)
,因此它会给你
O(n^3)
。如果有人错了,请纠正我。您可以进行一些优化,这些优化不会影响big-O,比如只比较长度相同的字符串。不要每次循环都创建新计数器,而是遍历输入列表一次,然后创建计数器列表。@Barmar谢谢。您的第二条评论是实现最佳解决方案的好方法@@AzyCrw4282我想到了这个解决方案,但我也持怀疑态度。Barmar,你能确认它是否是O(n^3)吗?谢谢,是的。连接元组是O(n),并且有O(n^2)个循环迭代。为什么需要一个元组,使用一个集合?