2017/10/13
JS - 重複組合
給兩個序列 a 跟 b ,在不改變 a 和 b 序列順序的情況下,列出所有 a 跟 b 混合後的結果
使用[重複組合](https://zh.wikipedia.org/wiki/%E7%B5%84%E5%90%88#.E9.87.8D.E8.A4.87.E7.B5.84.E5.90.88.E7.90.86.E8.AB.96.E8.88.87.E5.85.AC.E5.BC.8F)的概念,兩個序列混合後的結果等同於其中一個序列的 index 的組合
舉例來說序列 a 為 `--`,序列 b 為 `**`,其所有混和結果為:
```
--**
-*-*
*--*
-**-
*-*-
**--
```
共六種,而我們可以把 a 序列所在的 index 寫出:
```
1,2
1,3
2,3
1,4
2,4
3,4
```
而這是 C4取2 的所有組合結果。
假設已知 b 序列長度為 6,我們可以使用迴圈生成組合。
```
var set = {
"a":['b','b','b','b'],
"b":['3','4','5','6','7','8']
}
var n = set['a'].length + set['b'].length;
var c = [];
for(var i1 = 0 ; i1 < n ; i1 ++)
for(var i2 = i1+1 ; i2 < n ; i2 ++)
for(var i3 = i2+1 ; i3 < n ; i3 ++)
for(var i4 = i3+1 ; i4 < n ; i4 ++)
for(var i5 = i4+1 ; i5 < n ; i5 ++)
for(var i6 = i5+1 ; i6 < n ; i6 ++){
var ab = [];
for(var i = 0 ; i < n ; i ++)
ab.push('a');
ab[i1] = 'b';
ab[i2] = 'b';
ab[i3] = 'b';
ab[i4] = 'b';
ab[i5] = 'b';
ab[i6] = 'b';
var c0 = [];
var index = {"a":0,"b":0};
for(var i = 0 ; i < n ; i ++){
c0.push(set[ab[i]][index[ab[i]]]);
index[ab[i]] = index[ab[i]] + 1;
}
c.push(c0);
console.log(c0);
}
```
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言