심화학습
1.4.20 주사위 시뮬레이션. 다음 코드는 두 주사위의 정확한 확률 분포를 계산한다.
probabilities = stdarray.create1D(13, 0.0) for i in range(1, 7): for j in range(1, 7): probabilities[i+j] += 1.0 for k in range(2, 13): probabilities[k] /= 36.0
이 코드를 실행 완료한 후 probabilities[k]
는 주사위 합이 k
가 될 확률이 된다. 주사위 두 개를 n
번 던지는 시뮬레이션을 수행하기 위해, 1에서 6까지의 정수 난수 두 개의 합을 계산해 각 숫자 합의 발생 빈도를 추적하는 실험을 해보라. 시뮬레이션 결과가 정확한 확률에 소수점 셋째 자리까지 일치하려면 n
이 얼마가 되어야 하나?
1.4.21 가장 긴 고지대. 정수 배열이 있을 때 가장 긴 동일값 연속 구간의 길이와 위치를 구하는 프로그램을 작성하라. 이때 동일값 구간의 앞뒤 값은 구간의 값보다 작아야 한다.
1.4.22 경험적 셔플링 검사. 1.4절 배열의 기본 응용에서 우리가 작성한 카드 셔플링 코드가 제대로 작동하는지 계산을 통해 실험해보라. 명령 줄 인수로 m
과 n
을 입력받고, a[i]=i
로 초기화된 m 길이의 배열을 셔플링하는 과정을 n
번 반복하면서 셔플링 결과를 분석한 m x m
테이블 check[][]
를 출력하라. check[i][j]
는 셔플링할 때 i
가 j
위치에 들어간 횟수를 m
으로 나눈 값이다. check[][]
의 모든 요소는 n/m
에 가까워야 한다.