> 웹 프론트엔드 > JS 튜토리얼 > 특히 배열이 지속적으로 수정되는 경우 반복 없이 배열에서 무작위 항목을 효율적으로 선택할 수 있습니까?

특히 배열이 지속적으로 수정되는 경우 반복 없이 배열에서 무작위 항목을 효율적으로 선택할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-01 17:16:02
원래의
589명이 탐색했습니다.

How can I efficiently select random items from an array without repetition, especially when the array is constantly being modified?

배열에서 효율적인 무작위 선택

소개

반복 없이 배열에서 항목을 무작위로 선택하는 것이 일반적인 프로그래밍입니다. 일. 그러나 항목 풀이 지속적으로 수정되는 경우 효율성 확보가 중요합니다.

질문

개발자가 배열에서 항목을 무작위로 선택하는 기능을 구현했습니다. 반복을 피하기 위해 최근 선택 목록을 유지하면서. 하지만 효율성에 대한 우려를 표명하며 좀 더 최적의 접근 방식이 있는지 문의합니다.

답변

1. 재귀 설명

제공된 코드는 실제로 재귀 함수인 것으로 보입니다. 재귀에는 자신을 호출하는 함수가 포함되어 있어 특정 시나리오에서는 비효율성을 초래할 수 있습니다.

2. 효율성 향상

효율성을 높이려면 다음 대체 접근 방식을 고려하십시오.

  1. 원본 어레이의 복사본을 만듭니다. 이렇게 하면 원본 어레이가 그대로 유지됩니다.
  2. 사본에서 항목을 무작위로 선택하는 기능을 정의합니다.
  3. 사본이 고갈되면 다음에서 새 사본을 생성하여 재설정합니다. 원래 배열.

코드 구현:

<code class="javascript">function randomNoRepeats(array) {
  var copy = array.slice(0);
  return function() {
    if (copy.length < 1) {
      copy = array.slice(0);
    }
    var index = Math.floor(Math.random() * copy.length);
    var item = copy[index];
    copy.splice(index, 1);
    return item;
  };
}

var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']);</code>
로그인 후 복사

설명:

이 접근 방식 최근 선택 항목의 배열을 관리하는 코드에서 무작위 선택 논리를 분리합니다. 결과적으로 선택기 기능 실행 시 한 번만 무작위 선택이 발생하므로 효율성이 향상됩니다.

복사본이 고갈될 때마다 복사본을 재설정하여 모든 항목이 동일한 확률로 선택되도록 보장하는 기능입니다. 이렇게 하면 코드가 "고유한" 이름을 찾으려고 무한 루프에 갇히게 되는 잠재적인 문제가 제거됩니다.

위 내용은 특히 배열이 지속적으로 수정되는 경우 반복 없이 배열에서 무작위 항목을 효율적으로 선택할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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