2011-11-08 4 views
2

나는 다음과 같은 쿼리에 응답 할 수있는 방식으로 번호를 유지하는 데이터 구조를 제안하십시오 유지 = O (로그 (N))데이터 구조는 숫자가

삽입 K보다 적은 숫자의 수 - O (N 로그())

그것은 숙제 아니지만 내가 더 큰 하나를 해결하기 위해 발생하고 작은 문제 - Number of students with better grades and lower jee rank

비록 각 노드에서 서브 트리에 노드 수를 유지하면서 avl 트리를 가지고 있습니다. 그러나 삽입이 완료되고 재 밸런싱이 완료되면 각 노드에서이 수를 유지하는 방법을 모릅니다.

+0

냄새 숙제 ... 지금까지 생각해 봤어요? – m0skit0

+1

@ m0skit0 편집 된 질문보기 –

답변

1

또한 AVL 트리를 사용해 보겠습니다. 훨씬 깊게 보지 않고서는 이것이 추가하기가 너무 어려울 것이라고 생각하지 않습니다. AVL 트리의 경우에는 항상 각 노드의 각 하위 트리의 깊이를 알 필요가 있습니다 (또는 적어도 균형 요소). 따라서 하위 트리의 크기를 전파하는 것이 너무 어렵지 않아야합니다. 회전의 경우, 각 노드와 각 하위 트리가 어디에 상주하는지 정확하게 알 수 있으므로 회전 된 노드에 대한 단순한 다시 계산이어야합니다.

1

이진 트리에서 찾는 것은 O (log (n))입니다. 이 노드의 서브 트리의 크기를 저장하는 경우 :

  • 를 사용하면 노드의 카운터를 증가 하위 트리에서 성공적인 삽입에서 돌아 오는 수있다;
  • 을 삭제하는 중입니다.

그래서 하위 트리 크기는 찾기와 같습니다. O (log (n)).

+0

이러한 작업은 평형 이진 검색 트리에서만 log (n)입니다. 그리고 정확히 내 질문에 관련 노드 카운터를 업데이 트하는 방법. –

+0

@NitinGarg : 누군가 이진 트리를 언급 할 때마다 균형 잡힌 트리가 될 가능성이 큽니다. 노드에서 여분의 카운트 정보를 유지하는 것은 트리에서 작업 할 때마다 불변량을 유지하는 것입니다. – hugomg

-1

힙 데이터 구조의 다양한 변형을 살펴보십시오. here.

+0

힙은 최대/최소 요소를 찾는 데 적합합니다. – hugomg

+0

힙은 n 개의 가장 작은 숫자를 찾는 데 유용합니다. OP는 "k보다 적은 숫자의 개수"를 요구했습니다. 나는 그가 k보다 작은 원소의 수에 관심이 있다는 것을 이해한다. 이는 반복적으로 가장 작은 요소를 취하거나 힙 데이터 구조를 검사하여 해결할 수 있습니다. – jmg

관련 문제