> 백엔드 개발 > C++ > Fisher-Yates 셔플은 어떻게 선형 시간 랜덤 셔플링을 달성할 수 있습니까?

Fisher-Yates 셔플은 어떻게 선형 시간 랜덤 셔플링을 달성할 수 있습니까?

Barbara Streisand
풀어 주다: 2025-01-21 14:06:11
원래의
377명이 탐색했습니다.

How Can the Fisher-Yates Shuffle Achieve Linear-Time Random Shuffling?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿