循环i和j,其中i!= j

Joh*_*Dow 1 java math combinations combinatorics

例如,我需要得到2值数组的所有组合,数字为{0,1,2},其中这两个数字不相同.我明白了

0 1
0 2
1 0
1 2
2 0 
2 1
Run Code Online (Sandbox Code Playgroud)

我忽略了

0 0
1 1
2 2
Run Code Online (Sandbox Code Playgroud)

现在我用

  for (int i= 0; i < L ; i++) {
                for (int j = 0; j < L; j++) {
                    if (i!= j) {
Run Code Online (Sandbox Code Playgroud)

但它很慢?对此有何解决方案?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
Run Code Online (Sandbox Code Playgroud)

并使用sum-table计算它们的总和.

相关问题:将矩阵拆分为4个子矩阵,其总和之间的差异最小

所以对于matix,我有一条水平线和两条垂直线,我计算4个矩阵的总和,但是两条垂直线不应该包围一条大的垂直线,所以i!= j.

更新1对的顺序是相关的

got*_*ten 7

你可以通过以下方式改善性能:

for (int i= 0; i < L ; i++) {
                for (int j = i + 1 ; j < L; j++) {
System.out.println.(i + " " + j + "\n" + j + " " + i);
}}
Run Code Online (Sandbox Code Playgroud)

  • 两种情况的复杂度均为O(N²).在来自goten的opzimized版本中,他将通过外环运行N次,并且通过内环运行平均(N/2)次. (2认同)