Equal probability
Inclusive
(int) ( Math.random() *(higher-lower+1) ) + lower
1/n 1/n 1/n
[1] [2] [3].....[n]pick m itnegers
DON'T PICK UP TWICE => swap => the index in the subset indicating
the elements before that index has been chosen and CANNOT be chosen again
delete element from the array=> shrinking / shifting => O(n)
subset[0] <- array[k]
==> SWAP array[0] and array[k]
subset[1]<= array[k-3]
==> SWAP array[1] and array[k-3]
...
2. Implementation
1/n 1/n 1/n
[1] [2] [3].....[n]pick m itnegers
DON'T PICK UP TWICE => swap => the index in the subset indicating
the elements before that index has been chosen and CANNOT be chosen again
delete element from the array=> shrinking / shifting => O(n)
subset[0] <- array[k]
==> SWAP array[0] and array[k]
subset[1]<= array[k-3]
==> SWAP array[1] and array[k-3]
...
2. Implementation
/*Random number between lower and higher, inclusive*/ /*Inclusive so we higher - lower +1 , include both end */ public static int rand(int lower, int higher) { return (int) ( Math.random() *(higher-lower+1) ) + lower; } /*Pick M elements from the original array. Clone original array so htat we don't destroy the input*/ public static int[] pickMRandomly( int[] original, int m) { int[] subset = new int[m]; int[] array = original.clone(); for (int i = 0 ; i < m; i++) { int pickIndex = rand(i, array.length -1); subset[i] = array[pickIndex]; array[pickIndex] = array[i]; // array[i] is dead } return subset; }3. Similar Ones
No comments:
Post a Comment