1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Fibonacci heap (GIẢI THUẬT SLIDE) (chữ biến dạng do slide dùng font VNI times, tải về xem bình thường)

45 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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:

TỪ KHÓA LIÊN QUAN

Mục lục

    Cấu trúc của Fibonacci heap

    Cấu trúc của Fibonacci heap (tiếp)

    Cấu trúc của Fibonacci heap: ví dụ

    Hàm thế năng (tiếp)

    Các thao tác lên heap hợp nhất được

    Cây nhò thức không thứ tự

    Tạo một Fibonacci heap mới

    Chèn một nút vào Fibonacci heap

    Ví dụ chèn một nút vào Fibonacci heap

    Chèn một nút vào Fibonacci heap (tiếp)

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w