Ответы пользователя по тегу Алгоритмы
  • Как выбрать случайный элемент из списка с учётом его веса?

    @Picknice
    Веб-программист (FULL STACK)
    Можно такой подход. Интересно критику почитать.
    var banners = [];
    // Генерируем тестовый массив баннеров
    for( var i = 1; i <= 5; i++ ){
    	banners.push( {
    		data: i,
    		w: Math.floor( Math.random() * 1000 ) + 1 // Вес баннера от 1 до 1000 к примеру
    	} );
    }
    console.log(banners);
    var wt = 0; // Сумма веса всех баннеров
    for( var i = 0; i < banners.length; i++ ){
    	var banner = banners[i];
    	banner.bound = wt += banner.w; // Определяем границу, которая зависит от веса
    }
    console.log(banners); // Проверить наглядно какие границы созданы
    // Генерируем число от 0 до wt
    var r = Math.floor( Math.random() * wt + 1 );
    for( var i = 0; i < banners.length; i++ ){
    	// Ищем какой баннер попал в полученное случайное число
    	var banner = banners[i];
    	if( r > banner.bound - banner.w && r < banner.bound ){
    		console.log('banner ' + banner.data); // В итоге при таком подходе вероятность выпадения более ценного баннера выше, главное чтоб вес был > 0, иначе баннер найден неправильно.
    	}	
    }
    Ответ написан
    8 комментариев