Hàng ưu tiên với cả các thao tác phím giảm và phím tăng


11

Một Fibonnaci Heap hỗ trợ các hoạt động sau đây:

  • insert(key, data) : thêm một yếu tố mới vào cấu trúc dữ liệu
  • find-min() : trả về một con trỏ tới phần tử có khóa tối thiểu
  • delete-min() : xóa phần tử bằng khóa tối thiểu
  • delete(node) : xóa phần tử được trỏ bởi node
  • decrease-key(node) : giảm khóa của phần tử được trỏ bởi node

Tất cả các hoạt động không xóa là thời gian (khấu hao) và các hoạt động xóa là thời gian khấu hao .O ( log n )O(1)O(logn)

Có bất kỳ triển khai nào của hàng đợi ưu tiên cũng hỗ trợ increase-key(node)trong thời gian (khấu hao) không?O(1)


@Raphael nếu bạn tăng khóa của phần tử tối thiểu để bây giờ là khóa lớn nhất, thì rõ ràng (ít nhất là với tôi) rằng bạn không phải thực hiện tái cân bằng siêu liên tục.
Joe

Câu trả lời:


10

Giả sử bạn có một hàng đợi ưu tiên có , và . Sau đó, sau đây là một thuật toán sắp xếp mất thời gian :O ( n )O(1) find-minincrease-keyinsertO(n)

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
Tôi đã giả định rằng (de|in)crease-keychỉ làm cộng hoặc trừ một.
Raphael

Và có tồn tại DS cho phép hoạt động phím tăng trong thời gian không đổi nhưng giảm logarit (hoặc nhiều hơn) không? (Dành cho một đống nhỏ)
Gonzalo Solera

2
@GonzaloSolera: Bằng chứng không thể chấp nhận được trong câu trả lời này không quan tâm đến khóa giảm; O (1) find-min, tăng khóa và chèn đã là một vấn đề với nhau (và sự phụ thuộc của bằng chứng vào insert không thực sự cần thiết; h (h) heapify là đủ, hoặc chúng ta có thể sử dụng lại cùng một đống trên nhiều các loại để chứng minh rằng nó vi phạm giới hạn sắp xếp so sánh bất kể chi phí của heapify hoặc chèn).
user2357112 hỗ trợ Monica

Được rồi xin lỗi, tôi đã bỏ lỡ đọc nó. Cám ơn bạn đã góp ý!
Gonzalo Solera
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.