的組合的說,我的陣列[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
的參數的長度決定了每個元組中組合的數量,而數組則用於生成數字。
有沒有一個快速的方法來做到這一點。
謝謝!
的組合的說,我的陣列[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
的參數的長度決定了每個元組中組合的數量,而數組則用於生成數字。
有沒有一個快速的方法來做到這一點。
謝謝!
哦,我不知道,但首先,我已經創建了combinations
和permutations
,並且在某個時間之後,我爲您的任務創建了實用方法。
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
如果有人有興趣,我也可以分享combinations
和permutations
功能;)
爲三個週期:
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]);
}
}
}
這應該完成這項工作。
謝謝! xactly我想要的...輝煌.. – jamie
嗨,有什麼辦法讓這個實現更快?我想長達10,但在這種情況下,它的計算量太大。我有一些方法可以在長度>需要的長度時使逃逸更有效率。非常感謝您的幫助! – jamie
10?嗯,這是很多週期和原因這是非常密集的...如果你的數據不夠動態,你可以預先計算一次所提供的算法的值,或者你可以將這個算法移動到[Worker](http:///help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html) –