피보나치 힙의 감소 키 작업에서 O (1) 상각 된 복잡성을 어떻게 얻을 수 있습니까? 요소가 포함 된 피보나치 힙의 노드를 찾는 것은 BFS를 사용하여 O (n) 시간이 걸리므로 O (1) 상각 시간을 가져올 수 없습니다. 참고로Fibonacci 힙에서 감소 키를 구현하여 O (1) 상각 시간에 실행하는 방법은 무엇입니까?
, 여기에 문제의 노드를 검색 할 수 BFS의 내 구현의 :
public fHeapNode search(int x){
Stack<fHeapNode> stack = new Stack<fHeapNode>();
stack.push(minNode);
//Breath first searching
while (!stack.empty()) {
fHeapNode curr = stack.pop();
if(curr.data==x) {return curr;}
else{
if (curr.child != null) {
stack.push(curr.child);
}
fHeapNode start = curr;
curr = curr.right;
while (curr != start) {
if (curr.child != null) {
stack.push(curr.child);
}
if(curr.data==x) {return curr;}
curr = curr.right;
}
}
}
return null;
}
을 그리고 여기 감소 키에 대한 내 코드입니다 : 일반적으로
public void decreaseKey(fHeapNode x, double k)
{
if (k > x.key) {
//throw new IllegalArgumentException("entered value is wrong");
}
x.key = k;
fHeapNode tempParent = x.parent;
if ((tempParent != null) && (x.key < tempParent.key)) {
cut(x,tempParent);
cascadingCut(tempParent);
}
if (x.key < minNode.key) {
minNode = x;
}
}
headnodes의 arraylist를 만들어서 할 수 있습니까 ?? 그래서 thee 업데이 트가 자동으로 arraylist뿐만 아니라 그들은 단지 참조하기 때문에 반영됩니까 ?? 나 맞아 ?? –
언급 한 이유와 정확히 일치하는 Prim 알고리즘을 구현할 때 모든 힙 노드를 포함하는 배열을 저장하는 것이 일반적입니다. 그것은 상당히 속도가 빨라질 것입니다. – templatetypedef
감사합니다. 그것은 효과가있다! –