[news.admin] Single transferrable vote counting

stodol@freja.diku.dk (David Stodolsky) (11/21/89)

Single Transferable Vote Counting Procedures

The purpose of this message is to demonstrate single transferable vote (STV) 
counting procedures that can be used with simple word processing systems. The 
system must have a search and replace function, if this procedure is to be 
automated to a reasonable degree. A column cut function plus a sort function 
can also be used, if votes are displayed in a monospaced font. I will assume 
the use of a search and replace function, but will also sort as this makes it 
easier to see what is happening.

The choices are assumed to be ranked from left to right. That is, the person's 
first choice is given as the first character on a line, the second choice as 
the next character, and so forth. The choices are assumed to be followed by 
one or more spaces (any other character can be used, but the choices should be 
padded with enough characters so that all votes are of equal length [if a 
column cut function is used, additional padding equal to the length of a valid 
vote may be required]. The vote characters can also be preceded by any set of 
characters [such as "Subject: "] as long as these are always the same. With 
word processors using search and replace functions that cannot find non-
printing characters, at least one unique leading character may be necessary.) 
In this example, the vote itself is followed by a name. This is not required 
for vote counting.

Counting is simplified if voters follow these rules:

1. Clear the Subject line (except for "Subject: ").
2. While unmoved names remain;
     Select your preferred name and move it to the subject line 
     (place each name after [to the right of] the ones already moved).
3. Place a "no" after the last name you find acceptable. 
If none of the names are acceptable, put the "no" before the names.
4. Replace each name with the single character indicated.
5. Replace the "no" with the character "n".
6. Check your vote to see if contains a character for each name and for "no" 
(e. g., If two names have been presented, a valid vote will have three 
characters).

A example of votes received  
(assuming choices "c", "s", [for alternative names] and "n" [for "no"]) 
after a sort (based on the vote characters) is:

Subject: c   yer@it
Subject: cns tow@fu
Subject: cs  y@not
Subject: csn uc@it
Subject: nc  tin@hed
Subject: ncs bad@as
Subject: ns  sea@hear
Subject: sc  rich@kid
Subject: scn re@ley
Subject: y   not@valid

Observe that the vote "y" is in the last place, with a single person voting 
"yes". This vote is eliminated first, because it has the least support. With a 
long list, a search of the list with the strings, "Subject: y", "Subject: s", 
"Subject: c",  "Subject: n", and so on (replacing with the same string, if 
only a search and replace function [as opposed to search alone] is available), 
would tell us the lowest scoring choice (assuming the word processor gives the 
number of times the match is found). We eliminate the choice "y" by searching 
for "Subject: y" and replacing it with "Subject: " (i. e., the same string 
without the "y"). The list when resorted looks like (may vary depending on 
your word processor):

Subject: c   yer@it
Subject: cns tow@fu
Subject: cs  y@not
Subject: csn uc@it
Subject: nc  tin@hed
Subject: ncs bad@as
Subject:    not@valid
Subject: ns  sea@hear
Subject: sc  rich@kid
Subject: scn re@ley

Observe the choice "s", from the votes "sc" and "scn", is now in last place 
with only two persons voting "s". We eliminate the choice "s" by searching for 
"Subject: s" and replacing it with "Subject: ", leaving the votes "c" and 
"cn". Thus, the list when resorted looks like:

Subject: c  rich@kid
Subject: c   yer@it
Subject: cn re@ley
Subject: cns tow@fu
Subject: cs  y@not
Subject: csn uc@it
Subject: nc  tin@hed
Subject: ncs bad@as
Subject:    not@valid
Subject: ns  sea@hear

The "n" choice now has the lowest support with three votes. The same type of 
search and replace yields (after sorting):

Subject: c  rich@kid
Subject: c  tin@hed
Subject: c   yer@it
Subject: cn re@ley
Subject: cns tow@fu
Subject: cs bad@as
Subject: cs  y@not
Subject: csn uc@it
Subject:    not@valid
Subject: s  sea@hear

The choice "s" again has lowest support. After a search and replace, and a 
sort we find:

Subject: c  rich@kid
Subject: c  tin@hed
Subject: c   yer@it
Subject: cn re@ley
Subject: cns tow@fu
Subject: cs bad@as
Subject: cs  y@not
Subject: csn uc@it
Subject:    not@valid
Subject:   sea@hear

A search and replace of the string "Subject: c" tells us that eight (of the 
ten) people support the most preferred name.

Take the total number of votes (ten) and subtract the number of "no"s 
(character "n") removed (three) to find the number of people supporting the 
creation of a newsgroup with the most preferred name. Thus, seven people 
support creation of the group. 

Support for the preferred name and support for creation of the newsgroup will 
not, in general, be the same (even if all votes are valid).

This method does not deal with ties.

--------
Corrections, comments, improvements, and extensions received will be 
incorporated in an update of this message.
-- 
David S. Stodolsky, PhD      Routing: <@uunet.uu.net:stodol@diku.dk>
Department of Psychology                  Internet: <stodol@diku.dk>
Copenhagen Univ., Njalsg. 88                  Voice + 45 31 58 48 86
DK-2300 Copenhagen S, Denmark                  Fax. + 45 31 54 32 11