Сообщение от рони
|
не вижу условий для перекоса, вероятность одинакова для всех комбинаций,
|
Совсем не так!
На большом количестве тестов варианты, например,
[1] [2,3,4,5,6,7] и [1,2] [3,4,5,6,7]
Должны встречаться примерно одинаковое количество раз
Теперь смотрим
<pre>
<script>
function splitSet (set) {
const random = a => Math.trunc(Math.random() * a);
let {length} = set = set.slice(0), ar = [], n = 1 + random(length - 1);
for (let i = 0; i < n; i++) {
let k = random(length - i);
ar.push(...set.splice(k, 1))
}
return [set, ar];
}
let v1 =0;
let v2=0;
for (let i = 0; i < 100_000; i++) {
let [s1, s2] = splitSet([1,2,3,4,5,6,7])
//document.write(`[[${s1}],[${s2}]], ${s1.length}, ${s2.length}<br>`)
if (s1.length == 1 && s1[0] ==1) v1++
if (s1.length == 2 && s1[0] ==1 && s1[1] == 2) v2++
}
document.write(`[1] - ${v1} [1,2] - ${v2}`)
</script>
</pre>
Сообщение от рони
|
и нет череды бесполезных циклов.
|
Цикл. один. И тот в подавляющем числе случаев выполняет только одну итерацию
Кроме случаев что все элементы оказались в одном множестве.
Для 7 элементов - вероятность 1/64.