> 백엔드 개발 > C++ > `renderby '를`random'과 함께 사용 하는가 목록을 셔플하는 효율적인 방법입니까?

`renderby '를`random'과 함께 사용 하는가 목록을 셔플하는 효율적인 방법입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-31 18:51:10
원래의
903명이 탐색했습니다.

목록을 셔플 목록에 사용하는 효율은 얼마입니까? <..> Is Using `OrderBy` with `Random` an Efficient Way to Shuffle a List?
本文探讨使用

方法洗牌列表的效率问题。代码示例如下: Random OrderBy代码工作原理

Random这段代码使用OrderBy类生成随机数。对于

列表中的每个元素,
<code class="language-csharp">var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());</code>
로그인 후 복사
方法使用lambda表达式

为其分配一个随机数。然后,根据这些随机数对列表进行升序排序,从而实现洗牌效果。

这种洗牌算法的效率如何? <..>

虽然这段代码可以实现洗牌的目的,但其效率存在问题。 이 방법의 하단 계층은 O (n log n) 정렬 알고리즘을 사용합니다. 이는 재편성 작업에 비해 너무 복잡합니다. 개편은 O (n)의 시간 복잡성 만 필요하기 때문입니다. Random orderedOrderBy更好的方法和考虑因素x => r.Next()

更有效的洗牌算法是Fisher-Yates洗牌算法,它简单易懂,并且具有O(n)的时间复杂度。 편의성과 명확성을 위해 Fisher-Yates 알고리즘을 사용하여 확장 방법을 만들 수 있습니다. Fisher-Yates는 반복 목록을 통해 셔플 알고리즘을 셔플로, 임의의 선택된 요소로 요소를 교환하여 셔플 링을 달성합니다. 다음은 간단한 확장 방법 (무제한 점검)입니다.

Fisher-Yates 알고리즘을 사용하면 셔플 링 기능을 유지하는 동안 에 의해 가져온 계산 간접비를 피할 수 있습니다.

위 내용은 `renderby '를`random'과 함께 사용 하는가 목록을 셔플하는 효율적인 방법입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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