【发布时间】:2017-07-14 16:01:06
【问题描述】:
以下代码块来自一个函数,该函数查找达到用户给定的特定数量所需的最小硬币数量。这里使用了两个队列“sums”和“costs”。
while(Sums.front()<=TargetSum){
int tempSum = Sums.front();
Sums.pop();
int tempCost = Costs.front();
Costs.pop();
for(int i=0;i<TypesOfCoins;i++)
{
Sums.push(coins[i]+tempSum);
Costs.push(tempCost+1);
if(Sums.back()==TargetSum)
{
cout<<"Sums:"; DisplayQueue(Sums);
cout<<"Cost:"; DisplayQueue(Costs);
return Costs.back();
}
}
}
据我所知,对于嵌套循环,时间复杂度是最内层循环迭代的次数,所以这个循环的时间复杂度应该是 O(n^2),不是吗?
【问题讨论】:
-
你认为“n”是什么?总和大小()? TypesOfCoins?
-
我将“TypesOfCoins”视为“n”。
-
因为
TypesOfCoins(内循环范围)是一个常数(不依赖于正在处理的任何输入),所以复杂度不是n^2。代码的复杂性不是它迭代了多少次。 -
@KyleKhalaf 不会是 O(1) 复杂度吗?我仍在学习它,但这对我来说很有意义。
-
@Annabelle 或 OP,如果一个循环迭代 相同的次数 无论输入数据是什么(意味着循环范围不依赖于输入),那么这个复杂度循环是 O(1) (这 ~= 不会被考虑在内)。我将为您提供一个直接的示例作为答案,因为我想我知道您想要理解的内容。
标签: c++ data-structures time-complexity