Fisher-Yates 셔플링 알고리즘: 선형 시간 셔플링 알고리즘
정수 목록을 무작위로 정렬할 때는 효율성이 매우 중요합니다. 질문의 원래 방법은 무작위성을 달성하려고 시도하지만 처리 중에, 특히 마지막 부분에서 효율성 문제가 발생할 수 있습니다.
더 효율적인 솔루션은 입력 목록의 진정한 무작위 재정렬을 보장하는 선형 시간 알고리즘인 Fisher-Yates 셔플링 알고리즘입니다. 교체된 요소를 추적하기 위해 부울 배열에 의존했던 원래 접근 방식과 달리 Fisher-Yates 셔플링 알고리즘은 더 간단한 접근 방식을 취합니다.
<code class="language-c#">for (int i = iItemCount - 1; i >= 1; i--) { int j = random.Next(i + 1); int temp = values[j]; values[j] = values[i]; values[i] = temp; }</code>
알고리즘은 현재 요소를 목록에서 이전에 무작위로 선택한 요소와 반복적으로 교환하는 방식으로 작동합니다. 알고리즘이 진행됨에 따라 정렬되지 않은 요소의 범위가 좁아져 O(n) 시간 내에 전체 목록을 효과적으로 섞습니다.
Fisher-Yates 셔플링 알고리즘을 사용하면 정수 목록을 효율적이고 무작위로 재배열하여 원래 알고리즘의 잠재적인 함정을 피할 수 있습니다.
위 내용은 Fisher-Yates 셔플은 어떻게 선형 시간 랜덤 셔플링을 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!