2014-03-27 39 views
0

的組合的說,我的陣列[0,1,2,3]和作爲輸入子集的陣列 - AS3

我想要的參數2的輸出是

0 0 
0 1 
0 2 
0 3 
1 0 
1 1 
1 2 
1 3 
2 0 
2 1 
2 2 
2 3 
3 0 
3 1 
3 2 
3 3 

的參數的長度決定了每個元組中組合的數量,而數組則用於生成數字。

有沒有一個快速的方法來做到這一點。

謝謝!

回答

2

哦,我不知道,但首先,我已經創建了combinationspermutations,並且在某個時間之後,我爲您的任務創建了實用方法。

var subsetTest:Array = []; 
subsetFill([0, 1, 2], [], subsetTest, 2); 
prettyPrint(subsetTest); 

private function subsetFill(values:Array, cursor:Array, result:Array, length:uint):void { 
    if (cursor.length > length) { 
     return; 
    } 
    if (cursor.length == length) { 
     result.push(cursor.slice()); 
    } 

    var i:uint, len:uint = values.length; 

    for (i; i < len; ++i) { 
     cursor.push(values[i]); 
     subsetFill(values, cursor.slice(), result, length); 
     cursor.length = cursor.length - 1; 
    } 
} 

//Auxiliary method for tracing 
private function prettyPrint(list:Array):void { 
    var i:uint, len:uint = list.length; 

    for (i; i < len; ++i) { 
     trace(list[i]); 
    } 
} 

和一個結果:

[trace] 0,0 
[trace] 0,1 
[trace] 0,2 
[trace] 1,0 
[trace] 1,1 
[trace] 1,2 
[trace] 2,0 
[trace] 2,1 
[trace] 2,2 

如果有人有興趣,我也可以分享combinationspermutations功能;)

+0

謝謝! xactly我想要的...輝煌.. – jamie

+0

嗨,有什麼辦法讓這個實現更快?我想長達10,但在這種情況下,它的計算量太大。我有一些方法可以在長度>需要的長度時使逃逸更有效率。非常感謝您的幫助! – jamie

+0

10?嗯,這是很多週期和原因這是非常密集的...如果你的數據不夠動態,你可以預先計算一次所提供的算法的值,或者你可以將這個算法移動到[Worker](http:///help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html) –

0

爲三個週期:

for(var i:int = 0; i < to_do.length; i++) { 
    for (var k:int = 0; k < to_do[i];k++){ 
     new_array.push(new Array()); 
     for (var j:int = 0; j < another_array.length; j++) { 
      new_array[k].push(another_array[j]); 
     } 
    } 
} 

這應該完成這項工作。

+0

感謝。但是輸出並不是我所期望的。它返回一個8個數組的數組,每個數組都有0 1 2和3的不同組合。 – jamie

+0

然後我誤解了你的問題 – Zhafur

+0

對不起,不好意思。我想要的是找到受to_do(2)長度限制的another_array [0,1,2,3]的所有組合。 – jamie