최소 또는 최대 값을 제외한 모든 숫자를 제거하는 메서드로 자체 힙을 구현하려고하지만 한 가지 문제를 해결할 수 없습니다. 그 제거 기능을 쓰려면, 힙에있는 요소들에 대한 포인터가 있어야합니다 (주어진 원소를 제거하는 O (logn) 시간을 가짐). 하지만 내가 이런 식으로 시도했을 때 :C++ 힙 (heap with any element methods)
vector<int*> ptr(n);
물론 작동하지 않았다.
아마도 int를 포함하는 다른 클래스 나 구조체를 내 힙에 삽입해야하지만 지금은 int를 사용하여 솔루션을 찾고 싶습니다 (int를 사용하여 이미 구현했기 때문에).
예,하지만 힙의 요소를 제거하고 싶습니다. 최대 또는 최소가 아닙니다. 모든 요소를 제거하려면 const time에서 찾은 다음 heapify() 프로 시저 (힙 순서 지정)를 생성 할 수 있어야합니다. 그러나 문제는 const time에서 그 요소를 찾는 것입니다. – JosephConrad
당신은 그 말을하지 않았습니다, 당신은 요소를 제거 할 수 없다는 것에 대해 말했고, 벡터를 사용하는 것에 대해서 말했습니다. 힙에서 상수 시간에 임의의 요소를 찾을 수있는 방법은 없습니다. 당신은 심지어 log (n) 시간에 하나를 찾을 수 없습니다. –
우선 순위 큐를 유지하기 위해 마음에두고있는 알고리즘이 트리가 실제로 이진 트리가 될 필요가 없다는 것을 주목할 필요가 있습니다! 이 알고리듬은 2 이상의 다른 d 값들에 대해서도 d- 힙에 대해 그리고 작업에 대해 동일한 복잡성으로 작동합니다. 사실, 경우에 따라서는 2보다 큰 d가 더 효과적입니다. 왜냐하면 비교 대상이 움직이는 물체에 비해 싸기 때문입니다. –