C++ 理解两个嵌套while循环的时间复杂性

C++ 理解两个嵌套while循环的时间复杂性,c++,data-structures,time-complexity,C++,Data Structures,Time Complexity,下面的代码块来自一个函数,该函数查找实现用户给定的特定数量所需的最小硬币数。这里使用了两个队列“总和”和“成本” while(Sums.front()<=TargetSum){ int tempSum = Sums.front(); Sums.pop(); int tempCost = Costs.front(); Costs.pop(); for(int i=0;i<TypesOfCoins;i++) { Sum

下面的代码块来自一个函数,该函数查找实现用户给定的特定数量所需的最小硬币数。这里使用了两个队列“总和”和“成本”

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();
        }
    }
}

while(Sums.front()下面的两个示例具有相同的复杂性,即使
n
不同。它们的复杂性或大O是O(InputData*1),即O(InputData):

int n=10;
FuncA(int InputData)
{
for(int i=0;i

int n=100000000;
FuncB(整型输入数据)
{
对于(int i=0;i
n
是一个常数,这意味着依赖于
n
的任何循环都具有O(1)复杂性

InputData
不是常数,这意味着依赖于
InputData
的任何循环都具有O(InputData)复杂性

总复杂度=所有循环的复杂度=>O(InputData*1)

请注意,两个函数的“完成时间”是不同的(因为
n
更大,硬件速度等等)。但“计算复杂性”是相同的:无论哪个循环是内循环,也不管常量有多大(
n

编辑:

一个好主意:如果你有一个问题,你知道如何解决它,但它只需要10年的时间。这会很复杂吗


答案是否定的,它不是复杂的,它是简单的,只是需要时间。(代码< N>代码>在我的例子中是处理某事物的时间,但是这个过程没有复杂性,它只是重复一段时间)。由于
TypesOfCoins
(内部循环范围)是一个常数(不依赖于正在处理的任何输入),那么复杂度就不是n^2。代码的复杂度也不是它的迭代次数。@KyleKhalaf不是O(1)复杂性?我还在学习,但这对我来说是有意义的。@Annabelle或OP,如果一个循环迭代相同的次数,不管输入数据是什么(意味着循环范围不依赖于输入),那么这个循环的复杂性是O(1)(这是~=将不被考虑).我会给你一个简单的例子作为回答,因为我想我知道你想理解什么。
int n = 10;
FuncA(int InputData)
{
    for(int i = 0; i < n; i++) // n is outer loop. 
    {
        for(int j = 0; j < InputData; j++) 
        {
            // .. do stuff
        }
    }
}
int n = 100000000;
FuncB(int InputData)
{
    for(int i = 0; i < InputData; i++)
    {
        for(int j = 0; j < n; j++) // n is inner loop
        {
            // .. do stuff
        }
    }
}