Boyer–Moore's Majority Vote
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();