, . List ArrayList, , (a LinkedList get , O (n), O (n ^ 2) ).
O (n) , , , Fisher-Yates/Knuth shuffle, O (n) . , , , .
:
, , , , O (n).
O (1) O (n).
, , .
. , 2 a () b a % b, 2a % b, 3a % b, 4a % b,..., 0, 1, 2,..., b-2, b-1, , . , ( , ).
, , , , , ( , , ), .
, , , .
. 1 len-1 nextInt, 1,2,3,... ...,3,2,1 , , , , , .
, (mod length), .
Java:
static Random gen = new Random();
static void printShuffle(int len)
{
int newLen = len-1;
boolean prime;
do
{
newLen++;
prime = true;
for (int i = 2; prime && i < len; i++)
prime &= (newLen % i != 0);
}
while (!prime);
long val = gen.nextInt(len-3) + 2;
long oldVal = val;
do
{
if (val < len)
System.out.println(val);
val = (val + oldVal) % newLen;
}
while (oldVal != val);
}