Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


Информационный Канал Subscribe.Ru

RusFAQ.ru: Программирование на PHP

Выпуск № 238
от 19.10.2004, 09:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 386
Отправлено ответов: 791
Активность: 204.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Vril
Статус: Начальный
Общий рейтинг: 193.33
[Подробней >>]
Strory
Статус: Опытный
Общий рейтинг: 162.64
URL: МУАТ
Телефон: +7 (845-3) 54-16-74
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 379. Мастера, подскажите плиз как лучше сделать следующее: имеется таблица (см. приложение), в которой ка... (ответов: 2)

Вопросов: 1, ответов: 2


 Вопрос № 379

Мастера, подскажите плиз как лучше сделать следующее:
имеется таблица (см. приложение), в которой каждой строке сопостален рейтинг.
нужно выбрать случайную строку, чтобы вероятнось её выбора равнялась её рейтингу делённому на сумму рейтингов... т.е. чтобы в данном случае выбиралась так:
первая строка - вероятнось выбрать - 145/(145+23+45) = 0.68
вторая строка - вероятнось выбрать - 23/(145+23+45) = 0.11
третья строка - вероятнось выбрать - 45/(145+23+45) = 0.21


Приложение:


Вопрос отправлен: 16.10.2004, 02:21
Отправитель: dvp

[Следующий вопрос >>] [Список вопросов]

Отвечает Vril

Добрый день, dvp!
Самое простое решение (я не уверен что лучшее) - это создать массив, в котором соответсвующие элементы будут встречатся так часто насколько более велик его рейтинг, а потом выбирать из этого массива обыкновенным mt_rand ( 0 , count($array) - 1 )
Что это значит: в вашем случае можно взять массив из 10 элементов (это менее точно) или из 100 элементов (менее экономично) и в цикле заполнить 7( или 68) элементов значением 145,
1 (11) элемент - значением 23 и 2 (21) элемента - значением 45, а уже из выбранного массива выбирать случайный элемент с индексом mt_rand ( 0 , 9) или mt_rand ( 0 , 99).


Ответ отправлен: 18.10.2004, 09:43
Отправитель: Vril


Отвечает Strory

Доброе время суток, dvp!
Могу предложить алгоритм, а писать лень :(
Вобщем, высчитываем вероятности выбора и запихиваем в массив следующее(для предложенного варианта):
$a[0] => 0.00;
$a[1] => 0.68; // 0 + 0.68
$a[2] => 0.79; // 0.68 + 0.11
$a[3] => 1.00; // 0.79 + 0.21

Затем берем случайное число в диапозоне 0..1 и смотрим в цикле, попадает ли это число в диапозон от $a[$i-1]..$a[i]. Должен быть вариант и получше, но пока в голову больше ничего не пришло...

Ответ отправлен: 18.10.2004, 19:25
Отправитель: Strory



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (26)
C / C++ (17)
Perl (8)
Builder / Delphi (17)
Pascal (20)
Basic / VBA (9)
Java / JavaScript (7)
PHP (19)
Криптография (8)
WinAPI (15)
Радиоэлектроника (15)
Пользователю
Windows 95/98/Me (43)
Windows NT/2000/XP (61)
"Железо" (37)
Поиск информации (20)
Администратору
Windows NT/2000/XP (38)
Linux / Unix (16)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (6)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.phpplus
Отписаться

В избранное