【发布时间】:2019-04-09 07:55:14
【问题描述】:
所以我必须生成一个单项式向量。以下是我对任意顺序最多 3 个维度的操作:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int dim = 3;
int order = 2;
std::vector<std::vector<int>> powers;
for (int ord = 0; ord <= order; ord++) {
if (dim == 1) {
powers.push_back({ord});
} else if (dim == 2) {
for (int i = 0; i < ord + 1; i++) {
powers.push_back({i, ord - i});
}
} else if (dim == 3) {
for (int i = 0; i < ord + 1; i++) {
for (int j = 0; j < ord + 1 - i; j++) {
powers.push_back({i, j, ord - i - j});
}
}
} else if (dim == 4){
for (int i = 0; i < ord + 1; i++) {
for (int j = 0; j < ord + 1 - i; j++) {
for (int k = 0; k < ord + 1 - i - j; k++) {
powers.push_back({i, j, k, ord - i - j - k});
}
}
}
} else {
// "Monomials of dimension >= 4 not supported."
}
}
cout << "Finished!" << endl;
return 0;
}
现在我的目标是支持 N 个维度和第 N 个单项式顺序。关于如何将上面的代码扩展到 N 维空间的任何想法? 我没有看到一种简单的方法来实现上面的那个。我正在考虑使用组合数学并以某种方式消除额外的术语,但我不确定速度。
编辑(预期输出):
对于给定的输入 order = 2 和 dim = 3,预期的输出是(按此顺序不是必需的):
000
001
002
010
011
020
100
101
110
200
对于order = 1 和dim = 3:
000
001
010
100
对于order = 2 和dim = 2:
00
01
10
11
02
20
【问题讨论】:
-
你能举一个小功率的输入和期望结果的例子吗?
-
@MBo 谢谢,添加到 OP 中的“琐碎”案例的预期输出。
-
好的,我明白了。这是什么意思? :) 似乎是整数组合的组合生成,最大和
order和长度dim- 对吧? -
您的程序是否为
order=2和dim=3输出不同的内容?如果我在脑海中运行,我会得到002, 011, 020, 101, 110, 200。正确的预期输出是什么? -
@Mbo 你是对的。
标签: c++ math polynomial-math