재귀 함수의 결과를 Javascript의 배열에 연결하는 가장 빠른 방법은 무엇입니까?

icalvin102

제목에서 알 수 있듯이 재귀 함수에서 평면 배열 출력을 만드는 가장 효율적인 방법을 찾고 있습니다.

다음 예제는 올바른 결과를 생성하지만 각 재귀 수준에 대해 임시로 연결된 포인트 배열을 만들어야하므로 다소 느립니다.

class QuadTree {

  // ...
  // some other methods
  // ...

  get points() {
    if (this.divided) {
      // concatenate and return points of all subtrees
      return this.subtrees[0].points.concat(
        this.subtrees[1].points,
        this.subtrees[2].points,
        this.subtrees[3].points
      );
    }
    // return _points array of this quadtree
    return this._points;
  }
}

속도를 높일 수있는 방법이 있습니까?

이러한 종류의 문제는 중첩 / 트리 형 데이터 구조로 작업 할 때 매우 일반적이라고 생각하지만 만족스러운 솔루션을 찾지 못했습니다.

TJ 크라우 더

내가 생각할 수있는 유일한 것은 접근 자 속성을 함수로 바꾸고 (또는 함수를 함께 추가) 대상 배열을 전달하여 직접 채울 수 있도록하는 것입니다. 다음과 같은 것 :

class QuadTree {

  // ...
  // some other methods
  // ...

  getDividedPoints(target = []) {
    this.subtrees[0].getDividedPoints(target);
    this.subtrees[1].getDivdedPoints(target);
    this.subtrees[2].getDivdedPoints(target);
    this.subtrees[3].getDivdedPoints(target);
    return target;
  }

  get points() {
    if (this.divided) {
      return this.getDividedPoints([]);
    }
    // return _points array of this quadtree
    return this._points;
  }
}

또는 subtrees일반 배열 인 getDividedPoints경우 다음과 같을 수 있습니다.

getDividedPoints(target = []) {
  this.subtrees.forEach(subtree => subtree.getDividedPoints(target));
  return target;
}

그렇지 않으면 this.subtrees[0].points(삽입하는 대신) 복사를 원한다고 가정하므로 concat'꽤 괜찮을 것입니다.

하위 트리가 분할되거나 분할되지 않는 if경우 함수 에이 필요합니다 . 그리고 저는 뒤늦게 수업 이름을 알아 챘습니다. :-) 그래서 아마도 네 번의 호출을 할 것입니다.

getPoints(target) {
  if (this.divided) {
    target = target || [];
    this.subtrees[0].getPoints(target);
    this.subtrees[1].getPoints(target);
    this.subtrees[2].getPoints(target);
    this.subtrees[3].getPoints(target);
    return target;
  }
  if (target) {
    target.push.apply(target, this._points);
    return target;
  }
  return this._points; // <== If you're really okay with giving this
                       // to the caller (you were in your original code)
}

get points() {
  return this.getDividedPoints([]);
}

... 또는 그 기본 아이디어에 대한 몇 가지 다른 회전 중 하나.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

typedarray를 자바 스크립트의 배열에 복사하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

numpy 배열의 요소를 반복하고 액세스하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

PowerShell의 여러 함수에서 배열에 결과를 추가하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

파이썬에서 사전의 모든 값 (각각은 목록)을 연결하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

배열에서 값의 모든 발생을 제거하는 가장 빠른 방법은 가장 빠르게 연결하는 것입니까 아니면 필터가 더 빠른 것입니까?

분류에서Dev

2 바이트 [] 배열 간의 숫자 차이를 얻는 가장 빠른 방법은 무엇입니까?

분류에서Dev

파이썬에서 배열의 파워 셋을 계산하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

Objective-C의 배열에서 중복을 제거하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

벡터에서 정수의 주파수를 얻는 가장 빠른 방법은 무엇입니까?

분류에서Dev

열의 날짜 목록에서 가장 빠른 날짜를 찾는 방법은 무엇입니까?

분류에서Dev

js의 다른 배열에서 배열의 요소를 찾는 가장 좋은 방법은 무엇입니까?

분류에서Dev

numpy 배열의 조각을 연결하는 가장 빠른 방법

분류에서Dev

0과 n 사이에 2의 배수를 표시하기 위해 JavaScript에서 두 개의 다른 함수를 결합하는 방법은 무엇입니까?

분류에서Dev

pct_change의 결과에 %를 빠르게 추가하는 방법은 무엇입니까?

분류에서Dev

다른 netcat 연결의 데이터를 별도의 파일에 저장하는 방법은 무엇입니까?

분류에서Dev

Java의 목록에서 가장 빠른 타임 스탬프를 정렬하는 방법은 무엇입니까?

분류에서Dev

ArrayList에서 요소의 순서를 변경하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

야외에서 aikau 위젯의 함수를 재정의하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

np 배열의 두 for 루프 안에 계산 된 결과를 저장하는 방법은 무엇입니까?

분류에서Dev

데이터베이스 결과를 cakephp의 배열에 저장하는 방법은 무엇입니까?

분류에서Dev

Component의 소스를 찾는 가장 빠른 방법은 무엇입니까?

분류에서Dev

장고에서 두 개의 템플릿으로 뷰 함수를 연결하는 방법은 무엇입니까?

분류에서Dev

Vim의 빠른 참조 페이지를 표시하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

JavaScript에서 재귀 함수를 중지하는 방법은 무엇입니까?

분류에서Dev

내장 함수의 결과에서 따옴표를 억제하는 방법은 무엇입니까?

분류에서Dev

Python-목록의 요소에 동일한 함수를 적용하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

Spark의 배열 열 요소에 필터를 적용하는 가장 간결한 방법은 무엇입니까?

분류에서Dev

열의 다른 값에 값을 추가하거나 연결하는 방법은 무엇입니까?

분류에서Dev

쿼리 결과를 mysql의 변수에 저장 한 다음 다른 쿼리와 에코 결과를 사용하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    typedarray를 자바 스크립트의 배열에 복사하는 가장 빠른 방법은 무엇입니까?

  2. 2

    numpy 배열의 요소를 반복하고 액세스하는 가장 빠른 방법은 무엇입니까?

  3. 3

    PowerShell의 여러 함수에서 배열에 결과를 추가하는 가장 좋은 방법은 무엇입니까?

  4. 4

    파이썬에서 사전의 모든 값 (각각은 목록)을 연결하는 가장 빠른 방법은 무엇입니까?

  5. 5

    배열에서 값의 모든 발생을 제거하는 가장 빠른 방법은 가장 빠르게 연결하는 것입니까 아니면 필터가 더 빠른 것입니까?

  6. 6

    2 바이트 [] 배열 간의 숫자 차이를 얻는 가장 빠른 방법은 무엇입니까?

  7. 7

    파이썬에서 배열의 파워 셋을 계산하는 가장 빠른 방법은 무엇입니까?

  8. 8

    Objective-C의 배열에서 중복을 제거하는 가장 빠른 방법은 무엇입니까?

  9. 9

    벡터에서 정수의 주파수를 얻는 가장 빠른 방법은 무엇입니까?

  10. 10

    열의 날짜 목록에서 가장 빠른 날짜를 찾는 방법은 무엇입니까?

  11. 11

    js의 다른 배열에서 배열의 요소를 찾는 가장 좋은 방법은 무엇입니까?

  12. 12

    numpy 배열의 조각을 연결하는 가장 빠른 방법

  13. 13

    0과 n 사이에 2의 배수를 표시하기 위해 JavaScript에서 두 개의 다른 함수를 결합하는 방법은 무엇입니까?

  14. 14

    pct_change의 결과에 %를 빠르게 추가하는 방법은 무엇입니까?

  15. 15

    다른 netcat 연결의 데이터를 별도의 파일에 저장하는 방법은 무엇입니까?

  16. 16

    Java의 목록에서 가장 빠른 타임 스탬프를 정렬하는 방법은 무엇입니까?

  17. 17

    ArrayList에서 요소의 순서를 변경하는 가장 빠른 방법은 무엇입니까?

  18. 18

    야외에서 aikau 위젯의 함수를 재정의하는 가장 좋은 방법은 무엇입니까?

  19. 19

    np 배열의 두 for 루프 안에 계산 된 결과를 저장하는 방법은 무엇입니까?

  20. 20

    데이터베이스 결과를 cakephp의 배열에 저장하는 방법은 무엇입니까?

  21. 21

    Component의 소스를 찾는 가장 빠른 방법은 무엇입니까?

  22. 22

    장고에서 두 개의 템플릿으로 뷰 함수를 연결하는 방법은 무엇입니까?

  23. 23

    Vim의 빠른 참조 페이지를 표시하는 가장 빠른 방법은 무엇입니까?

  24. 24

    JavaScript에서 재귀 함수를 중지하는 방법은 무엇입니까?

  25. 25

    내장 함수의 결과에서 따옴표를 억제하는 방법은 무엇입니까?

  26. 26

    Python-목록의 요소에 동일한 함수를 적용하는 가장 빠른 방법은 무엇입니까?

  27. 27

    Spark의 배열 열 요소에 필터를 적용하는 가장 간결한 방법은 무엇입니까?

  28. 28

    열의 다른 값에 값을 추가하거나 연결하는 방법은 무엇입니까?

  29. 29

    쿼리 결과를 mysql의 변수에 저장 한 다음 다른 쿼리와 에코 결과를 사용하는 방법은 무엇입니까?

뜨겁다태그

보관