c++ - 是否有任何 O(n^2) 算法来生成数组的所有子序列?
问题描述
我想知道是否有任何 O(n^2) 复杂度算法来生成数组的所有子序列。我知道一种算法,但它需要 O((2^n)*n) 时间。
int main() {
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; ++i)
cin >> a[i];
int64_t opsize = pow(2,n);
for (int counter = 1; counter < opsize; counter++) {
for (int j = 0; j < n; j++) {
if (counter & (1 << j))
cout << a[j] << " ";
}
cout << endl;
}
}
解决方案
不
O(2^n)
仅仅因为存在O(2^n)
子序列,就不可能有任何低于复杂度的算法。您需要打印它们中的每一个,因此时间复杂度必须大于或等于O(2^n)
.
推荐阅读
- postgresql - 在 api Repository Typeorm 上使用 between 查询日期
- java - AppCompatActivity 在当前状态为 RESUMED 时尝试注册
- reactjs - 将所有现有选项卡转换为 vscode 中的空格
- angular - 如何通知客户过时的内容?
- firebase - 试图在 SwiftUI 中获取所有 Firebase 用户,但只获取一个,而不是登录用户?
- python - Firebase Cloud Function 在将数据发送到 Pub/Sub 主题时创建错误消息
- ios - 如何在演示期间更改 ViewController 的 NavigationBar 动画方式
- flutter - 如何在 Flutter web 中隐藏“Bearer token”?
- javascript - 为什么不一样?(JS)
- postgresql - 在 PostgresSql 中,如何删除值包含撇号的行?