2
$\begingroup$

Say I have a set of numbers, for example {1, 2, 3, 4, 5}. Is there an algorithm that allows these numbers to be put into a consensus ordering based on a ranked vote? For example, if 3 people vote and their votes are [1, 2, 3, 4, 5], [2, 1, 3, 4, 5], and [1, 2, 3, 5, 4], then the consensus ordering would be [1, 2, 3, 4, 5]. Ideally the algorithm would support votes of partial orderings as well, such as [2, 5, 4].

I'm pretty sure I can extend the ranked voting system to produce a complete ordering of the "candidates," but I'm wondering if there's already an algorithm to do this.

$\endgroup$
1
  • 2
    $\begingroup$ This is a popular topic in social choice theory, known as vote aggregation. See for example this link. $\endgroup$ Apr 4, 2019 at 21:01

1 Answer 1

2
$\begingroup$

I have both good news, and bad news. Not only is there a way to do it; there are many candidate ways to do it. For instance, you could use IRV, Condorcet voting, Borda count, or many other schemes. See https://en.wikipedia.org/wiki/Ranked_voting and https://en.wikipedia.org/wiki/Social_choice_theory.

Unfortunately, there are also negative results showing that no scheme provides all of the properties that we might desire. See Arrow's theorem: https://en.wikipedia.org/wiki/Arrow%27s_impossibility_theorem and https://en.wikipedia.org/wiki/Condorcet_paradox.

$\endgroup$
1
  • $\begingroup$ As far as I can tell, all these techniques provide a single winner (condorcet) or an ordering of only the top n candidates. Techniques for the latter don't seem too amenable to the case where n is the total number of candidates. Regardless, iteratively applying a condorcet method or simply picking the most popular candidate at each iteration seems sufficient for my application. Thanks! $\endgroup$
    – alan
    Apr 11, 2019 at 15:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.