2013-01-08 2 views
0

말 크기 5000 arr[5000]의 배열에 100 임의 색인을 생성해야합니다. 나는 rand()가 더 많은 CPU를 사용할 것이므로 100 번 반복 할 필요가 없다고 생각한다. 한 번만 호출하고 무작위 배열 인덱스를 갖는 메커니즘을 원합니다. 내 생각은 처음 20 개의 인덱스에 대해 임의의 값을 가지며 오프셋을 생성하고 생성 된 임의의 값에 계속 추가하는 것입니다. 즉 10이 처음 20 개 색인의 임의 값이면 오프셋이 6 인 경우 내 임의의 숫자는 10,16,22,28...etc 이 될 것이라고 생각하십니까? 다른 것을 제안 해 주시겠습니까? 고마워요.난수 생성

+1

'rand()'를 100 번 호출하면 문제가되지 않습니다. –

+0

심지어 rand() ~ 10 mil times를 호출해도 RAND 호출을 피할 수있는 대부분의 것보다 나쁠 수는 없습니다 ... –

+0

달성하고자하는 의사 임의성의 품질은 무엇입니까? 높은 품질의 무작위 지수가없는 것이 얼마나 중요할까요? 어쨌든 나는 Arvind가 LCG에 관해 언급 한 것을 제안 할 것이다. 임의성이 정말로 중요하다면 Mersenne Twister를 구현하십시오. 어떤 경우에도 LCG는 CPU 측면에서 정말 저렴합니다. – nvlass

답변

7

끔찍한 생각입니다. 결과 값은 전혀 "임의"가되지 않습니다.

루프를 수행하고 필요한 각 번호에 대해 rand()으로 전화하십시오. "더 많은 CPU를 사용하지 않습니다"(무엇입니까??), 괜찮습니다.

또한 물론 rand()은 일반적으로 의사 랜덤 생성기이며 실제로는 사용자의 접근 방식보다 좋습니다.

+0

방금 ​​'arr [5000]'에 '100'이라는 예제를주었습니다. 실제로 '2000 * arr [5000]'이 있고 '5000'의 각 배열에서 '2000'임의의 인덱스가 필요합니다. 아직도'rand()'가 CPU를 먹지 않을 것이라고 생각하십니까? 어쩌면 내 생각에는 정확한 난수가 없었을 지 모르지만 특정 범위의'rand()'가 다른 수와 오프셋이 추가 될 때마다 나는 다른 수를 가지게되었습니다. –

0

rand()를 사용하는 것이 더 좋습니다. 그러나 의사 랜덤 생성기 (99 %의 경우 올바른 대답이 아님)를 실제로 수행하려면 Linear Congruential Generator을 살펴보십시오. 그 뒤에있는 수학은 간단하며 libc의 기초입니다 random() 구현. 재미있게 실험 해 볼 수도 있습니다! 다른 link이 있습니다.