列表中所有元素组合的BigO时间复杂度

2024-06-25 22:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图分析函数fun(最坏情况)的时间复杂性。此功能需要三个输入参数:

  • 大小为n的列表a
  • 整数threshold
  • 连接矩阵conectivityMatrix,大小为n乘以n。不管这个连接性矩阵代表什么,只要认为它为列表a的每对元素分配一个整数就足够了。它必须是对称的。此矩阵的值是任意的(始终为整数)

现在,函数fun具有以下形式

import numpy as np
from itertools import combinations

def fun(a, threshold, conectivityMatrix):
    sizeA = len(a)
    alreadyAdded = set()
    for i in range(sizeA):
        validIndexes = tuple(j for j in range(i, sizeA) if conectivityMatrix[i,j] < threshold) 
        for l in range(len(validIndexes),1,-1):
            for c in combinations(validIndexes, l):
                subset = frozenset(c)
                if any(subset.issubset(aSubset) for aSubset in alreadyAdded): continue
                for iP1, iP2 in combinations(c, 2):
                    if conectivityMatrix[iP1, iP2] > threshold: break
                else:
                     alreadyAdded.add(subset)
    return alreadyAdded

因此,函数fun返回一组a索引的组合,这些组合满足它们在连接矩阵中的各自值小于阈值,并且前提是它们没有被添加到另一个更大的组合中

那么,在最坏的情况下,函数的O()复杂度是多少?我的问题实际上是从定义这个“最坏情况”开始的,因为我不知道它是否对应于连接矩阵的所有值都大于阈值的情况,因为尽管组合的数量是最大的,但它会产生较少的子比较


Tags: 函数inforthresholdif情况range矩阵