Мне нужно создать систему, которая сравнивает N
элементов.
Система должна сообщить пользователю, какие элементы ему нравятся больше всего из списка N
элементов. Он должен возвращать список сохраненных элементов, ранжированных от наиболее понравившихся до наименее понравившихся по их выбору. Фоновый алгоритм должен выдавать два элемента в каждом раунде, где пользователь голосует, а фоновый алгоритм сравнивает их и вычисляет лучший результат.
То, что я подумал первым, было classi c: Combination without repetition
:
Пример: есть десять животных (n = 10)
{"Dog", "Cat", "Squirrel", "Chimpanzee", "Ox", "Lion", "Panda", "Walrus", "Otter", "Elephant"}
Если я использую комбинацию без повторения по формуле n!/k!*(n-k)!
, было 45 сравнений
{"Dog", "Cat"},
{"Dog", "Squirrel"},
{"Dog", "Chimpanzee"}
...
{"Cat", "Cat"},
{"Cat", "Chimpanzee"},
{"Cat", "Ox"}
...
Если пользователь выбирает Dog 5 раз Dog получает 5 очков, все остальные, которые были выбраны против Dog, получают 1 очко, затем Cat, затем Squirrel и т.д. c ... И список в конце будет выглядеть примерно так:
"Dog" : 8,
"Cat" : 6,
"Squirrel" : 3
...
Но я считаю этот logi c очень неэффективным, потому что пользователи должны выбирать 45
раз, плюс N
может быть больше 10
, поэтому число резко увеличится, и система потеряет смысл.
Знаете ли вы какие-нибудь эффективные алгоритмы сравнения элементов с отсортированным ранжированным списком в конце в качестве результата?