【发布时间】:2014-03-01 01:46:55
【问题描述】:
例如,我需要获取具有数字 {0, 1, 2} 的 2 值数组的所有组合,其中这两个数字不相同。 我明白了
0 1
0 2
1 0
1 2
2 0
2 1
我忽略了
0 0
1 1
2 2
现在我用
for (int i= 0; i < L ; i++) {
for (int j = 0; j < L; j++) {
if (i!= j) {
但它很慢? 有什么解决办法吗? L 将 > 4000。
我正在做的是找到将矩阵拆分为 4 个子矩阵的每个组合
例子:
3 | 0 2 -8 -8
5 | 3 2 2 3
2 | 5 2 1 4
-------------------
3 4 -1 | 4 2
-3 6 2 | 4 3
并使用 sum-table 计算它们的总和。
相关问题:Split matrix into 4 sub-matrices with lowest difference between their sum
所以对于 matix,我有一条水平线和两条垂直线,我正在计算 4 个矩阵的总和,但两条垂直线不应该产生一条大垂直线,所以 i != j。
UPDATE 1 对的顺序是相关的
【问题讨论】:
-
您在谈论至少 15,996,000 种组合。是的,它会很慢。
-
其实它是在另一个for循环中循环,所以我真的需要一个手
-
@JohnDow:你需要检查所有 1600 万个组合吗?因为没有一种更快的方式来做你想做的事。
-
@JohnDow 你无法回避这样一个事实,即有 1600 万种组合。那只是数学。你真正想要的是只生成你真正需要的东西——如果没有更多关于你使用这些数字的信息,我们无法帮助你。
-
这里只是挑剔,但由于每个 2 值数组中的数字顺序是相关的,因此您要查找的词是 permutations,而不是 组合.
标签: java math combinations combinatorics