Choose M numbers from N with equal probability for all - PrismoSkills



Choose M numbers from N with equal probability for all - PrismoSkills

Choose M numbers from N with equal probability for all



Puzzle: How do you pick M numbers from an array of N integers such that probability of choosing each one of them is the same?

Solution: Let us choose just one number first.

Probability of the first number being picked up is 1/N

If we follow the same approach for the next number, then its probability of being chosen is:

= (1-P1)*(1/N)

= (1-1/N)*(1/N)

= (N-1)/ N2


This is not what we want.
To choose the second element with same probability, we can do the following:
  1. Swap the first chosen element with the last element of the array.

  2. Choose a random element from the remaining N-1 elements.

With this approach, the probability of second element becomes:

= (N-1)/N * 1/(N-1)

= 1/N


Similarly, probability for 3rd element becomes:

= (N-1)/N * (N-2)/(N-1) * 1/(N-2)

= 1/N

Read full article from Choose M numbers from N with equal probability for all - PrismoSkills


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