CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): guest (askrand) <lxplus004.cern.c>
날 짜 (Date): 2002년 10월 22일 화요일 오후 07시 50분 46초
제 목(Title): Re: rand(): Perl에서


문제를 좀 간단히 설명하려다 보니..

일단 목표는 가장 효과적으로 랜덤... 그러니까 최대한 '랜덤'하게

값들을 골라내는 건데요... 구체적인 작업은..

A는 1에서 20까지
B는 21에서 35까지
C는 36에서 49까지
D는 50에서 52까지
E는 53에서 80까지
F는 ...

죽 이렇게 나가는 데이터가 있습니다.
모든 값은 정수이고 한 문자에 일련의 정수들이 할당되어 있고
단, 그 할당된 정수가 몇 개인가에는 아무런 규칙이 없습니다.
그냥 할당하다보니 그렇게 된 거죠.

여기서 하려는 것은 먼저 알파벳 중에서 랜덤하게 두 개를 골라냅니다.
그리고 그 두 개에 각각 할당된 정수값들 중 하나씩 또 도합 두개를 랜덤하게
골라냅니다. 

이런 작업을 반복하는 건데요... 
그냥 생각나는 대로 아무 개념없이 했다간 저도 모르는 사이
랜덤하지 않은 셀렉션이 발생할 수도 있을 것 같아서요...

그러니까 

@alphabets = (A..Z);
srand;
for ($i =1; $i <=2; $i++)
$alphabet_index = int(rand(27)) + 1;
push (@temp_index_paired, $alphabet_index);
}
foreach (@temp_index_paired) {
$value = int(rand($end-$start+1)) + $start; 
        # $start: 해당 문자열에서 시작하는 값, $end: 해당 문자열에서 끝나는 값
push (@temp_values_paired, $value);
}

perl을 처음 보시지만 이 문제에 일반적으로 randomisation 조언을
주실 분들도 계셔 설명 잠깐 드리면 push는 배열에 원소를 추가해주는 
함수입니다. 

위와 같이 했을 때 srand;가 제일 위에 저렇게 한번 들어가면 충분한지
아니면 foreach 앞에 한번 더 들어가야 하는지
아니면 각 루프마다도 들어가 있어야 하는지 등이 헷갈리고..
저런 코드 구조로 이 문제의 랜덤화 과정이 아무 문제가 없는 건지도
궁금하고요..

다시 한번 감사드립니다..



[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.