키 감소 및 키 증가 조작이있는 우선 순위 큐


11

Fibonnaci 힙 다음과 같은 작업을 지원합니다 :

  • insert(key, data) : 데이터 구조에 새로운 요소를 추가
  • find-min() : 최소 키를 가진 요소에 대한 포인터를 반환
  • delete-min() : 최소 키로 요소를 제거합니다
  • delete(node) :가 가리키는 요소를 삭제합니다. node
  • decrease-key(node) :가 가리키는 요소의 키를 줄입니다. node

이외의 모든 삭제 작업은 (상각) 시간 및 삭제 작업은 O ( 로그 n은 ) 시간을 상각.영형(1)영형(로그)

또한 지원하는 우선 순위 큐의 어떤 구현 거기 increase-key(node) (상각) 시간은?영형(1)


@Raphael 최소 요소의 키 를 늘려서 가장 큰 키가 되더라도 , 일정량의 재조정을하지 않아도되는 것은 당연하지 않습니다.
Joe

답변:


10

영형(1) find-minincrease-keyinsert영형()

vector<T>
fast_sort(const vector<T> & in) {
  vector<T> ans;
  pq<T> out;
  for (auto x : in) {
    out.insert(x);
  }
  for(auto x : in) {
    ans.push_back(*out.find_min());
    out.increase_key(out.find_min(), infinity);
  }
  return ans;
}

1
나는 (de|in)crease-key플러스 또는 마이너스 하나만 했다고 가정했습니다 .
Raphael

그리고 일정한 시간에는 키를 늘릴 수는 있지만 로그 (또는 그 이상)는 줄일 수있는 DS가 있습니까? (
최소한의

2
@ 곤잘로 솔레 라 :이 답변의 불가능한 증거는 키 감소에 관심이 없습니다. O (1) find-min, 증가 키 및 삽입은 이미 함께 문제입니다 (그리고 삽입에 대한 증거의 의존성은 실제로 필요하지 않습니다. O (n) heapify로 충분하거나 여러 힙에서 동일한 힙을 재사용 할 수 있습니다 heapify 또는 insert 비용에 관계없이 비교 정렬 범위를 위반 함을 증명하는 정렬).
user2357112는

알았어 미안하다 귀하의 의견에 감사드립니다!
Gonzalo Solera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.