gpt4 book ai didi

c++ - C++程序的时空复杂性

转载 作者:行者123 更新时间:2023-12-01 14:52:25 25 4
gpt4 key购买 nike

#include<iostream>
#include<vector>

using namespace std;

vector <int> removeFirstOrder(const vector<int>& orders)
{
return vector<int>(++orders.begin() , orders.end());
}

bool isFirstComeFirstServed(const vector<int>& takeOutOrders,
const vector<int>& dineInOrders,
const vector<int>& servedOrders)
{
//base case
if(servedOrders.empty())
{
return true;
}

if(!takeOutOrders.empty() && takeOutOrders[0]==servedOrders[0])
{
return isFirstComeFirstServed(removeFirstOrder(takeOutOrders),
dineInOrders,removeFirstOrder(servedOrders));

}

else if(!dineInOrders.empty() && dineInOrders[0]==servedOrders[0])
{
return isFirstComeFirstServed(takeOutOrders, removeFirstOrder(takeOutOrders),
removeFirstOrder(servedOrders));

}

else
{
return false;
}
}


int main()
{
vector<int> takeOutOrders{17,8,4};

vector<int> dineInOrders{12,19,2};
vector<int> servedOrders{17,8,12,19,24,2};
isFirstComeFirstServed(takeOutOrders,dineInOrders,servedOrders);



return 0;
}

我的怀疑是程序的作者在这里说它具有O(n ^ 2)的时间复杂度和O(n ^ 2)的空间复杂度。

我同意此程序的时间复杂度,因为isFirstComeFirstServed函数将被调用n次,它的大小是servedOrders Vector的大小吗?和removeFirstOrder将在isFirstComeFirstServed的第一个函数调用中调用n次,在isFirstComeFirstServed的第二个函数调用中调用n-1次,依此类推,直到serveOrder Vector中没有元素了吗?

但是我的疑问是O(n ^ 2)空间的复杂度如何?有人可以帮助我形象化吗?

最佳答案

每次调用removeFirstOrder时,返回的 vector 都小1。

n-1 + n-2 + n-3 + ... + 1

根据 arithmetic progression规则,总和为(n + 1)* n / 2,即n ^ 2阶。

Tail call优化可以使其成为场景后的O(n)空间,但不能保证完全执行该操作。

关于c++ - C++程序的时空复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62329159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com