반복 없이 배열 항목을 무작위로 효율적으로 선택하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-31 03:54:01
원래의
681명이 탐색했습니다.

How to Efficiently Select Array Items Randomly Without Repetition?

반복 없이 효율적으로 배열 항목을 무작위로 선택

배열에서 항목을 무작위로 선택하여 최근 선택한 항목이 반복되지 않도록 하는 기능을 고안했습니다. 현재 솔루션은 효과적으로 작동하지만 효율성과 과도한 루프로 이어질 수 있는지 여부에 대한 우려가 있습니다. 보다 효율적인 접근 방식을 모색해 보겠습니다.

1. 재귀 고려 사항

예, chooseName() 함수는 고유한 이름을 찾을 때까지 자체 호출하므로 재귀적인 것으로 간주될 수 있습니다. 재귀는 특정 문제에 유용할 수 있지만 스택 사용량과 과도한 깊이 가능성을 염두에 두는 것이 중요합니다.

2. 효율적인 솔루션

효율성 문제를 해결하기 위해 다른 전략을 채택할 수 있습니다. 고유한 이름을 찾을 때까지 재귀 및 반복에 의존하는 대신 원본 배열의 복사본을 만들고 모든 항목이 선택될 때까지 복사본에서 항목을 무작위로 선택할 수 있습니다. 모든 항목이 소진되면 복사본을 원래 상태로 재설정합니다.

다음은 이 접근 방식의 JavaScript 구현입니다.

<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']);
console.log(chooser()); // => "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.</code>
로그인 후 복사

이 접근 방식은 JavaScript의 배열 슬라이스() 메서드를 사용하여 다음을 수행합니다. 원본 배열의 얕은 복사본을 만듭니다. 그런 다음 복사본에서 무작위 항목을 반복적으로 선택하고 복사본에서 제거하여 모든 항목이 소진될 때까지 반복 없이 무작위 선택을 효과적으로 모방합니다. 모든 항목을 선택하면 복사본이 재설정되어 무작위 선택을 다시 시작할 수 있습니다.

위 내용은 반복 없이 배열 항목을 무작위로 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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