【发布时间】:2018-08-07 18:58:20
【问题描述】:
我无法弄清楚这个函数的时间和空间复杂度是多少。
vector<vector<string>> stringCombinations(const vector<vector<string>> &values) {
vector<vector<string>> results = {{}};
for(const auto &vec: values) {
vector<vector<string>> temp;
for(const auto &r: results) {
for(const auto &s: vec) {
temp.push_back(r);
temp.back().push_back(s);
}
}
results = move(temp);
}
for(const auto &row: results) {
for(const auto &s: row) {
cout << s << " ";
}
cout << endl;
}
return results;
}
这个函数只是字符串的笛卡尔积。给定一个字符串向量的向量,它会打印并返回这些字符串的所有组合。
当看到 3 个嵌套循环时,我立即认为它的时间复杂度大致在 O(n3) 的范围内。但是,随着函数继续运行,第二个循环的长度会发生变化。在第一次迭代时,向量中只有一个元素是空向量。在第二次迭代中,它包含长度为 1 的 n 向量,其中 n 是第一个字符串向量的长度。所以我真的不确定这会如何影响事情。
至于空间复杂度,由于用于存储结果的二维向量,我认为它在 O(m*n) 左右。我只是不确定m 和n 到底是什么。
【问题讨论】:
标签: time-complexity complexity-theory asymptotic-complexity space-complexity