잠재적 함수 이진 힙 추출 최대 O (1)


10

추출 최대가 상각 시간에 완료되도록 최대 힙에 대한 잠재적 함수를 계산하는 데 도움이 필요합니다 . 잠재적 인 방법을 잘 이해하지 못한다고 덧붙여 야합니다.O(1)

인서트 함수는 추출 비용을 줄이기 위해 더 많은 "지급"해야한다는 것을 알고 있으며 이는 힙 높이와 관련이 있어야합니다 ( 가 삽입은 또는 이어야 함2 로그 ( n ) n k = 1 2 로그 ( k )log(n)2log(n)k=1n2log(k)

답변:


13

다음을 시도하십시오 :

힙 ( ) 에서 요소 ( 의 가중치 ( )는 대응하는 이진 트리에서의 깊이이다. 따라서 루트의 요소는 가중치가 0이고 두 하위 요소의 가중치는 1입니다. 잠재적 인 기능으로 정의 I HwiiH

Φ(H)=iH2wi.

이제 힙 작업을 분석하겠습니다. 들어 삽입 새 요소 추가 깊이 추가 가장에서 . 이로 인해 의 전위가 증가하고 시간 안에 완료 될 수 있습니다 . 그런 다음 새 힙 요소를 "버블 링"하여 힙 특성을 보장합니다. 시간 이 걸리고 변경되지 않습니다. 따라서 삽입 비용은 입니다.로그 ( N ) 2 D O ( 1 ) O ( 로그 N ) Φ ( H ) O ( 로그 ( N ) + Δ ( Φ ( H ) ) ) = O ( 로그 N )dlog(n)2dO(1)O(logn)Φ(H)O(log(n)+Δ(Φ(H)))=O(logn)

이제 extractMin을 고려하십시오 . 루트를 꺼내 힙의 마지막 요소로 바꿉니다. 이렇게하면 가능성이 감소하여 힙 속성을 복구 할 수 있으므로 상각 된 비용은 이제 입니다.O ( 1 )2log(n)O(1)

잠재적 기능에 대한 일반적인 질문이있는 경우이를 다른 질문으로 제시해야합니다.


나는 당신이 정확하지만 삽입을 이해하지 못했습니다. 왜 변경? 답이 분명한 경우 죄송하지만 Δ 를 확장 할 수 있습니까? 나는 왜 당신이 음수를 가질 지 알 수 없습니다Δ(Φ(H)))Δ
andrei

는 인서트 전후의 전위차를 나타냅니다. 삽입 케이스의 경우 최대 2 log ( n ) 입니다. 힙에서 두 요소 (버블 업 또는 버블 다운)를 교환하면 한 가중치는 +1이되고 다른 가중치는 -1이 변경되므로 전위 (모든 가중치의 합계)는 동일하게 유지됩니다. Δ(Φ(H))2log(n)
A.Schulz

수리 O (1)는 어떻습니까? 힙 복구에 잠재적 기능을 사용하는 것은 무엇입니까? 명확하게
설명해 주

@Sohaib : 수리에는 시간이 걸리지 만 O ( 1 ) 는 위의 잠재적 기능을 사용하여 시간을 상각했습니다. 상각 후원가를 분석하는 것 외에는 잠재적 기능을 다른 용도로 사용하지 않습니다. O(logn)O(1)
A.Schulz

@ A.Schulz 따라서 본질적으로 이것은 추출 작업이 매번 잠재적 기능이 2logn 감소 할 때 (수리시 동일하게 증가 할 수도 있고 그렇지 않을 수도 있기 때문에) n 번 수행된다는 것을 의미합니다. 결국 트리에 노드가 없기 때문에 그러한 일에 대한 전반적인 복잡성은 일정한 시간이 될 것입니다. 내가 맞아?
Sohaib
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.