validProductsArray = []
i = 0
j = i + 1
while i < len(products) and j < len(products):
if i != j:
prodiDominate = 0
prodjDominate = 0
for k in range(len(preferences)):
if preferences[k][1] == 1:
if products[i][preferences[k][0]] > products[j][preferences[k][0]]:
prodiDominate += 1
else:
prodjDominate += 1
elif preferences[k][1] == -1:
if products[i][preferences[k][0]] < products[j][preferences[k][0]]:
prodiDominate += 1
else:
prodjDominate += 1
if prodiDominate > prodjDominate:
validProductsArray.append(products[i])
j += 1
i += 1
return validProductsArray
例如,一个简单的循环(请参见下面的循环)的时间复杂度为O(nb_cycle),因为运行循环所花费的时间与循环数(nb_cycle)成正比]
for i in range(nb_cycle):
print(i)
如果您有嵌套的代码,则时间复杂度会成倍增加。再次使用for循环作为示例(请参见下文),您可以看到print(i, j)
被称为nb_cycle * nb_cycle_inner,从而使时间变得复杂:O(nb_cycle * nb_cycle_inner)
for i in range(nb_cycle): for i in range(nb_cycle_inner) print(i, j)
按照此逻辑,您的代码为三个嵌套循环,分别具有长度len(products)
,len(products) - 1
,len(preferences)
,这使时间复杂度为O(len(products)^ 2 * len(preferences))
但是,时间复杂度在很大程度上取决于确定运行时流程的控制语句。
并且按照规则,我们忽略了时间复杂度中的常数和非主导项。
例如如果代码中有两个循环,一个接一个(非嵌套),则为0(2N)。但是去掉2(常数)就变成O(N)。或在O(N ^ 2 + N)的情况下变为O(N ^ 2)。
O(Prod^2 * Pref)
。验证不是很困难,因为成对的产品循环本身是二次的,并且您遍历所有首选项进行引导。通常,这种算法不能很好地扩展,特别是当产品数量增加时。