То, что вы хотите сделать, это иметь номер X_i
для всех вопросов i
. Вы можете нормализовать эти числа (сделать их сумму 1) и сделать приоритетный выбор.
Если N
- это количество различных вопросов, а M
- это количество ответов на каждый вопрос в среднем, тогда вы можете найти X
за M*N
время, например:
- Создать массив
X[N]
, установленный в 0.
- Просмотрите данные, и каждый раз, когда вы видите, что на вопрос
i
ответили неправильно, увеличьте N[i]
на f(t)
, где t
- время ответа, а f
- увеличивающаяся функция.
Поскольку f
увеличивается, вопрос, на который давным-давно был дан неправильный ответ, оказывает меньшее влияние, чем тот, на который вчера был неверный ответ. Вы можете поэкспериментировать с различными f
, чтобы получить хорошее поведение.
Умнее
Более быстрый способ - не генерировать X[]
каждый раз, когда вы выбираете вопросы, а сохранять его в таблице базы данных.
Вы не сможете применить f
с этим решением. Вместо этого просто добавляйте 1 каждый раз, когда на вопрос дается неправильный ответ, а затем регулярно просматривайте таблицу - скажем, каждую полночь - и умножьте все X[i]
на константу - скажем, 0.9
.
Обновление : На самом деле вы должны основывать свои данные на исправлениях, а не на ошибках. В противном случае вопросы, на которые не ответили ни истина, ни ложь в течение длительного времени, будут иметь меньшие шансы быть выбранными. Должно быть наоборот.