Стикнувся зі схожим на останню задачу питанням. Допоможіть будь-ласка, як правильно вирахувати сприятливі події, якщо б номер банкнот містив би більше 10 цифр (скажімо 20 наприклад), а треба щоб була присутня кожна цифра хоч один раз. Тобто останнє запитання, тільки для більшої кількості комірок. Вже другий день "голову ламаю", але щось не сходиться!
Можу помилятися. Кількість всіх варіантів 10^20. Будемо віднімати варіанти, які не підходять, тобто ті, в яких цифра 0, 1, ... 9 не зустрічається. Таких варіантів 9^20*10. Але за теоремою про додавання множин з непорожнім перетином ми маємо додати варіанти з відсутніми 2 цифрами (бо відняли їх двічі на попередньому кроці): 8^20*C(2,10). За тією ж теоремою тепер треба відняти номери з трьома відсутніми цифрами: 7^20*C(3,10) тощо. Тобто в результаті виходить: 10^20-9^20*C(1,10)+8^20*C(2,10)-7^20*C(3,10)+6^20*C(4,10)-5^20*C(5,10)+4^20*C(6,10)-3^20*C(7,10)+2^20*C(8,10)-1^20*C(9,10). Можливо, є простіший варіант.
@@vyshamathematica О! Дуже дякую. Треба буде програмку розрахунку таких ймовірностей написати. Порахував. Вийшло біля 21.5% - схоже на правду. Я от тільки у Вашій відповіді не зрозумів 2 питання: чому зверху Ви пишете 8^10*C(2,10), а знизу 8^20*C(2,10)? Мабуть перше - це описка. І чому у самому кінці віднімаємо 1?
@@МаркизКарабас-о6б щиро дякую за зауваження. Ви праві, наробила помилок. У попередньому повідомленні виправила їх. Для програми можна використовувати властивість для комбінації, що C(k,n)=C(n-k,n). Ви через цикл робили розрахунок сприятливих варіантів?
@@vyshamathematica Так. Через цикл кількість мабуть прийдеться робити, бо довжина виразу напряму залежить від кількості чисел(тобто діапазону). І схоже для (160;800) мабуть може не підрахувати, бо вийде за діапазон примітивних типів. Але скажімо (70;140) без проблем повинно підраховувати.
Порахував для (10;33) - 71,86%, а от для (10;50) вже майже 95%, тобто не дивно що (161;800) у мене спрацювало з першого разу... А от я потім намагався міняти на 800 на 400, 600 і 700 і жодного разу не вивело мені усі числа. Хоча генератор випадкових чисел не зовсім то й випадково працює, тому його і кличуть "псевдогенератором".
def C(k,n): n = range(1,n+1) return len(list(combinations(n, k))) C(2,13) * C(2,17) / C(4,30) Всі мені казали вчи математику щоб стати програмістом. Я вважаю що якраз навпаки
Дуже вдячна за чітке і зрозуміле пояснення розв'язування комбінаторних задач.
Дякую, дуже допомогли🙏
Стикнувся зі схожим на останню задачу питанням. Допоможіть будь-ласка, як правильно вирахувати сприятливі події, якщо б номер банкнот містив би більше 10 цифр (скажімо 20 наприклад), а треба щоб була присутня кожна цифра хоч один раз. Тобто останнє запитання, тільки для більшої кількості комірок. Вже другий день "голову ламаю", але щось не сходиться!
Можу помилятися. Кількість всіх варіантів 10^20. Будемо віднімати варіанти, які не підходять, тобто ті, в яких цифра 0, 1, ... 9 не зустрічається. Таких варіантів 9^20*10. Але за теоремою про додавання множин з непорожнім перетином ми маємо додати варіанти з відсутніми 2 цифрами (бо відняли їх двічі на попередньому кроці): 8^20*C(2,10). За тією ж теоремою тепер треба відняти номери з трьома відсутніми цифрами: 7^20*C(3,10) тощо. Тобто в результаті виходить: 10^20-9^20*C(1,10)+8^20*C(2,10)-7^20*C(3,10)+6^20*C(4,10)-5^20*C(5,10)+4^20*C(6,10)-3^20*C(7,10)+2^20*C(8,10)-1^20*C(9,10).
Можливо, є простіший варіант.
@@vyshamathematica О! Дуже дякую. Треба буде програмку розрахунку таких ймовірностей написати. Порахував. Вийшло біля 21.5% - схоже на правду. Я от тільки у Вашій відповіді не зрозумів 2 питання: чому зверху Ви пишете 8^10*C(2,10), а знизу 8^20*C(2,10)? Мабуть перше - це описка. І чому у самому кінці віднімаємо 1?
@@МаркизКарабас-о6б щиро дякую за зауваження. Ви праві, наробила помилок. У попередньому повідомленні виправила їх. Для програми можна використовувати властивість для комбінації, що C(k,n)=C(n-k,n). Ви через цикл робили розрахунок сприятливих варіантів?
@@vyshamathematica Так. Через цикл кількість мабуть прийдеться робити, бо довжина виразу напряму залежить від кількості чисел(тобто діапазону). І схоже для (160;800) мабуть може не підрахувати, бо вийде за діапазон примітивних типів. Але скажімо (70;140) без проблем повинно підраховувати.
Порахував для (10;33) - 71,86%, а от для (10;50) вже майже 95%, тобто не дивно що (161;800) у мене спрацювало з першого разу... А от я потім намагався міняти на 800 на 400, 600 і 700 і жодного разу не вивело мені усі числа. Хоча генератор випадкових чисел не зовсім то й випадково працює, тому його і кличуть "псевдогенератором".
def C(k,n):
n = range(1,n+1)
return len(list(combinations(n, k)))
C(2,13) * C(2,17) / C(4,30)
Всі мені казали вчи математику щоб стати програмістом. Я вважаю що якраз навпаки