원거리 합 문제의 세그먼트 트리 구현을위한 시간 복잡성 증명


10

세그먼트 트리를 사용하여 의 하위 배열의 합계를 찾을 수 있음을 이해합니다 . 그리고 이것은 here 자습서에 따라 시간 내에 수행 할 수 있습니다 .영형(로그)

그러나 쿼리 시간이 실제로 임을 증명할 수 없습니다 . 이 링크 (및 다른 많은 것)는 각 수준에서 처리 된 최대 노드 수가 이므로 임을 증명할 수 있다고 말합니다 .영형(로그)4영형(4로그)=영형(로그)

그러나 아마도 모순으로 어떻게 이것을 증명할 수 있습니까?

그렇다면 더 높은 차원의 배열의 합에 세그먼트 트리를 사용한다면 증거는 어떻게 확장됩니까?

예를 들어, 원래 행렬을 사분면 세그먼트 트리를 작성하는 4 개의 사분면 (선형 배열의 절반 간격과 유사)으로 나눠서 하위 행렬 합계를 찾는 것을 생각할 수 있지만 그 증거는 나를 피할 수 없습니다.


세그먼트 트리 작성은 O (n)이고 쿼리는 O (log n)이고 업데이트는 O (log N)입니다. 합계 배열에 대한 이점은 업데이트 복잡성에 있습니다.
Nurlan

답변:


11

주장은 최대가 있다는 것입니다 2각 레벨에서 확장되는 노드. 우리는 이것을 모순으로 증명할 것입니다.

아래에 주어진 세그먼트 트리를 고려하십시오.

세그먼트 트리

있다고 가정 해 봅시다 이 트리에서 확장 된 노드. 이것은 범위가 가장 왼쪽에있는 노드부터 가장 오른쪽에있는 노드까지임을 의미합니다. 그러나 범위가 가장 오른쪽 노드로 확장되면 중간 노드의 전체 범위가 적용됩니다. 따라서이 노드는 즉시 값을 반환하고 확장되지 않습니다. 따라서 각 수준에서 최대 확장2 노드와 있기 때문에 로그 레벨, 확장 된 노드는 2로그=Θ(로그)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.