Fibonacci heap Fibonacci heap ÖÙng duïng cuûa Fibonacci heap Giaûi thuaät Prim ñeå xaùc ñònh moät caây khung nhoû nhaát trong moät ñoà thò coù troïng soá Giaûi thuaät Dijkstra ñeå tìm moät ñöôøng ñi n[.]
Fibonacci heap ª Ứng dụng Fibonacci heap – Giải thuật Prim để xác định khung nhỏ đồ thị có trọng số – Giải thuật Dijkstra để tìm đường ngắn đồ thị có hướng có trọng số dương 7.10.2004 Chương 6: Fibonacci Heaps Cấu trúc Fibonacci heap Định nghóa • Một Fibonacci heap tập mà heap-ordered – Cây Fibonacci heap không cần thiết phải nhị thức – Cây Fibonacci heap có gốc thứ tự (unordered) ª 7.10.2004 Chương 6: Fibonacci Heaps Cấu trúc Fibonacci heap (tiếp) ª Hiện thực Fibonacci heap nhớ: Mỗi nút x có trường – p[x]: trỏ đến nút cha – child[x]: trỏ đến ° Các x liên kết với danh sách vòng liên kết kép (circular, doubly linked list), gọi danh sách x ° Mỗi y danh sách x có trỏ – left[y], right[y] đến anh em bên trái bên phải y Nếu y x left[y] = right[y] = y 7.10.2004 Chương 6: Fibonacci Heaps Cấu trúc Fibonacci heap (tiếp) Các trường khác nút x – degree[x]: số chứa danh sách nút x – mark[x]: có trị bool TRUE hay FALSE, x có hay không kể từ lần cuối mà x làm thành nút khác 7.10.2004 Chương 6: Fibonacci Heaps Cấu trúc Fibonacci heap (tiếp) • Nếu H Fibonacci heap – Truy cập H trỏ min[H] đến nút gốc chứa khoá nhỏ gọi nút nhỏ H ° Nếu H trống min[H] = NIL – Tất nút gốc H liên kết với bỡi trỏ left right chúng thành sách liên kết kép vòng gọi danh sách gốc H – n[H]: số nút có H 7.10.2004 Chương 6: Fibonacci Heaps Cấu trúc Fibonacci heap: ví dụ danh sách gốc danh sách 7.10.2004 Chương 6: Fibonacci Heaps Hàm Dùng phương pháp để phân tích hiệu suất thao tác lên Fibonacci heap ª Cho Fibonacci heap H – gọi số Fibonacci heap H t(H) – gọi số nút x đánh dấu (mark[x] = TRUE) m(H) • Hàm H định nghóa nhö sau – (H) = t(H) m(H) – tập Fibonacci heap tổng Fibonacci heap thành phần ª 7.10.2004 Chương 6: Fibonacci Heaps Hàm (tiếp) ª Khi bắt đầu hàm có trị 0, sau hàm có trị Do chi phí khấu hao tổng cộng cận chi phí thực tổng cộng cho dảy thao tác 7.10.2004 Chương 6: Fibonacci Heaps Bậc tối đa ª ª Gọi D(n) cận cho bậc lớn nút Fibonacci heap có n nút Sẽ chứng minh: D(n) = O(lg n) 7.10.2004 Chương 6: Fibonacci Heaps Các thao tác lên heap hợp Nếu dùng thao tác lên heap hợp được: – MAKE-HEAP – INSERT – MINIMUM – EXTRACT-MIN – UNION • Fibonacci heap tập nhị thức “không thứ tự ” ª 7.10.2004 Chương 6: Fibonacci Heaps 10 ... Fibonacci Heaps 16 Hợp hai Fibonacci heap ª Thủ tục để hợp hai Fibonacci heap: FIB -HEAP- UNION – hợp Fibonacci heap H1 H2 – trả H, Fibonacci heap kết quaû IB -HEAP- UNION(H1, H2 ) H MAKE-FIB -HEAP( )... Fibonacci Heaps 11 Tạo Fibonacci heap Thủ tục để tạo Fibonacci heap trống: • MAKE-FIB -HEAP – cấp phát trả đối tượng Fibonacci heap H, với n[H] = 0, min[H] = NIL ª Phân tích thủ tục MAKE-FIB -HEAP. .. trúc Fibonacci heap Định nghóa • Một Fibonacci heap tập mà heap- ordered – Cây Fibonacci heap không cần thiết phải nhị thức – Cây Fibonacci heap có gốc thứ tự (unordered) ª 7.10.2004 Chương 6: Fibonacci