How to select N reservoir items randomly from an array in Java

2 Answers

0 votes
import java.util.ArrayList;
import java.util.List;

public class Program {
    private static void selectReservoir(Integer[] arr, int N) {
        int size = arr.length;
        List<Integer> reservoir = new ArrayList<Integer>();

        int items = 0;
        while (items < N) {
            int i = (int)(Math.random() * size) % size; // index between 0 to size
            boolean found = false;
            
            // Check if value present in reservoir
            for (int j = 0; j < items; j++) {
                if (reservoir.contains(arr[i])) {
                    found = true;
                    break;
                }
            }
            
            // If not present add value to the reservoir 
            if (!found) {
                reservoir.add(arr[i]);
                items++;
            }
        }
        
        System.out.println(reservoir);
    }
    public static void main(String[] args) {
        Integer arr[] = { 4, 9, 14, 96, 13, 0, 3, 99, 19, 2, 80, 1, 7 };
        int N = 5;
        
        selectReservoir(arr, N);
    }
}

 
 
 
/*
run:
 
[7, 99, 1, 14, 2]
 
*/

 



answered Feb 3, 2024 by avibootz
0 votes
import java.util.ArrayList;
import java.util.List;

public class Program {
    private static List<Integer> selectReservoir(Integer[] arr, int N) {
        int size = arr.length;
        List<Integer> reservoir = new ArrayList<Integer>();

        int items = 0;
        while (items < N) {
            int i = (int)(Math.random() * size) % size; // index between 0 to size
            boolean found = false;
            
            // Check if value present in reservoir
            for (int j = 0; j < items; j++) {
                if (reservoir.contains(arr[i])) {
                    found = true;
                    break;
                }
            }
            
            // If not present add value to the reservoir 
            if (!found) {
                reservoir.add(arr[i]);
                items++;
            }
        }
        
        return reservoir;
    }
    public static void main(String[] args) {
        Integer arr[] = { 4, 9, 14, 96, 13, 0, 3, 99, 19, 2, 80, 1, 7 };
        int N = 5;
        
        List<Integer> reservoir = selectReservoir(arr, N);
        
        System.out.println(reservoir);
    }
}

 
 
 
/*
run:
 
[2, 0, 80, 7, 14]
 
*/

 



answered Feb 3, 2024 by avibootz

Related questions

2 answers 116 views
2 answers 127 views
2 answers 107 views
2 answers 110 views
...