문제

짧은 버전 : 각 노드가 여러 개의 잎을 가질 수있는 많은 수준의 어린이가있는 나무 (비 2 진)에서 노드가 주어진 특정 조건을 충족시키는 최선의 방법은 무엇입니까?

long, convoluted 버전 : 폴더가 더 많은 폴더를 포함 할 수 있습니다. 생산에서 내 시스템은 가장 깊은 곳에 약 15 개의 폴더를 낳습니다. 각 폴더에는 문서가있을 수 있습니다.

사용자가 폴더로 이동하면 해당 폴더에있는 문서 수를 알아야합니다. 그들은 또한 그 문서 중 얼마나 많은 문서를 "플래그"했는지 알아야합니다. 문서를 지정하면 특정 기간이 지나면 업데이트되지 않았습니다. 이것은 역사 항목을 기반으로 결정됩니다. X보다 크면 폴더의 마지막 기록 항목을 가져 와서 플래그가 지정됩니다.

지금 이제는 모든 폴더를 반복합니다> 하위 폴더> etc> 아이들은 기록 항목을 확인하고 재귀 적으로 재귀 적으로 확인합니다. 이것은 새로운 접근 방식이 필요하므로 꽤 천천히지고 있습니다.

나는 두 가지 옵션을 제시하지만 더 나은 접근이 있는지 알고 싶어하거나,이 중 하나가 가장 좋습니다.

옵션 1 : 문서를 추가하거나 문서를 제거 할 때마다 상위 그래프를 반복하고 폴더 엔터티에 저장된 "documentcount"속성을 증가 / 감소시킵니다. 즉, 추가 / 제거는 최소한의 성능을 밟습니다. 그러나 여기서 문제는 실제로 총 문서 수와 기록 항목을 확인하여 플래그가 지정된 총 문서 수를 계산해야한다는 것입니다. 따라서 다른 필드가 필요할 때와 다른 프로세스가 필요할 때 상태 변경. 이렇게하면 속성이 아닌 메서드 호출인지 여부를 확인하는 것과 더 많은 복잡성이 도입됩니다.

옵션 2 : 시스템의 각 폴더의 "DocumentCount"및 "UnopenedDocumentCount"속성을 통해 타이머 작업이 실행되고 업데이트되며 CPU주기가 많이 있으며 낭비가 보입니다.

옵션 3 :이 방법을 생각해보십시오. 아마도 모든 문서를 반복하고 평가하기 전에 문서가 대상 노드의 직접 또는 먼 자식인지 확인하는 것일 수 있습니다. 평가하기 전에 재귀를 통해 반복하는 것보다 낫습니다. 나는 이것이 트리에서 하이 업에 더 좋을 것이지만, 낮은 수준의 노드에 대한 모든 자녀를 반복하는 것은 어리 석다. 흠 ...

나는 옵션 1을 구현하기 위해 유혹을 받았습니다. 다른 옵션이있는 것입니까?

도움이 되었습니까?

해결책

트리에 노드를 추가 할 때 집계하려는 조건을 알고있는 경우 추가 루틴을 디자인 할 수 있으므로 트리를 통해 재귀를 누른 다음 재귀 및 업데이트를 푸시 할 수 있습니다.부모 노드의 수속.

마찬가지로 노드를 업데이트하면 재귀를 푸시하고 부모를 업데이트하십시오.

미리 조건을 모르는 경우 나사로가 듭니다.당신은 어떤 질서가 무엇이든간에 나무를 가로 지르는 선택의 여지가 없습니다.당신이 말한 것에서, 노드에서하고있는 것이 무엇이든지 노드에서하고있는 것처럼 들리는 것처럼 들리며, 왼쪽과 오른쪽 하위 트리 중 무엇이든지, 우호적 인 답변은 올바른 대답처럼 보이게합니다.

참고 : 위의 사항이 당신에게 의미가 없으면 Knuth Vol.1 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 softwareengineering.stackexchange
scroll top