Element repeated more than n/2 times - Fast majority vote algorithm - Algorithms and Problem SolvingAlgorithms and Problem Solving



Element repeated more than n/2 times - Fast majority vote algorithm - Algorithms and Problem SolvingAlgorithms and Problem Solving

Find the element which repeated more than n/2 times in an given array of integers.

For example, A=[2, 2, 3, 2, 3, 3, 1, 3, 1]. We can clearly see that 3 is the majority.

A quick an dirty solution would be to either use a Hashmap to count frequency of each element and keep the track of maximum frequency element. This is O(n) time algorithm but it takes O(n) space. Another trivial solution would be to sort the array in O(nlgn) and then make a O(n) pass to the sorted array to find the maximum occurring element. This is O(nlgn) algorithm.

But there is an intelligent, beautiful, and efficient (both time and space) solution to this problem based on the solution of a real life scenario where voters are voting for their candidates. Assume that number of candidates is not fixed or not known beforehand. Also suppose that there are n voters each carrying a placard with the name of his candidate. Their is a chairman who is counting the vote. The chairman devised a simple method to keep track of the majority vote candidate C and a counter K which is initialized to zero. Each time the chairman goes to a voter and see if K=0; If it is then he keep n mind that C=candidate of the current voter and sets K=1. If K!=0 then he sees whether the voter holds placard for the current majority candidate C. If yes then he increases the counter K otherwise decreases it. He keeps counting by going to next voter and so on. So, once the chairman has visited all the voters the the C would be the majority vote candidate. This is because as long as one candidate got at least n/2 votes, we can guarantee that this approach will always find the majority element.


Read full article from Element repeated more than n/2 times - Fast majority vote algorithm - Algorithms and Problem SolvingAlgorithms and Problem Solving


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts