Использование каждого значения (из хэша) для получения данных из Oracle

Простой алгоритм, который дает вам случайные числа без дубликатов, можно найти в книге Programming Pearls p. 127.

Внимание: результирующий массив содержит числа в порядке! Если вы хотите их в произвольном порядке, вы должны перетасовать массив, либо с помощью Fisher-Yates shuffle , либо с помощью списка и вызова Collections.shuffle().

Преимущество этого алгоритм заключается в том, что вам не нужно создавать массив со всеми возможными числами, а сложность выполнения по-прежнему линейна O(n).

public static int[] sampleRandomNumbersWithoutRepetition(int start, int end, int count) {
    Random rng = new Random();

    int[] result = new int[count];
    int cur = 0;
    int remaining = end - start;
    for (int i = start; i < end && count > 0; i++) {
        double probability = rng.nextDouble();
        if (probability < ((double) count) / (double) remaining) {
            count--;
            result[cur++] = i;
        }
        remaining--;
    }
    return result;
}

0
задан user1958532 26 February 2015 в 13:28
поделиться