Random number 1..5 to 1..7



int rand7()
{
 int x = 22;
 while( x > 21)
  x = rand5() + 5*rand5() - 5;
 int r = 1 + (x % 7);
 return r;
}

int rand7()
{
 int x = 25;
 while( x > 21)
  x = rand5() + 5*rand5() - 5;
 
 int r = (x >> 3) + (x & 7);
 r = (r >= 7) ? r - 6 : r + 1;
 return r;
}

A dice, when you throw gives only 1,2,.....21 (since you are rejecting 22,23,24,25 a.k.a rejection sampling theorem) 
So total no. of possible are 21.
No. of ways getting "1"=3 (5*1+1-5,5*2+3-5,5*3+1-1)%7+1
No. of ways getting "2"=3 (5*1+1-5,5*2+3-5,5*3+1-1)%7+1
No. of ways getting "3"=3 (5*1+2-5,5*2+4-5,5*3+2-1)%7+1
and so on..
P(1)=3/21=1/7
P(2)=3/21=1/7 and so on...

Understand why these solutions are not right
http://www.geeksforgeeks.org/generate-integer-from-1-to-7-with-equal-probability/

x=foo()+foo()-1;
if (x !=8,9){
return x;
}

Now what's the probability here for p(1),p(2)...p(7)?
no. of ways of producing "1" =1 (1+1-1)
no. of ways of producing "2" =2 (2+1-1,1+2-1)
and so on...
Total no. of possible combination =5*5=25
P(1)=1/25;
P(2)=2/25
and so on...
So probabilities are not equal in this case !!

return (foo() + foo()%4 -1);
(foo()+foo()-1)%7+1

Also refer to http://www.geeksforgeeks.org/generate-integer-from-1-to-7-with-equal-probability/
Read full article from Random number 1..5 to 1..7

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