Я предполагаю, что для ваших расчетов вы учитываете только карму предмета, которую вы рассматриваете только карму, которую избиратели имели ранее во время голосования, а не их текущую карму (которая могла измениться с тех пор), поскольку это привело бы к рекурсивной функция, которая, вероятно, будет включать все элементы и всех пользователей.
Другое предположение состоит в том, что карма действительно абсолютна, но пересчитывается, когда проводится новое голосование, поскольку голоса реже, чем просмотры.
Я бы сохранил все голоса всех пользователей, карму, которую они имели на момент голосования, и направление голосования для каждого элемента.
Последнее предположение: вы добавляете карму к подателю не сразу после голосования, а после определенного периода времени. Если вы добавите его сразу, карма отправителей будет часто подниматься / опускаться и приводить к сильному дрожанию в вашей системе.
Если вы получите новый голос, я сначала вычислю новую карму предмета, а затем добавлю карму пользователю в зависимости от абсолютного изменения кармы предмета:
Карма предмета - это сумма кармы всех голосующих пользователей: например, у вас есть три голоса: один с 50 кармой, один с 150 кармой, один с 30 кармой. В результате общая карма составит 170. Таким образом, у предмета есть карма + 170.
Когда новый пользователь голосует, вы пересчитываете карму предмета с новым голосованием, принимая во внимание: (предыдущий пример) новые пользователи голосуют с 10 кармой. Новая карма предмета +180.
Разница между старой и новой кармой элемента заключается в карме, которую получает пользователь: (предыдущий пример) пользовательский голос изменил карму элемента на +10, поэтому пользователь получает +10 карму (для будущих голосов). Недостатком этой идеи является то, что пользователи с высокой кармой очень быстро получают новую карму, поэтому вам, вероятно, следует также добавить некоторые ограничивающие факторы (например, логарифм), чтобы масштабировать ее должным образом.
Поскольку вы также хотите учитывать возраст предмета, вы можете умножить полученные очки кармы на коэффициент, зависящий от возраста (например, если предмет старше 5 дней, пользователь вообще не получает никакой кармы : 5 дней - временной интервал для голосования, умноженный на измененное значение кармы).
Это, конечно, очень туманный проект системы, которую вы хотите внедрить, и я не знаю, подходит ли она вашей идее. Вероятно, его можно изменить, добавив и другие факторы:
Вы можете определить% релевантности с помощью: (абсолютная позитивная карма / абсолютная негативная карма): значения меньше 1 имеют более негативную карму, чем позитивную карму и наоборот. Но для надежного значения в% вам нужно какое-то значение для сравнения, по моему мнению (будь то постоянное или рассчитанное иначе).