Сравнительный алгоритм ранжирования - PullRequest
22 голосов
/ 15 октября 2010

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

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

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

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

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

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

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

Ответы [ 3 ]

16 голосов
/ 15 октября 2010

Это проблема, которая уже возникла на другой арене: соревновательные игры! Здесь также цель состоит в том, чтобы назначить каждому игроку глобальный «ранг» на основе серии сравнений «1 против 1». Сложность, конечно, заключается в том, что сравнения не являются транзитивными (в моем вопросе я подразумеваю «субъективное» для «предоставленного человеком»). Каспаров бьет Фишера бьет (не знаю другого шахматиста!) Боб бьет Каспарова, потенциально.

Это делает бесполезными алгоритмы, которые полагаются на транзитивность (то есть a > b and b > c => a > c), так как вы в конечном итоге получаете (вероятно) высоко циклический граф.

Для решения этой проблемы было разработано несколько рейтинговых систем.

Самой известной системой, вероятно, является алгоритм Эло / оценка для конкурентоспособных шахматистов. Его потомки (например, система рейтинга Glicko ) являются более сложными и учитывают статистические свойства записи о выигрышах / проигрышах - другими словами, насколько надежен рейтинг? Это похоже на вашу идею взвешивать записи с большим количеством «игр». Glicko также лежит в основе системы TrueSkill , используемой в Xbox Live для многопользовательских видеоигр.

3 голосов
/ 15 октября 2010

Вас может заинтересовать проблема минимального набора дуги обратной связи. По сути, проблема состоит в том, чтобы найти минимальное количество сравнений, которые «идут не в ту сторону», если элементы упорядочены в некотором порядке. Это то же самое, что найти минимальное количество ребер, которые необходимо удалить, чтобы сделать график ациклическим. К сожалению, решение проблемы точно является NP-трудным.

Пара ссылок, обсуждающих проблему:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.86.8157&rep=rep1&type=pdf

http://en.wikipedia.org/wiki/Feedback_arc_set

0 голосов
/ 15 октября 2010

Я погуглил, поищу главу 12.3, Топологическая сортировка и первый поиск по глубине

http://www.cs.cmu.edu/~avrim/451f09/lectures/lect1006.pdf

Ваш набор отношений описывает ориентированный ациклический граф (возможно, ациклический), поэтому топологическая сортировка графа - именно то, что вам нужно.

...