The majority vote problem is to determine in any given sequence of choices whether there is a choice with more occurrences than half of the total number of choices in the sequence and if so, to determine this choice.

Complexity

  • Time:
  • Space:

References

Implementations

  • 1
    
    # TODO: Implement in Python
    
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    
    const A = [1, 3, 3, 2, 1, 1, 1];
    const N = A.length;
    
    function isMajorityElement(element) {
      let count = 0;
      
      console.log(`Verify majority element ${element}`);
      
      for (let i = N - 1; i >= 0; i--) {
        
        if (A[i] === element) {
          count++;
        } else {
          
        }
      }
      
      console.log(`Count of our assumed majority element ${count}`);
      
      if (count > Math.floor(N / 2)) {
        
        console.log('Our assumption was correct!');
        
        return true;
      }
      
      console.log('Our assumption was incorrect!');
      
      return false;
    }
    
    function findProbableElement() {
      let index = 0;
      let count = 1;
    
      console.log(`Beginning with assumed majority element : ${A[index]} count : ${count}`);
      console.log('--------------------------------------------------------');
      
      for (let i = 1; i < N; i++) {
        
        if (A[index] === A[i]) {
          count++;
          
          console.log(`Same as assumed majority element! Count : ${count}`);
          
        } else {
          count--;
          
          console.log(`Not same as assumed majority element! Count : ${count}`);
          
        }
    
        if (count === 0) {
          
          console.log('Wrong assumption in majority element');
    
          index = i;
          count = 1;
    
          console.log(`New assumed majority element!${A[i]} Count : ${count}`);
          console.log('--------------------------------------------------------');
          
        } else {
          
        }
      }
      
      console.log(`Finally assumed majority element ${A[index]}`);
      console.log('--------------------------------------------------------');
      
      return A[index];
    }
    
    function findMajorityElement() {
      const element = findProbableElement();
      
      if (isMajorityElement(element) === true) {
        console.log(`Majority element is ${element}`);
      } else {
        console.log('No majority element');
      }
      
    }
    
    findMajorityElement();