Сообщение от oneguy
|
Есть 6 вариантов: [0, 0, 2], [0, 2, 0], [2, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 0]. Первые 3 выпадают с вероятностью 4/27, остальные - 5/27.
|
0002 x1 : 002
0012 x2 : 011
0022 x2 : 002
0112 x1 : 011
0122 x2 : 011
0222 x1 : 002
002 : 1+2+1 = 4x
011 : 2+1+2 = 5x
Да, всё верно. Это естественное распределение, так и должно быть.
function divide(a, n, m) {
if (n*m>a)
return;
var b=[], d=[], p=a-(m-1)*n-1;
for (var i=0; i<p; i++)
b[i]=i;
for (; i>a-m*n; i--) {
var c=Math.floor(Math.random()*i);
d.push(b[c]);
b[c]=b[i-1];
}
d.sort(function (x, y) {
return x-y;
});
d.push(p);
b.length=0;
b[0]=d[0]+m;
for (i=0; i<n-1; i++)
b.push(d[i+1]-d[i]+m-1);
return b;
}
var time1 = (new Date()).getTime();
divide(10000000, 3, 0);
var time2 = (new Date()).getTime();
alert(((time2-time1)/1000).toFixed(3) + " sec.");
Ой, даааа... Не завидую тому, кто миллиард туда влепит...
Так что ваше решение тоже пока не идеально.