Реализации алгоритмов/Комбинаторика/Размещения: различия между версиями

Нет описания правки
м
}
 
</source>
 
== Javascript ==
 
<source lang="Javascript">
function PermutationsWithRepetition(src, len){
var K = len - 1, k = 0,
N = src.length, n = 0,
out = [],
stack = [];
function next(){
while (true) {
while (n < src.length) {
out[k] = src[n++];
if (k == K) return out.slice(0);
else {
if (n < src.length) {
stack.push(k);
stack.push(n);
}
k++;
n = 0;
}
}
if (stack.length == 0) break;
n = stack.pop();
k = stack.pop();
}
return false;
}
function rewind(){ k = 0; n = 0; out = []; stack = []; }
function each(cb) {
rewind();
var v;
while (v = next()) if (cb(v) === false) return;
}
return {
next: next,
each: each,
rewind: rewind
};
}
 
/* пример использования */
 
var perms = PermutationsWithRepetition([1, 2, 3, 4, 5], 3);
 
perms.next(); // [1, 1, 1]
perms.next(); // [1, 1, 2]
//...
perms.next(); // [5, 5, 4]
perms.next(); // [5, 5, 5]
perms.next(); // false
 
perms.rewind();
perms.next(); // [1, 1, 1]
//...
 
perms.each(function(v){ console.log(v); }); // вывод всех размещений в консоль
</source>
 
Анонимный участник