0
Victorbiz
22.07.15
✎
13:39
|
Есть алгоритм написанный на javascript Комбинаторикf. Генератор размещений из N по M без повторений.
Не могу додумать как его переделать чтоб на входе был массив допустим resources ["a","b","c"], а на выходе другой массив уже с перебором arrangements ["abc","acb","bac" и т.д.]
function Calculate( resources, set, Msize, arrangements ) {
var Nsize = set.length;
if ( Nsize < Msize ) throw {
"source" : "Msize", "message" : resources[ "m" ]
};
var tset = [ ];
for ( var i in set )tset.push( set[ i ].value );
var used = [ ];
var arranged = [ ];
var cur = "";
function placement_lex( pos ) {
if ( pos == Msize ) {
arranged[ arranged.length ] = cur;
return;
}
for ( var i = 0;
i < Nsize;
++ i ) {
if ( ! used[ i ] ) {
used[ i ] = true;
cur += tset[ i ];
placement_lex( pos + 1 );
cur = cur.substring( 0, cur.length - tset[ i ].length );
used[ i ] = false;
}
}
}
placement_lex( 0 );
var i = 1;
for ( var a in arranged ) {
var rec = arrangements.AddNewRecord( );
rec.num = i ++;
rec.arrangement = arranged[ a ];
}
}
|
|