Джерело
BW Swift | Реалізація зваженого рандому на Swift!В Swift рандомний вибір з колекц...
791 Охват/переглядів
2025-07-28 16:37
Повідомлення №1920
Реалізація зваженого рандому на Swift!В Swift рандомний вибір з колекції простий - викликаєш arr.random і погнали. Але що робити, якщо є потреба надати перевагу деяким елементам над іншими? Уявіть, у вас є масив [A, B, C], і ви хочете вплинути на вирогідність рандомного вибору певного елементу. Наприлад, 20% для A, 50% для B, і 30% для C. Стандартний рандом не враховує ваги. Тому я вирішив написати функцію, яка може. Надихнув подібний функціонал у Python. >>>> От тут можна подивитися на слайди. Функція randomElement(with probs:) приймає масив коефіцієнтів ймовірностей. Послідовність елементів має відповідати послідовності оригінального масиву. Функція використовує кумулятивні вирогідності та мапить надані ваги у вихідні, що безпосередньо враховуються при рандомізації. Якщо просто, кумулятивність полягає у тому, що кожен елемент в масиві представляє суму всіх попередніх вирогідностей + поточна. Коли кумулятивний ряд зібраний, генеруємо "справжній рандом" від 0 до 1. Результатом буде перший елемент, кумулятивна вага якого перевищує "справжньо рандомізоване" значення. Ця функція чодово підійде для: - Зважених рекомендацій - показати певні продукти з більшою вирогідністю ніж інші. - Ігрові механіки- Динамічний UI Ну і ця функція (для мене) є важливим доповненям до попереднього посту (власні вектори), у контексті більш складної задачі =) ------------------------------Я часто пишу і писав різні здебільшого технічні цікавинки на моєму Linkedin. Можеш підписатися, якщо було цікаво =)