
Быстрый поиск
Введите фрагмент названия статьи для поиска
Генерация случайных значений на PHP с заданной вероятностью
11.01.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Понадобилась функция, которая возвращает случайный элемент из определенного набора. Вроде бы простейшее решение в одну строчку. Но особенность задачи такова, что элементы должны появляться не просто случайно, а с определенной вероятностью: какие-то чаще, какие-то реже. То есть у каждого значения имеется весовой коэффициент, влияющий на частоту его появления. Например:Code (PHP) : Убрать нумерацию
- // Массив значений и весовых коэффициентов
- $data=array(
- 'купить'=>50,
- 'заказать'=>5,
- 'приобрести'=>30,
- );
Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------
- // Получение случайного значения с заданной вероятностью
- //-------------------------------------------------------------
- function smart_rand($data) {
- // Пустой массив не обрабатываем
- if (count($data)==0) { return false; }
- // Отсортировать массив с сохранением ключей
- arsort($data);
- // Сформировать массив с интервалами
- $max_rand=0;
- $weights=array();
- foreach ($data as $key=>$value) {
- $max_rand+=$value;
- $weights[$max_rand]=$key;
- }
- // Случайное число от 0 до суммы всех весовых коэффициентов
- $rand=mt_rand(0,$max_rand);
- // Найти интервал, в который попадает случайное число
- foreach ($weights as $key=>$value) {
- if ($rand<=$key) {
- break;
- }
- }
- return $value;
- }
Code (PHP) : Убрать нумерацию
- // Вывести 100 вариантов написания
- for($i=0; $i<100; $i++) {
- echo smart_rand($data).' ';
- }
Просмотров: 2240 | Комментариев: 1
Генератор случайных чисел с использованием RANDOM.ORG
25.10.2016 | Категория: Образ мышления: Assembler | Автор: ManHunter

Генератор случайных чисел с использованием RANDOM.ORG
Тема генераторов случайных чисел является одной из основных в криптографии. Использование любых программных генераторов случайных чисел имеет один главный недостаток: последовательность чисел может называться случайной только если между символами, нету зависимости. А любой алгоритм так или иначе подразумевает зависимость от вычислений. Истинно случайные числа получаются только от аппаратных генераторов. Одним из таких генераторов является сайт RANDOM.ORG. По заявлению его владельцев, источником для случайных чисел является атмосферный шум. Не берусь утверждать, так это или нет, но этот сайт пользуется заслуженной популярностью среди разработчиков всего мира.
Читать статью целиком »
Просмотров: 4204 | Комментариев: 11
Генерация последовательности уникальных кодов на PHP
12.10.2013 | Категория: Web-мастеру и не только | Автор: ManHunter
Иногда возникает задача генерации последовательности уникальных кодов по определенному формату. Это могут быть какие-нибудь одноразовые токены, коды лотерейных билетов, серийные номера, scratch-карты, да мало ли чего. Простое использование ГСЧ в этом случае не дает 100% гарантии, так как выдаваемые им значения могут повторяться, а при большом количестве кодов количество повторений будет только расти. Предлагаю вам следующее решение:Code (PHP) : Убрать нумерацию
- // Набор символов для генерации кодов
- $str='1234567890ABCDEF';
- // Длина кода без учета разделителей
- $code_length=16;
- // Нужное количество кодов
- $codes_count=300000;
- // Позиции разделителя (0 - не надо)
- $code_separartor=4;
- $tmp=array();
- $str_length=strlen($str)-1;
- // Цикл до заполнения массива
- while (count($tmp)<$codes_count) {
- // Сгенерировать индекс массива
- $code='';
- for ($i=0; $i<$code_length; $i++){
- // Разделитель можно не добавлять
- if ($i>0 && $code_separartor>0 && $i%$code_separartor==0) { $code.='-';}
- $code.=substr($str, mt_rand(0,$str_length), 1);
- }
- // Или в массив добавится новый элемент, или
- // перепишется поверх уже имеющийся
- $tmp[$code]=1;
- }
- // Теперь в массиве $codes уникальные коды
- $codes=array_keys($tmp);
Читать статью целиком »
Просмотров: 11829 | Комментариев: 6
Еще один генератор случайных чисел на Ассемблере
17.05.2010 | Категория: Образ мышления: Assembler | Автор: ManHunter
В закромах Родины нашлась реализация еще одного генератора случайных чисел. Он более громоздкий, чем минимальный генератор Парка-Миллера, использует операции с плавающей точкой и кольцевой буфер, но результаты выдает гораздо лучше. Кроме большого кода ему также требуется больше места и в сегменте данных:Code (Assembler) : Убрать нумерацию
- section '.data' data readable writeable
- ; Данные для генератора случайных чисел
- JJ = 10 ; lag 1
- KK = 17 ; lag 2, size of circular buffer
- R1 = 19 ; rotate count
- R2 = 27 ; rotate count
- randp1 dt 1.5 ; used for conversion to float
- dw 0 ; alignment
- p1 dd 0 ; pointer in circular buffer
- p2 dd 0 ; pointer in circular buffer
- randbuf dd (2*KK) dup(?) ; circular buffer
Code (Assembler) : Убрать нумерацию
- ; Инициализация генератора случайных чисел
- invoke GetTickCount
- stdcall WRandomInit,eax
- ...
Читать статью целиком »
Просмотров: 11720 | Комментариев: 10
Генератор случайных чисел на Ассемблере
03.09.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter

Генератор случайных чисел на Ассемблере
При написании программ часто возникает необходимость получить последовательность случайных чисел. В языках высокого уровня существуют штатные функции, а для Ассемблера я использую так называемый "Минимальный генератор Парка-Миллера" (Minimal portable random generator by Park and Miller).
Читать статью целиком »
Просмотров: 31723 | Комментариев: 7


