- 1
- 2
- 3
- 4
- 5
- 6
- 7
<?
$arr = array(2,1,1,1,1);
echo $arr[rand(0,count($arr)-1)];
/*вероятность двойки 20%, 5 чисел = 100%, 1 число = 20%. Так и делается, ничего не говнокод.
И в других языках по этому же принципу.
*/
?>
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+159
<?
$arr = array(2,1,1,1,1);
echo $arr[rand(0,count($arr)-1)];
/*вероятность двойки 20%, 5 чисел = 100%, 1 число = 20%. Так и делается, ничего не говнокод.
И в других языках по этому же принципу.
*/
?>
Человек спросить, как сделать псевдорандом с вероятностью выпадения числа в 20 процентов. Вот что ему ответили.
Dummy00001 12.06.2014 23:52 # +3
но табличное задание вероятностей дело не новое и само по себе не говно.
если мне надо нелинейные вероятности, я как правило мулю какую функцию (типично интерполяцией) которая выдает нужное мне распределение на [0,1) и применяю ее к drand48(). ну а дальше как обычно.
guest 13.06.2014 13:15 # +1
Dummy00001 13.06.2014 13:53 # 0
рандом с нелинейным распределением вероятностей результата.
в общем случае, рандом должен (и это есть качество хорошего ранодома) выдавать каждое из возможных значений с одинаковой вероятностью.
одинаковые вероятности в каждой точке == график есть прямая линия == линейное распределение.
нелинейное распределение: график есть не прямая линия, а кривая.
wvxvw 13.06.2014 15:20 # 0
С чем я да могу согласится с кодом из ОП, так это то, что для эмуляции выборки без повторений с небольшим диапазоном можно использовать массив / кучу / дерево, но гораздо универсальнее использовать гипер-геометрические формулы, т.как из них можно получить некоторые данные с меньшим усилием (типа вероятносетй, что желаемый результат окажется в каком-то диапазоне).
defecate-plusplus 13.06.2014 16:15 # +1
т.е. bell curve так называется вовсе не потому, что похожа на колокол? о как
> закон Ципфа так же известный как экспоненциальное распределение
"работа лампы osram, так же известная, как электричество"
kegdan 13.06.2014 16:26 # 0
врет он все
нет никакой кривой Белла
wvxvw 13.06.2014 17:47 # 0
kegdan 13.06.2014 18:02 # 0
а чеж тогда р(к) = а/к? Экспоненту от гиперболы не отличаем?
>> Mathew's law
а можно коммунистическое название?
kegdan 13.06.2014 18:07 # 0
р(к)/р(к+1) = a, a>1
все равно гипербола
laMer007 13.06.2014 18:08 # 0
Законы Мэтью
http://www.kinopoisk.ru/film/722748/
bormand 13.06.2014 18:10 # +2
laMer007 13.06.2014 18:15 # +2
kegdan 13.06.2014 18:17 # +2
wvxvw 13.06.2014 18:17 # 0
Zipf law - это вообще евристика, "экспоненциальная" тут не относится к тому, как получены результаты, а на что похожа кривая. Точно так же, как можно, например, с помощью косинуса (если правильно помню, то (1 - cos(x)) / 2pi) бриблизительно описать нормальную кривую.
Другие примеры: распределение Галтона, распределение Парито.
kegdan 13.06.2014 18:24 # 0
>>Парито.
Ну так и че ж ты тут делаешь? Околесицу несешь, в показаниях путаешься.
>> а на что похожа кривая.
я так вижу
wvxvw 13.06.2014 18:27 # 0
kegdan 13.06.2014 18:34 # +3
а я лишь пешка в руках великого математического аппарата вселенной.
3Doomer 18.06.2014 15:07 # +5
евреи таки повсюду
eth0 18.06.2014 19:42 # +3
- Здгавствуйте, догогой пгедставитель внеземной цивилизации!
Инопланетянин:
- Ни фига себе, и здесь они!
kegdan 18.06.2014 21:39 # +3
- Папа, а кто у нас в роду был?
- ну белые были, бурые. Еврей один был. Куда ж без них...
brutushafens 18.06.2014 22:00 # +2
brutushafens 19.06.2014 09:28 # +1
bormand 19.06.2014 09:44 # +3
- А вы не чешите их, и всё пройдет.
brutushafens 19.06.2014 09:58 # +1
defecate-plusplus 19.06.2014 10:16 # +2
laMer007 19.06.2014 10:42 # 0
1024-- 19.06.2014 10:48 # +2
defecate-plusplus 19.06.2014 11:09 # +1
bormand 19.06.2014 11:13 # +1
kipar 19.06.2014 11:37 # 0
http://ideone.com/lstLho
Ну и можно среди выделенных блоков памяти поискать, если настолько важно.
defecate-plusplus 19.06.2014 11:45 # 0
только неясно как это решает проблему
кто может помешать разместить другой, чужой объект по этому же адресу, в интервале между удалением нашего и попыткой обращения по сохраненному указателю?
kipar 19.06.2014 11:48 # 0
defecate-plusplus 19.06.2014 11:51 # 0
т.е. ты предлагаешь перед каждым разыменованием указателя уточнять, какого он там типа?
или это делается за нас, независимо, хотим ли мы этого
kipar 19.06.2014 12:03 # 0
defecate-plusplus 19.06.2014 12:20 # +1
в одном треде объект создается, указатель/ссылка на него передается другому треду
когда первый тред решает объект уничтожить, второй тред (и => приложение) не должен от этого пострадать, когда он решится обратиться к этому объекту
сделать это можно:
1) разрешив первому треду лишь уменьшить счетчик ссылок на объекте (и автоуничтожить объект, когда этот счетчик действительно станет равным нулю),
2) разрешив первому треду взаправду уничтожить объект, но тогда обеспечив второму треду достоверный механизм проверки, что именно переданный ему объект до сих пор жив или уже мертв, и, если жив, останется гарантированно жить, пока второй тред его реально использует некоторое время,
3) сборщик мусора (что, фактически, обобщение варианта 1)
так что же предлагает дельфи?
надеяться на is, as, his, зануление деструктором и Вирта?
а насколько это вообще потокобезопасно - проверить по косвенным признакам, что объект, предположительно, свой и хороший, и начать с ним работу, в то время, как первый тред его всё же убьет?
kipar 19.06.2014 12:39 # 0
надеяться на is, as, his, зануление деструктором и Вирта?
Тут все просто.
1. Берем
2. Реализуем.
Хоть со счетчиком ссылок, хоть без. Нужна потокобезопасность? Ну так мютекс добавить, и в деструкторе его лочить. Или спинлок.
defecate-plusplus 19.06.2014 12:47 # +1
ох жесткачь
и подвесить тред 1
теперь мне понятно, почему великолепный дельфиний TOAD за много денег ТАК тормозит и через раз падает при попытке восстановления сессии с ораклом
> Тут все просто.
ну т.е. ничего не предлагает, вообще
поэтому-то ни один дельфин и не суется в многопоточность
на 8-ядерных процах выжимает производительность селерона
зато его приложение заработает на Windows 95
bormand 19.06.2014 13:03 # 0
Да ну? Вон Стертор сколько примеров нам накидал...
bormand 19.06.2014 12:30 # 0
Вот только деструктор в делфи сам не вызовется... RAII то только на "интерфейсах" и строках работает.
kipar 19.06.2014 12:36 # 0
А если деструктор не вызвался, значит и объект в порядке, никаких проблем.
laMer007 19.06.2014 12:59 # +1
defecate-plusplus 13.06.2014 18:40 # +3
я неспроста сделал свою ремарку
не честно
закон Ципфа - дискретный на конечном множестве
экспоненциальное распределение - непрерывное на [0, +inf)
непрерывный родственник распределения Ципфа - закон Парето
экспоненциальное распределение принадлежит семейству экспоненциальных распределений (ты, видимо, подразумевал именно семейство ), и Парето войдет это семейство, только если зафиксировать его нижнюю границу
слишком много приходится делать обобщений и допущений, чтобы взять и набросить "закон Ципфа, широко известный как экспоненциальное распределение"
но спасибо, пришлось повспоминать материал тервера, забытый много лет назад
kegdan 13.06.2014 16:25 # 0
Закон Ципфа — закономерность распределения частоты слов естественного языка
не надо ляля
>>она же кривая Белла
????Gaussian bell curve
колоколообразная кривая Гаусса
kegdan 13.06.2014 13:54 # +2
wvxvw 13.06.2014 15:28 # 0
TarasB 13.06.2014 15:23 # 0
bormand 13.06.2014 15:48 # 0
Ну да, если значений не так много. А для большого количества я делал массив, в котором лежали P(x <= i) (забыл, как они по-умному называются) и искал в нем случайное число двоичным поиском. Примерно так:
kegdan 13.06.2014 16:28 # +1