Random разница плоского и вложенного массива
Приветствую, товарищи, особенно тех приветствую, кто нормально учился, в отличие от меня. :D Я совершенно не понимаю статистику, помогите понять, буду ли я одинаково получать случайные значения, если буду получать их из плоского массива или вложенного.
Вот пример: var arr_1 = ['a', 'b', 1, 2, 3]; var arr_2 = [['a', 'b'], 1, 2, 3]; // Для плоского var value_1 = arr_1.randomValue(); // Для вложенного var value_2 = arr_2.randomValue(); if(value_2.length) { value_2 = value_2.randomValue(); } Будет ли значение 'a', в обоих случаях появляться с одинаковым шансом, или придётся сначала разворачивать массив? p.s. метод randomValue я добавил к массиву и для простаты указываю его. |
Цитата:
Потом посмотреть результат. ;) |
В первом варианте у меня выпадало чаще... :)
const arr = [ ['a', 'b', 1, 2, 3], [['a', 'b'], 1, 2, 3] ]; const n = 1000000 let t = performance.now() arr.forEach((a, i) => { console.log('Вариант %s.', i + 1) let cnt = 0 for (let i = 0; i < n; i++){ let v = rnd(a) if (Array.isArray(v)) v = rnd(v) if (v === 'a') cnt++ } const p = 100 / n * cnt console.log('Вероятность %s% ', p) }) t = Math.floor(performance.now() - t) console.log('Время затрачено %sмлс', t) // function rnd(a){ if (!a.length) return null const i = Math.floor(Math.random() * a.length) return a[i] } |
BlancoDima,
в идеальном случае 1 вариант 100/5 = 20%, 20% что выпадет a. 2 вариант для a будет 100/4/2 = 12.5%. вариант ksa, наглядно это подтверждает. |
Понял наконец как считать, моя интуиция тут пасовала.
Спасибо!:thanks: |
Часовой пояс GMT +3, время: 22:44. |