Page 63 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 63

간이 달라지고, 그 현재 시간의 값을 seed(씨앗)로 srand 함수에 전달하면 생성되는 난수도 무작위로
                        생성됩니다.



                        사실 rand 함수가 생성하는 난수는 의사 난수입니다. 의사 난수란 ‘난수처럼 보이지만 일정한 규칙에
                        따라 생성되는 수’를 말합니다. rand 함수가 생성한 난수를 의사 난수라 부르는 이유는 한 번 난수를
                        생성하면 다음에 생성할 난수를 예측할 수 있기 때문입니다. 의사 난수가 아닌 진짜 난수는 다음에 생
                        성할 난수를 예측할 수 없습니다.



                              조금만 더!  진짜 난수, 의사 난수?

                           로또 복권에서 번호가 적힌 공을 손으로 하나하나 꺼내 당첨 번호를 결정하는 과정은 ‘진짜 난수’를 생성
                           하는 과정입니다. 의사 난수에서 의사(擬似, 본뜰 의, 비슷할 사)는 실제와 비슷하다는 뜻입니다.




                              조금만 더!  컴퓨터에서 생성하는 난수는 진짜 난수가 아닙니다.

                           컴퓨터 과학에서 난수는 보통 특정 입력값이나 컴퓨터 환경에 따라 무작위로 선택한 것처럼 보이는 난수를
                           생성합니다. 그런데 srand 함수에 전달한 seed(씨앗)의 값과 컴퓨터 환경이 같다면 그 결과값은 항상 같습
                           니다. 결국 컴퓨터에 의해 생성된 모든 난수는 미리 컴퓨터가 계산해 둔 의사(擬似) 난수입니다. 컴퓨터는 계
                           산된 결과만 가지고 난수를 생성하는데, 이 계산된 결과는 입력값에 의해 결정되므로 이 값으로 임의의 난수
                           를 생성할 수는 없습니다(컴퓨터를 처음 켜면 난수표를 생성하여 보관한다고 생각하면 됩니다).

                           seed(씨앗값) 1을 넣은 경우의 예 : 항상 1 → 105 → 999 → 1002…의 순서로 숫자를 생성
                           seed(씨앗값) 2를 넣은 경우의 예 : 항상 2 → 892 → 7291 → 10123…의 순서로 숫자를 생성
                           …

                           따라서 프로그램에서 매번 같은 방법(같은 seed(씨앗)를 사용해)으로 난수를 가져오면 처음 실행할 때 이외
                           에는 난수라고 할 수 없습니다. 그래서 보통 seed(씨앗)라 불리는 수를 srand 함수에 매개변수로 매번 다
                           르게 전달해 항상 다른 의사 난수를 생성해야 합니다. 이때 seed(씨앗) 값을 항상 다르게 주기 위해 현재
                           시간을 이용하는 것이 일반적입니다. 현재 시간은 매 순간 바뀌므로 이전에 발생한 의사 난수를 다시 생성
                           하지는 않습니다.








                        배열 요소를 역순으로 정렬하기

                        이번에는 배열 요소를 역순으로 정렬하는 알고리즘을 살펴보겠습니다. 예를 들어, 배열 a의
                        요소 개수가 7이고 첫 번째부터 순서대로 {22, 57, 11, 32, 91, 68, 70}이 들어가 있다면 그것




                                                                                      02• 기본 자료구조  63
   58   59   60   61   62   63   64   65   66   67   68