Показать сообщение отдельно
  #9 (permalink)  
Старый 23.12.2020, 15:00
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от рони
не вижу условий для перекоса, вероятность одинакова для всех комбинаций,
Совсем не так!
На большом количестве тестов варианты, например,
[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.

Последний раз редактировалось voraa, 23.12.2020 в 15:13.
Ответить с цитированием