Python 双for循环的时间复杂度

Python 双for循环的时间复杂度,python,time-complexity,Python,Time Complexity,我试着问自己以下代码的时间和空间复杂度是多少。这是为了从单词列表中吐出一个字谜 def ana(input_): results = [] for key, word1 in enumerate(input_): a=set([i for i in word1]) for word2 in input_[key+1:]: b=set([i for i in word2]) if len(set(a)-

我试着问自己以下代码的时间和空间复杂度是多少。这是为了从单词列表中吐出一个字谜

def ana(input_):
    results = []
    for key, word1 in enumerate(input_):
        a=set([i for i in word1])
        for word2 in input_[key+1:]:
            b=set([i for i in word2])
            if len(set(a)-set(b))==0 and len(set(b)-set(a))==0:
                if word1 not in results:
                    results.append(word1)
                if word2 not in results:
                    results.append(word2)
对于时间复杂度,第一个For循环表示至少有N次迭代。我对第二个for循环感到困惑。它肯定小于N,但大于logn。 应如何注意这一点

就空间复杂性而言:
这只是为了存储结果。这是否正确?

TLDR:大小为N-1+N-2+…+的嵌套循环N-N仍在^2上

外部循环完全迭代输入-对于大小为N的输入,循环贡献了一个ON因子。这意味着该函数至少总共开启

内部循环通过输入_u[key+1:]进行迭代,key的范围从0到N-1。这意味着在第一次迭代中,它已经打开,但在最后一次迭代中,它有O1。这意味着函数的总长度介于^2和ON之间

您现在已经可以快速估计复杂性了。前几个内部迭代对+ON-1+有贡献。。。等等即使我们查看所有迭代的前半部分,最后一部分仍然对/2有贡献。因为ON-1=ON和ON/2=ON,我们肯定有N/2个ON循环。这就给出了ON/2*N=ON^2的复杂性

您还可以精确地计算迭代-这种情况类似于。内部循环总共执行N-1+N-2+…+N-N+1+N-N次迭代。这可以重新排序为N-1+N-N+N-2+N-N+1+。。。i、 e.剩余最低/最大的成对电缆

每对的值为N-1+N-N或仅为N-1。 将我们最初的N个术语重新排列成对意味着我们有N/2对。 这意味着所有对的总和为N-1*N/2


换句话说,内部循环总共进行了N-1*N/2次迭代。这就是-1*N/2=ON*N=ON^2复杂度。

从时间复杂度的扩展角度来看,时间复杂度更容易理解。内部循环仍然是N的顺序。因为迭代列表中的项目的一半(例如,当键基本上处于中间标记时),如果列表中的项目总数翻倍,则必须迭代的项目总数仍将翻倍。请注意,任何形式为N-1或N/2的小于N的项目仍然是N的顺序。