2017/10/13

JS - 重複組合

給兩個序列 a 跟 b ,在不改變 a 和 b 序列順序的情況下,列出所有 a 跟 b 混合後的結果
使用重複組合的概念,兩個序列混合後的結果等同於其中一個序列的 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);
}

沒有留言: