THÔNG TIN TÀI LIỆU
Fibonacci heap 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 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) ª 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 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 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 Chương 6: Fibonacci Heaps Cấu trúc Fibonacci heap: ví dụ danh sách gốc danh sách 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 sau – Φ(H) = t(H) + m(H) – tập Fibonacci heap tổng Fibonacci heap thành phần ª 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 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) Chương 6: Fibonacci Heaps 10 Giảm khóa nút (tiếp) ª Thủ tục phụ để cắt liên kết x y, cha nó, sau làm x thành gốc CUT(H, x, y) đem x khỏi danh sách y, giảm degr thêm x vào danh sách gốc H p[x] ← NIL mark[x] ← FALSE Chương 6: Fibonacci Heaps 31 Giảm khóa nút (tiếp) ª Thủ tục phụ để xử lý cha nút bị cắt dựa trường mark[x] CASCADING-CUT(H, y) z ← p[y] if z ≠ NIL then if mark[y] = FALSE then mark[y] ← TRUE else CUT(H, y, z) CASCADING-CUT(H, z) Chương 6: Fibonacci Heaps 32 Giảm khoá nút: ví dụ (a) Heap ban đầu (b) Giảm khóa 46 thành (c)-(e) Giảm khóa 35 thành Chương 6: Fibonacci Heaps 33 Chi phí thực FIB-HEAP-DECREASE-KEY ª Gọi H Fibonacci heap trước gọi FIBHEAP-DECREASE-KEY, số nút H n – Chi phí thực FIB-HEAP-DECREASE-KEY bao gồm: ° O(1): dòng 1-5 8-9, ° thời gian thực thi cascading cuts Giả sử CASCADING-CUT gọi đệ quy c lần Thời gian thực thi CASCADING-CUT O(1) không kể gọi đệ quy c lần Chương 6: Fibonacci Heaps 34 Chi phí thực FIB-HEAP-DECREASE-KEY • (tiếp) – Vậy phí tổn thực FIB-HEAP-DECREASE-KEY O(c) Chương 6: Fibonacci Heaps 35 Chi phí khấu hao FIB-HEAP-DECREASE-KEY ª Gọi H’ Fibonacci heap sau gọi FIB-HEAPDECREASE-KEY lên H – Nhắc lại: hàm H định nghóa ∀ Φ(H) = t(H) + m(H) – chi phí khấu hao = chi phí thực + Φ(H’) − Φ(H) ° Đã tính: chi phí thực F IB-HEAP-DECREASEKEY O(c) ° Sau gọi FIB-HEAP-DECREASE-KEY lên H, H’ có t(H) + c ∀ Φ(H’) − Φ(H) ≤ (t(H) + c) + 2(m(H) − c + 2) − (t(H) + số lần gọi CUT số lần gọi CASCADING-CUT = c, mà m(H)) – lần thực thi CUT nút trở thành • −thi c CASCADING-CUT ngoại trừ lần cuối củ – lần ≤ thực quy nút unmarked lần cuối gọi đe CASCADING-CUT marks nút Chương 6: Fibonacci Heaps 36 Chi phí khấu hao FIB-HEAP-DECREASE-KEY • (tiếp) – Do chi phí khấu hao FIB-HEAP- DECREASE-KEY • O(c) + − c = O(1), đến từ • scale up đơn vị để khống chế số ẩn O(c) Chương 6: Fibonacci Heaps 37 Xóa nút ª Thủ tục để xóa nút: FIB-HEAP-DELETE – Xóa nút x khỏi Fibonacci heap H FIB-HEAP-DELETE(H, x) FIB-HEAP-DECREASE-KEY(H, x, −∞) FIB-HEAP -EXTRACT-MIN(H) Chương 6: Fibonacci Heaps 38 Chận lên bậc lớn x y1 y2 yk • Lemma (sách: Lemma 21.1) Cho x nút Fibonacci heap, giả sử degree[x] = k Gọi y1, y2, , yk x xếp theo thứ tự lúc chúng liên kết vào x, từ lúc sớm đến lúc trễ Thì degree[y1] ≥ degree[yi ] ≥ i − với i = 2, 3, , k Chương 6: Fibonacci Heaps 39 Chận lên bậc lớn (tiếp) Chứng minh – Rõ ràng degree[y1] ≥ i ≥ 2: – Khi yi liên kết vào x y1, y2 , , yi − tập x nên degree[x] ≥ i − ° Nút y liên kết vào x i degree[x] = degree[yi ], degree[yi ] ≥ i − – Kể từ đến nay, nút yi nhiều con, hai bị cắt khỏi x Vaäy degree[yi ] ≥ (i − 1) − ≥ i −2 Chương 6: Fibonacci Heaps 40 Chận lên bậc lớn (tiếp) • Định nghóa • Với k = 0, 1, 2, định nghóa Fk số Fibonacci thứù k: Fk = k = 0, neáu k = 1, Fk −1 + Fk −2 k ≥ • Lemma (sách: Lemma 21.2, tập) Với số nguyên k ≥ 0, k Fk + = + ∑ Fi i =0 Lemma (Bài tập 2.2-8) Với số nguyên k ≥ 0, ta coù Fk + ≥ φ ñoù φ = ( + √ 5) / , tỉ số vàng Chương 6: Fibonacci Heaps k , 41 Chận lên bậc lớn (tiếp) • Lemma (sách: Lemma 21.3) Cho x nút Fibonacci heap, cho k = degree[x] Thì size(x) ≥ Fk + ≥ φ k , φ = ( + √ 5) / Chứng minh – Gọi sk trị nhỏ size(z) nút z mà degree[z] = k – Rõ ràng s0 = 1, s1 = 2, s2 = – Ta coù sk ≤ size(x) Chương 6: Fibonacci Heaps 42 Chận lên bậc lớn Chứng minh (tiếp) x∗ size(x) ≥ sk = size(x*) k y1 y2 = + ∑ sdegree[ yi ] yk i=2 – sk tăng đơn điệu theo k, nên từ degree[yi ] ≥ sdegree si −coù [ y i ] ≥ta i − (Lemma 21.1) Vaäy k sk ≥ + ∑ si − i =2 Chương 6: Fibonacci Heaps 43 Chận lên bậc lớn Chứng minh (tiếp) – dùng quy nạp theo k để chứng minh sk ≥ Fk + , với k ≥ 0: ° Bước bản: với k = k = rõ ràng ° Bước quy nạp: – Giả thiết quy nạp: k ≥ si ≥ Fi + với i = 0, 1,…, k − k1 Từ ta có sk ≥ + ∑ si − i =2 k ≥ + ∑ Fi i =2 k = + ∑ Fi i =0 = Fk + (Lemma21.2) – vaäy: size(x) ≥ sk ≥ Fk + ≥ φ k Chương 6: Fibonacci Heaps 44 Chận lên bậc lớn (tiếp) • Hệ luận Bậc lớn D(n) nút Fibonacci heap có n nút O(lg n) Chứng minh Dùng Lemma 21.3 Chương 6: Fibonacci Heaps 45 ... 6: Fibonacci Heaps 17 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 FIB -HEAP- UNION(H1, H2) H ← MAKE-FIB -HEAP( )... 6: Fibonacci Heaps Cấu trúc Fibonacci heap: ví dụ danh sách gốc danh sách 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. .. Fibonacci Heaps 12 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
Ngày đăng: 29/03/2021, 08:23
Xem thêm: