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


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.