Алгоритм ранжирования на основе сравнения

Я хотел бы ранжировать или отсортировать коллекцию элементов (с размером потенциально больше 100 000), где элементы в коллекции не имеют внутреннего (сопоставимого) значения, вместо этого все, что у меня есть, это сравнения между любыми двумя элементами , которые были предоставлены пользователями субъективно.

Пример: рассмотрим коллекцию с элементами [a, b, c, d] и сравнения пользователей b> a , a> d , d> c . Правильный порядок этой коллекции будет [b, a, d, c] .

Этот пример прост, однако могут быть более сложные случаи:

  • Поскольку сравнения субъективны, a пользователь может также сказать, что c> b . В этом случае это может привести к конфликту с указанным выше порядком.
  • Также у вас может не быть сравнений, которые «соединяют» все элементы, то есть b> a , d> c . В этом случае порядок будет неоднозначным. Это может быть [b, a, d, c] или [d, c, b, a] . В этом случае приемлемо любое упорядочение.

Если возможно, было бы неплохо как-то учесть несколько экземпляров одного и того же сравнения и придать больший вес тем, у которых больше совпадений. Но решение без этого условия все равно было бы приемлемым.

Аналогичное применение этого алгоритма использовалось приложением Цукерберга FaceMash, где он оценивал людей на основе сравнений (если я правильно понял), но я не смог найти, что этот алгоритм действительно был.

Есть ли уже существующий алгоритм, который может решить указанную выше проблему? Я не хотел бы тратить усилия на то, чтобы придумать такой алгоритм, если это так. Если нет конкретного алгоритма, возможно, есть определенные типы алгоритмов или методов, на которые вы можете указать мне?

24
задан Palec 23 December 2014 в 16:38
поделиться