내가 스트림 데이터가오고 있고, 나는 힙 (우선 순위 큐)에 하나씩 밀어을 유지하고는, 그 결과 힙 보인다 (예 : 변경 (a, 1)에서 (a, 2) 또는 삭제 (c, 7)) 시간을 계속해서 항목을 업데이 트하십시오. 비효율적으로 힙의 항목을 찾아서 제거하기 위해 해시 테이블에 저장된 힙의 모든 항목의 위치를 사용하여 해시 테이블을 구성하려고합니다.파이썬 같은 해시 힙 구현
항목을 업데이트 할 때마다 해시 테이블을 사용하여 해당 테이블을 찾고 쉽게 변경할 수 있으며 해시 테이블의 모든 항목의 위치를 업데이트합니다.
같은 질문이 게시물에 요청하고있다 : 코드를 C++로 How to implement O(1) deletion on min-heap with hashtable을 다음과 같이
template<typename state, typename CmpKey, class dataStructure>
bool AStarOpenClosed<state, CmpKey, dataStructure>::HeapifyUp(unsigned int index)
{
if (index == 0) return false;
int parent = (index-1)/2;
CmpKey compare;
if (compare(elements[theHeap[parent]], elements[theHeap[index]]))
{
// Perform normal heap operations
unsigned int tmp = theHeap[parent];
theHeap[parent] = theHeap[index];
theHeap[index] = tmp;
// Update the element location in the hash table
elements[theHeap[parent]].openLocation = parent;
elements[theHeap[index]].openLocation = index;
HeapifyUp(parent);
return true;
}
return false;
}
을 나는 누군가가 나에게 아이디어를 설명하거나 파이썬 버전 코드를 제공 할 수 있는지 궁금, C++와 약간의 경험을 가지고 그런 구현의?
입력 해 주셔서 감사합니다. 가장 작은 키에 액세스하는 목적은 무엇입니까? – enaJ
@enaJ 더 잘 알아야합니다. 그것은 최소 힙 데이터 구조의 주요 기능입니다. 가장 작은 키에 액세스 할 필요가 없다면, 왜 min-heap을 중심으로 질문이 빌드됩니까? – Leon
내 쌍의 첫 번째 항목은 노드를 나타내며 두 번째 항목은이 노드와 연결된 가장자리를 나타냅니다. 이 문제의 큰 그림은 1 분의 롤링 시간 창에서 정점과 노드로 그래프를 업데이트하는 것입니다. – enaJ