2015-09-23 4 views
-1

Возможно ли генерировать псевдослучайные целые числа из целочисленного массива? Я не имею в виду выбирая случайное число из массива, но вместо того, чтобы делать что-то вродеСоздание случайного целого из массива целых чисел

[1,2,3] = 4542

[56,89,42] = 80421

Наконец, возможно ли, чтобы выход был полностью случайным, а не постепенно менялся? Например. Я бы хотел this не this.

Спасибо за любой ввод.

Редактировать: Я попытался использовать hashcode в следующем коде. (Причина, почему я не просто использовать случайный мне нужно, чтобы иметь возможность получить доступ к случайному выходу без зацикливания иногда)

Random random = new Random(); 
int size = 10; 
for (int x = 0; x < size; x++) { 
    for (int y = 0; y < size; y++) { 
    for (int z = 0; z < size; z++) { 
     System.out.println(random.nextInt()); 
    } 
    } 
} 
System.out.println(); 
for (int x = 0; x < size; x++) { 
    for (int y = 0; y < size; y++) { 
    for (int z = 0; z < size; z++) { 
     System.out.println(Arrays.hashCode(new int[]{x, y, z})); 
    } 
    } 
} 

Для первой секции коды я получаю случайные числа, например,

-733673840 
2005335778 
-954776008 
-695687646 
-1339170035 
... 

Для второй части я получаю телефонные номера, которые увеличиваются на один

29791 
29792 
29793 
29794 
29795 
... 
+1

Вы имеете в виду использование массива в качестве семени для случайного генератора? – Adrian

+1

Вы хотите, чтобы функция была детерминированной (например, данный ввод всегда должен производить тот же вывод).? Вы не возражаете, если кто-то выяснит функцию, а кто-то еще сможет воссоздать эту функцию? –

+3

Если вы хотите детерминированную и ненадежную функцию, вы можете создать ее, как мы переопределим метод 'hashCode(). Скажем, умножьте каждый элемент на простое число (скажем, 37) и добавьте их вместе. –

ответ

0

Вы можете хэш ваш входной массив и использовать одно значение хеш-функции для семян экземпляра Random. Это взято из Блох:

int myHash(int[] seedAry) { 
    int result = 17; 
    for (int s : seedAry) { 
    result = 31 * result + s; 
    } 
    return result; 
} 

Используйте возвращаемое значение хеш-функции для семян экземпляр Random.

+0

OP тот же выход для того же входа – akalikin

+0

Да, но это не особенно быстро, если мне приходится каждый раз создавать новый случайный объект или если я устанавливаю семя каждую операцию на существующий случайный объект. – user3116844

+0

Я решил, что это достаточно быстро. благодаря – user3116844

0
Random ng = new Random(); 
for(int i: seedArray){ 
    outint = ng.setSeed(i).nextInt(); 
} 

Он всегда будет давать тот же набор выходных целых чисел, если только не будет изменен генератор случайных чисел.

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