"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 반복 없이 배열 항목을 무작위로 효율적으로 선택하는 방법은 무엇입니까?

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

2024-11-03에 게시됨
검색:639

How to Efficiently Select Array Items Randomly Without Repetition?

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

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

1. 재귀 고려 사항

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

2. 효율적인 솔루션

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

이 접근 방식의 JavaScript 구현은 다음과 같습니다.

function randomNoRepeats(array) {
  var copy = array.slice(0);
  return function() {
    if (copy.length  "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.

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

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3