Есть много объектов, алгоритм склеивает их в пары. Пара сгорает с выходом энергии. Величина энергии зависит от известных и неизвестных параметров объектов в паре.
Т. е. есть куча объектов. На вход алгоритма валится поток из этой кучи (не факт, что успевает пройти вся куча). Алгоритм приклеивает очередному объекту другой объект из той же кучи. Оба на вход уже не придут. Пара сразу сгорает с выбросом энергии и сгоревшие объекты более недоступны.
Есть новый алгоритм и желание сравнить его "энергоэффективность" со старым. (Насколько больше энергии он вырабатывает, склеивая пары). Всё множество объектов виртуально распилено (по hash-функции от их ID + остаток от деления) на группы A и B. Пишем лог попаданий объекта в группу B -- т.е. имеем "список" объектов группы B в конце эксперимента. Есть лог входящих объектов, по которому можем восстановить группу A (которые пришли на вход и не попали в лог B). Защита от воровства объектов из чужих групп тоже есть.
Сравнение алгоритмов: сравниваем 2 величины:
* сумму энергий пар из списка A поделим на число объектов в списке A
* сумму энергий пар из списка B поделим на число объектов в списке B
Есть ощущение, что размеры групп должны быть константой отражённой в функции разделения (hash(id) % percent), а не вычисляться "по факту" из каких-то списков. Но обосновать это ощущение логически не могу. Не понимаю почему нельзя рассматривать функцию разделения на группы как стабильный чёрный ящик (относящий один объект стабильно в свою группу, но как - мы не знаем и можем узнать только по логам) и соответственно почему нельзя вычислить размеры групп после (по логам) - во время подведения итогов.