Лучшее из n выбранных элементов по алгоритму сравнения - PullRequest
0 голосов
/ 18 июня 2020

Мне нужно создать систему, которая сравнивает 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, поэтому число резко увеличится, и система потеряет смысл.

Знаете ли вы какие-нибудь эффективные алгоритмы сравнения элементов с отсортированным ранжированным списком в конце в качестве результата?

1 Ответ

0 голосов
/ 18 июня 2020

Итак, вы хотите отсортировать элементы, сравнивая их: https://en.wikipedia.org/wiki/Comparison_sort

Вам нужно будет выполнить O(N log(N)) сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...