2012-03-10 5 views
3

나는 N 개체 목록을 가지고 있습니다.
실제 N 개의 개체 사이에 (0, N) 사이에 임의로 배치 된 X 더미 개체를 삽입하고 싶습니다.균일하게 분포 된 난수 집합 만들기

그래서 다음 코드를 시도했습니다. 나는 모든 방법 도메인 N의 말에 좋은 배급을받지 못했습니다 있지만

int[] dummyIndexes = new int[X]; 
int randomStep = N/X * 2; // *2 because the Mean is N/X/2 

Random random = new Random(); 
int randIdx = 0; 

for (int i=0; i < X; i++) 
{ 
    randIdx += random.nextInt(randomStep); 
    dummyIndexes[i] = randIdx; 
} 

이것은 확실히 작동합니다.

이 작업을 수행하는 더 좋은 방법은 무엇입니까?

+0

이 randomStep'가 ==되지 않은'하면'N' 그 결과 임의의 숫자가 균일하게 N''에 모든 방법을 분산되지 않는다는 것을 나에게 보인다. –

+0

'random.nextInt (randomStep) + 1'을해야한다고 생각합니다. 그렇지 않으면 결과가 0이면 두 개 이상의 더미 인덱스가 실제로 같은 인덱스를 갖게됩니다. – Yoni

+0

물론 'N'값을 얻으려면 nextInt에 'N + 1'을 지정해야합니다. –

답변

1

이것은 당신이 사이에 하나 개의 임의의 값이 있는지 확인합니다 각 N/X

randIdx = N * i/X + random.nextInt(N/X) + 1; 
0

이 트릭을 할 (하지만, 가장 큰 값이 N-1 N에서 새로운 장소 아무것도 될 것입니다 점에 유의한다)

int[] dummyIndexes = new int[X]; 
    int randomStep = N/X; 
    Random random = new Random(); 
    int randIdx = 0; 
    for (int i=0; i < X; i++) 
    { 
     randIdx = randomStep * i + random.nextInt(randomStep); 
     dummyIndexes[i] = randIdx; 
    } 
관련 문제