Skip to content

Instantly share code, notes, and snippets.

@devhary
Created July 15, 2011 17:25
Show Gist options
  • Save devhary/1085114 to your computer and use it in GitHub Desktop.
Save devhary/1085114 to your computer and use it in GitHub Desktop.
lean time voting algorithm
package test.algorithm;
/**
* A stupid tester for the Boyer and Moore's Linear Time Voting Algorithm
*
* The algorithm only works when at least half of the elements constitute the majority.
*
* @author harisgx
*
*/
public class TestMajorityVotingAlgorithm {
/**
* @param args
*/
public static void main(String[] args) {
Object [] data = {'A', 'A', 'A', 'C', 'C', 'B', 'B', 'C', 'C', 'C', 'B', 'C', 'C'};
TestMajorityVotingAlgorithm tm = new TestMajorityVotingAlgorithm();
Majority majority = tm.findMajority(data);
System.out.println(majority.getCandidate().getValue());
System.out.println(majority.leading());
}
public Majority findMajority(Object[] data){
Majority majority = new Majority();
for(Object obj : data){
//If the counter is 0, we set the current candidate to e and we set the counter to 1.
if(majority.leading() == 0){
majority.setCandidate(new Candidate(obj));
}else{
//If the counter is not 0, we increment or decrement the counter according to whether e is the current candidate.
if(majority.getCandidate().equals(obj)){
majority.increment();
}else{
majority.deccrement();
}
}
}
return majority;
}
public static class Majority {
private Candidate candidate;
private int leading;
public Majority(){
}
public Candidate getCandidate() {
return candidate;
}
public void setCandidate(Candidate cand) {
this.candidate = cand;
leading = 1;
}
public int leading() {
return leading;
}
public void increment(){
leading ++;
}
public void deccrement(){
leading --;
}
}
public static class Candidate {
private Object obj;
public Candidate(Object obj){
this.obj = obj;
}
public Object getValue(){
return this.obj;
}
@Override
public boolean equals(Object obj) {
return this.obj.equals(obj);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment