Go 언어에서 배열을 셔플링하는 데 사용되는 rand.Shuffle 함수는 Fisher-Yates 알고리즘을 기반으로 하며, 이는 범위 내에서 무작위 정수를 생성하는 데 비용이 많이 드는 모듈로/나눗셈 연산을 포함합니다. 이를 최적화하기 위해, Daniel Lemire의 방법을 사용하여 나눗셈을 피하고, Nevin Brackett-Rozinsky와 Daniel Lemire의 연구를 통해 배칭 기법을 도입하여 성능을 향상시킬 수 있습니다. 이 방법은 단일 64비트 무작위 정수를 사용하여 여러 무작위 숫자를 생성함으로써 rand.Uint64() 호출 수를 줄이고, 결과적으로 셔플링 속도를 크게 향상시킵니다. 실험 결과, 배칭 기법을 사용한 셔플링은 표준 라이브러리보다 최대 2.6배 빠른 성능을 보였습니다.
1개의 좋아요