> 웹 프론트엔드 > JS 튜토리얼 > Array.sort()는 배열을 섞을 수 있습니까? 그렇다면 얼마나 무작위입니까?

Array.sort()는 배열을 섞을 수 있습니까? 그렇다면 얼마나 무작위입니까?

DDD
풀어 주다: 2024-12-07 14:30:14
원래의
523명이 탐색했습니다.

Can Array.sort() Shuffle an Array, and If So, How Random Is It?

Array.sort()를 사용하여 배열을 섞을 수 있습니까?

초기 회의론에도 불구하고 Array.sort() 메서드는 실제로 다음과 같을 수 있습니다. 배열 셔플링에 사용됩니다. 작동 방식은 다음과 같습니다.

셔플링에 Array.sort() 사용의 장점과 단점

장점:

  • 단순성: 구현은 간단합니다. JavaScript에 내장된 정렬 기능.
  • 효과: 대부분의 실용적인 목적을 위해 적절하게 무작위 결과를 생성합니다.
  • 성능에 미치는 영향은 제한적: 반면 정렬 알고리즘은 일반적으로 시간 복잡도가 O(n log n)입니다. 사용되는 무작위화 함수(Math.random())는 다음과 같습니다. O(1), 이는 사용자 정의 셔플링 알고리즘을 사용할 때와 비교하여 약간의 성능 이점을 가져올 수 있습니다.

단점:

  • 없음 -균일한 분포: 정렬 알고리즘의 구현은 결과의 분포에 영향을 미쳐 잠재적으로 고르지 못한 결과를 초래할 수 있습니다. 확률.
  • 정렬 알고리즘에 따라 다름: 셔플의 효율성은 Array.sort() 메서드에서 사용하는 정렬 알고리즘에 따라 달라집니다.
  • 무한 루프: 특정 입력이 다음과 같은 경우 일부 정렬 알고리즘은 무한 루프에 들어갈 수 있습니다. 제공됩니다.

결과의 무작위성 측정

셔플링 기법의 무작위성을 정량화하기 위해 실증 테스트를 수행하고 결과를 기대값과 비교할 수 있습니다. . 예를 들어, 가능한 각 순열의 확률을 계산하고 이를 균등 분포와 비교할 수 있습니다.

대체 셔플링 알고리즘(Fisher–Yates)

Array를 사용하는 동안. sort()는 편리하지만 더 최적이고 잘 알려진 셔플링 알고리즘은 Fisher-Yates입니다. shuffle:

function shuffle(array) {
  var tmp, current, top = array.length;

  if (top) while (--top) {
    current = Math.floor(Math.random() * (top + 1));
    tmp = array[current];
    array[current] = array[top];
    array[top] = tmp;
  }

  return array;
}
로그인 후 복사

이 알고리즘은 효율적(O(n))이며 결과의 균일한 분포를 보장합니다.

위 내용은 Array.sort()는 배열을 섞을 수 있습니까? 그렇다면 얼마나 무작위입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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