Случайный элемент с вероятностью из таблицы SQL в Java

0

Я пытаюсь выяснить, как выбрать случайный элемент с его собственным шансом из таблицы значений, например:

itemlottery (npcid, item, chance) VALUES (9100100, 1402011, 167)
itemlottery (npcid, item, chance) VALUES (9100100, 1041082, 267)
itemlottery (npcid, item, chance) VALUES (9100100, 1322003, 1668)
itemlottery (npcid, item, chance) VALUES (9100100, 1061033, 89)
itemlottery (npcid, item, chance) VALUES (9100100, 1051001, 89)
itemlottery (npcid, item, chance) VALUES (9100100, 2000005, 188983)

Так что в основном я могу получить элемент и шансы от SQL, но было бы лучше его жестко закодировать в java?

В любом случае, это те значения, которые мне нужны (список фактически содержит больше, чем 50+ элементов).

Теперь мой вопрос в том, как я могу прочитать эти значения, а затем создать случайный элемент на основе этих шансов в Java?

Это для игрового NPC, что даст игрокам случайный лотерейный предмет, основанный на шансах.

Изменение: вам нужно получить один элемент, и вы не можете получить несколько элементов. чем выше вероятность, тем больше вероятность получить этот предмет.

  • 0
    В этом наборе данных, чем больше значение шанса, тем больше шансы найти этот объект или наоборот? Можно ли получить ноль или несколько объектов?
  • 0
    Я отредактировал свой оригинальный пост с исправлениями @SimonBerthiaume
Показать ещё 2 комментария
Теги:

1 ответ

1

Вы можете сделать это в MySQL с помощью rand() и суммарной суммы:

select t.*
from (select t.*, (@sum := @sum + chance) as cume_chance
      from t cross join
           (select @sum := 0, @r := rand()) params
     ) t 
where @r < cume_chance / @sum and
      @r >= (cume_chance - chance) / @sum;

Причина, по которой rand() вычисляется в переменной, поэтому функция оценивается только один раз. Когда внешний, where выполняется, @sum должен содержать общую сумму chance. Альтернативой является вычисление его явно с помощью подзапроса.

  • 0
    Это в Java? Это похоже на сценарий sql. Я надеялся сделать функцию, чтобы получить шансы для идентификатора элемента и дать элемент случайным образом
  • 0
    @Forgets. , , Ваш вопрос помечен SQL. Я не знал, что вы хотели решение в Java. Решение то же самое. , , накапливать шансы, а затем использовать генератор случайных чисел. Если у вас не очень низкая пропускная способность для базы данных, производительность должна быть примерно одинаковой.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню