셔플리스트 : 효율적인 알고리즘입니까? <..>
이 기사에서는 및 의 사용이 목록을 셔플하는 효과적인 방법인지에 대해 설명합니다.
메서드 Random
OrderBy
각 요소에 대해 난수를 생성하기 위해 제공된 코드는 다음 숫자에 따라 목록을 재개합니다.
평가
이 방법은 매우 직관적 인 것처럼 보이지만 몇 가지 단점이 있습니다. Random
OrderBy
컴퓨팅 복잡성 :
시간 복잡성은 O (n log n)이며, 이는 큰 목록에 비효율적입니다. 더 나은 셔플 알고리즘은 O (n)의 복잡성을 갖습니다.
잠재적 인 문제 : 임의의 번호 요소를 기준으로 는 편차 셔플 링을 유발할 수 있으며, 특정 요소의 빈도는 다른 요소보다 높을 수 있습니다.
대안
<code>var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());</code>
더 나은 셔플 알고리즘은 Fisher-Yates Shuffle로,이 요소를 목록에서 임의의 위치로 교환합니다. 이것은보다 균일 한 분포를 제공하며 복잡성은 O (n)입니다.
구현
이 확장 방법은 Fisher-Yates의 셔플 사용을 단순화하고 새로운 어레이를 생성 할 필요성을 피합니다.
결론
및 - 는 셔플 링에 사용될 수 있지만 효율성과 편차의 문제가 있습니다. Fisher-Yates Shuffle은보다 효율적이고 비정규적인 솔루션을 제공하며, 이는 대부분의 응용 분야에서 섞어야하는 첫 번째 선택입니다.
위 내용은 `random` 및`orderby '를 사용하는 효율적인 방법은 목록을 셔플하는 방법입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!