我试图分析函数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()
复杂度是多少?我的问题实际上是从定义这个“最坏情况”开始的,因为我不知道它是否对应于连接矩阵的所有值都大于阈值的情况,因为尽管组合的数量是最大的,但它会产生较少的子比较
目前没有回答
相关问题 更多 >
编程相关推荐