Часть 1. Что и как работает
Сначала расскажу подскажите в чем заключается задача, нужно создать некий алгоритм, на входе которого будет массив с предметами, имеющими цену(
Код: Выделить всё
'cost' => 123
Код: Выделить всё
$get_cost = 10;
$items = [
['cost' => 5],
['cost' => 10],
['cost' => 20]
];
Код: Выделить всё
+———–+—–——–+——–—+
| 5 | 10 | 20 |
+——––+——–––+—–——+
| 0 | 100 | 0 |
| 10 | 85 | 5 |
| 20 | 70 | 10 |
| 30 | 55 | 15 |
| 40 | 40 | 20 |
| 50 | 25 | 25 |
| 60 | 10 | 30 |
+——––+——–––+—–——+
В таблице выше показаны возможные четные проценты для этих чисел, например, возьмем строку 4, 5 – 30%, 10 – 55%, 20 – 15%.
Теперь я расскажу, как это работает, например, выберем 10 миллионов предметов исходя из заданных шансов. раз, для каждой выборки (попытки) тратим остаток, пишем сколько потратили в условном $sum_spending = 0; и получаем следующий код:
< div class="snippet">
Код: Выделить всё
var get_cost = 10;
var sum = 0;
for (var i = 0; i < 10000000; i++) {
var rand = Math.floor(Math.random() * 100) + 1 // generate a number from 1 to 100
if (rand 10, 'chance' => 40],
['cost' => 20, 'chance' => 20]
];
Код: Выделить всё
$items = [
['cost' => 5, 'chance' => 40],
['cost' => 10, 'chance' => 40],
['cost' => 20, 'chance' => 20]
];
foreach ($items as $key => &$item) {
if (isset($items[$key - 1])) $item['chance'] += $items[$key - 1]['chance'];
}
function getRandItem($items) {
$rand = rand(1, 100);
foreach ($items as $item) {
if ($rand
После поиска в Википедии я пришел к выводу, что нам нужно использовать распределение Лапласа
Но это только мое мнение.
Давайте определим принцип шансов, записав все эти шансы, я нашел определенную закономерность, например возьмем следующую таблицу:
[code] +—————–———+——————————+———–——–+
| 5 | 20 | SUM |
+—————–———+——————————+———–——–+
| 66.6666 | 33.3333 | ~100% |
+—————–———+——————————+———–——–+
Код: Выделить всё
+—————+———––+——––+––––––+
| 2.5 | 10 | 40 | SUM |
+—————+———––+——––+––––––+
| 0 | 100 | 0 | 100% |
| 20 | 75 | 5 | 100% |
| 40 | 50 | 10 | 100% |
| 60 | 25 | 15 | 100% |
| 80 | 0 | 20 | 100% |
+—————+———––+——––+––––––+
Если есть входной параметр, равный $get_cost, всегда будет вариант, что он равен 100%.< /p>
Если имеется 3 или более входных параметра и есть параметр, равный $get_cost, всегда будет вариант, что вероятность того, что параметр, равный $get_cost, будет равна 0%. Это видно на примере выше.
Часть 3. Как рассчитать коэффициенты?
Шансы всегда увеличиваются и уменьшаются линейно и по определенной закономерности. , вот еще пара примеров:
Код: Выделить всё
+———–+––———+——–––+———–––+
| 1 | 10 | 100 | SUM |
+———–+––———+——–––+———–––+
| 0 | 100 | 0 | 100% |
| 50 | 45 | 5 | 100% |
+———–+––———+——–––+———–––+
Код: Выделить всё
+———–+———––+–———+——–––+––————+
| 5 | 10 | 20 | 40 | SUM |
+———–+———––+–———+——–––+––————+
| 0 | 100 | 0 | 0 | 100% |
| 20 | 70 | 10 | 0 | 100% |
| 40 | 50 | 5 | 5 | 100% |
| 50 | 25 | 15 | 5 | 95% | // May not be used
| 60 | 30 | 0 | 10 | 100% |
| 80 | 0 | 10 | 10 | 100% |
+———–+———––+–———+——–––+––————+
Также можно писать на любом языке, если что-то переводить для сами.
Также хотелось бы отметить, что большая часть кода была упрощена для лучшего понимания, а также я постарался объяснить задачу понятным языком.
Заранее прошу прощения за ошибки в словах, если таковые будут, пишу этот вопрос уже около 4 часов

Спасибо за внимание!
Подробнее здесь: https://stackoverflow.com/questions/785 ... -algorithm