2013-08-25 3 views
0

У меня есть довольно сложный вопрос. В настоящее время я пытаюсь написать ДЕЙСТВИТЕЛЬНО простую версию поиска путей, и для этого мне нужен способ генерации числа в пределах диапазона, и каждый номер должен отличаться от всех остальных и больше, чем последний номер. Как мне это сделать? Так результат будет выглядеть следующим образом:Случайное число проблем

1,5,6,9,15,18

+1

Каков диапазон чисел, который вы хотите получить в случайном порядке? Вам всегда понадобится шесть номеров? – Pshemo

+0

Зависит от того, что вы хотите. Должно ли это быть случайным образцом заданного диапазона или должно быть равномерно распределено каждое число в диапазоне между предыдущим номером и верхней границей? – user2357112

ответ

1

Создать случайную функцию генератора:

public static int randInt(int min, int max) { 

    // Usually this can be a field rather than a method variable 
    Random rand = new Random(); 

    // nextInt is normally exclusive of the top value, 
    // so add 1 to make it inclusive 
    int randomNum = rand.nextInt((max - min) + 1) + min; 

    return randomNum; 
} 

(код, предоставленный из answer by Greg Case).

Зов это место, куда вы хотите, и проверить, как как:

int a; 

a=randInt(min,max); 

и в следующий раз разобрать сгенерированный ранее значение, например:

randInt(a, max); 
+1

Создание нового генератора при каждом звонке - плохая идея. Вы будете генерировать новое семя при каждом вызове и использовать его один раз; семена, вероятно, будут иметь нежелательные свойства, и это будет не так статистически достоверно, как использование одного генератора (не то, что Java RNG по умолчанию является хорошим, но все же). – user2357112

+0

Источник фрагмента кода: http://stackoverflow.com/a/363692/846892 –

0

Использование reservoir sampling выбрать п числа от ваш диапазон. Поскольку вы проходите диапазон, чтобы отсортированный список отсортировался.

+0

Он работает, но это медленнее, чем может быть. Для образца резервуара из диапазона всех ints вам нужно будет проходить через все ints. Лучший алгоритм займет время, пропорциональное размеру требуемого образца. – user2357112

+0

Ну, вопрос был похож на небольшие диапазоны. В идеале вы выбираете выборку проб или выборки в зависимости от того, насколько велики * n * и * k * для выбора * n * чисел из (0, * k *). – Joey

Смежные вопросы