
RandomRandomizer::shuffleArray 함수는 Fisher-Yates 알고리즘을 사용하여 배열을 무작위로 섞습니다. 이 알고리즘은 1958년 Ronald Fisher와 Frank Yates가 제안한 알고리즘으로, 배열의 모든 원소를 무작위로 섞는 데 사용됩니다.
이 알고리즘의 시간 복잡도는 O(n), 즉 배열의 크기에 선형적으로 증가합니다. 따라서 배열의 크기가 커질수록 시간 복잡도도 증가합니다.
이 함수를 사용할 때, 이미 섞인 배열을 다시 섞을 때 발생할 수 있는 문제는 중복 섞음(collision)입니다. 중복 섞음은 이미 섞인 배열을 다시 섞을 때, 원래의 배열과 동일한 순서로 섞이는 현상입니다. 이 문제를 해결하기 위해, shuffleArray 함수는 각 원소를 무작위로 선택하여 배열의 다른 위치로 이동하는 방식으로 작동합니다.
예를 들어, 5개의 원소가 있는 배열을 섞을 때, shuffleArray 함수는 다음과 같은 과정을 거칩니다.
1. 첫 번째 원소를 무작위로 선택합니다.
2. 두 번째 원소를 무작위로 선택합니다. 이 원소는 첫 번째 원소와 다른 위치로 이동합니다.
3. 세 번째 원소를 무작위로 선택합니다. 이 원소는 두 번째 원소와 다른 위치로 이동합니다.
4. 네 번째 원소를 무작위로 선택합니다. 이 원소는 세 번째 원소와 다른 위치로 이동합니다.
5. 다섯 번째 원소를 무작위로 선택합니다. 이 원소는 네 번째 원소와 다른 위치로 이동합니다.
이러한 과정을 거치면, 배열의 모든 원소가 무작위로 섞여서 최종적으로 새로운 순서가 됩니다.
2025-07-11 17:08