1. Trang chủ
  2. » Công Nghệ Thông Tin

chương 3 phân tích khấu hao

48 727 4

Đ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

Phaân Tích Khaáu Hao 12.9.2004 Ch. 2: Amortized Ana lysis 2 Phân tích khấu hao ° Gọi T(n) là thời gian cần thiết để thực thi một chuỗi n thao tác lên một cấu trúc dữ liệu. – Ví dụ: thực thi một chuỗi PUSH, POP, MULTIPOP lên một stack. ° Phân tích khấu hao (amortized analysis): – Thời gian thực thi một chuỗi các thao tác được lấy trung bình trên số các thao tác đã thực thi, T(n)/n , được gọi là phí tổn khấu hao. (Đây chỉ là một trong các đònh nghóa của phí tổn khấu hao, các đònh nghóa khác sẽ được trình bày trong các phần sau.) 12.9.2004 Ch. 2: Amortized Ana lysis 3 Sơ lược ° Ba phương pháp để xác đònh phí tổn khấu hao: – gộp chung (the aggregate method) – kế toán (the accounting method) – thế năng (the potential method) ° Sẽ minh họa các phương pháp trên thông qua việc phân tích các cấu trúc dữ liệu: – stack – bộ đếm nhò phân dài k bits – bảng động. 12.9.2004 Ch. 2: Amortized Ana lysis 4 Cấu trúc dữ liệu stack ° Các thao tác lên một stack S – PUSH(S, x) – POP(S) – MULTIPOP(S, k) MULTIPOP(S, k) 1 while not STACK-EMPTY(S) and k ≠ 0 2 do POP(S) 3 k ← k − 1 12.9.2004 Ch. 2: Amortized Ana lysis 5 Cấu trúc dữ liệu stack (tiếp) ° Minh họa thao tác MULTIPOP top → 23 33 4 45 4 78 top → 4 78 MULTIPOP(S, 4) MULTIPOP(S, 7) 12.9.2004 Ch. 2: Amortized Ana lysis 6 Bộ đếm nhò phân dài k bit ° Bộ đếm nhò phân dài k-bit (k-bit binary counter) – là một mảng A[0 k − 1] của các bit – có độ dài, length[A], là k. 12.9.2004 Ch. 2: Amortized Ana lysis 7 Bộ đếm nhò phân dài k bit (tiếp) ° Dùng bộ đếm để trữ một số nhò phân x: x = A[k − 1]⋅2 k − 1 + … + A[0]⋅2 0 – INCREMENT: cộng 1 vào trò đang có trong bộ đếm (modulo 2 k ) – Thủ tục INCREMENT INCREMENT(A) 1 i ← 0 2 while i < length[A] and A[i] = 1 3 do A[i] ← 0 4 i ← i + 1 5 if i < length[A] 6 then A[i] ← 1 0 1 1 1 1 0 0 0 INCREMENT(A) 12.9.2004 Ch. 2: Amortized Ana lysis 8 Phân tích một stack ° Bài toán: xác đònh thời gian chạy của một chuỗi n thao tác lên một stack (ban đầu stack là trống). Giải bằng phân tích “thô sơ”: — Phí tổn trong trường hợp xấu nhất của MULTIPOP là O(n). Vậy phí tổn trong trường hợp xấu nhất của một thao tác bất kỳ lên stack là O(n). — Do đó phí tổn của một chuỗi n thao tác là O(n 2 ). ° Nhận xét: Chận O(n 2 ) tìm được là quá thô. ° Tìm chận trên tốt hơn! – Dùng phân tích khấu hao. 12.9.2004 Ch. 2: Amortized Ana lysis 9 Phương pháp gộp chung ° Đònh nghóa: Trong phương pháp gộp chung (aggregate) của phân tích khấu hao, chúng ta gộp chung thời gian mà một chuỗi n thao tác cần trong trường hợp xấu nhất (worst case) thành T(n). – Chi phí khấu hao (amortized cost) của mỗi thao tác được đònh nghóa là chi phí trung bình cho mỗi thao tác, tức là T(n)/n. 12.9.2004 Ch. 2: Amortized Ana lysis 10 Phương pháp gộp chung: phân tích stack ° Phân tích một chuỗi n thao tác lên một stack S (mà khi bắt đầu thì stack là trống), chuỗi gồm các loại thao tác – PUSH(S, x) – POP(S) – MULTIPOP(S, k) ° Dùng phương pháp gộp chung để xác đònh chi phí khấu hao của mỗi thao tác – Mỗi đối tượng có thể được popped tối đa là một lần sau khi nó được pushed. Số PUSH tối đa là n, vậy số lần POP được gọi, kể cả từ MULTIPOP, là n. – Vậy phí tổn của chuỗi n thao tác PUSH, POP, và MULTIPOP là O(n). – Do đó phí tổn khấu hao của mỗi thao tác là O(n)/n = O(1). [...]... ⋅⋅⋅ 22.9.2004 k’ ⋅⋅⋅ k ⋅⋅⋅ z l’ Ch 4: B-Trees ⋅⋅⋅ 34 Xóa một khóa khỏi một B-cây (tiếp) x y 22.9.2004 ⋅⋅⋅ k’ k l’ ⋅⋅⋅ ⋅⋅⋅ Ch 4: B-Trees ⋅⋅⋅ z 35 Xóa một khóa khỏi một B-cây B-TREE-DELETE(x, k) 1 2 3 Nếu khóa k không có trong nút trong x thì xác đònh gốc ci[x] của cây con chứa k, nếu k có trong cây Nếu ci [x] chỉ có t − 1 khóa, thực thi bước 3a hay 3b nếu cần để đảm bảo rằng ta sẽ xuống đến một nút... tăng thêm 1 mỗi khi nút gốc được tách root[T ] ° ° ° s H root[T ] r r A D F H L N P T1 T2 T3 T4 T 5 T6 T7 T8 22.9.2004 A D F L T1 T2 T3 T4 Ch 4: B-Trees N P T5 T6 T 7 T8 23 Chèn một khóa vào một nút không đầy ° Thủ tục để chèn một khóa vào một nút không đầy B-TREE-INSERT-NONFULL(x, k) 1 i ← n[x] 2 if leaf [x] 3 then while i ≥ 1 and k < keyi [x] 4 do keyi+1[x] ← keyi [x] 5 i←i−1 6 keyi+1[x] ← k 7 n[x]... t − 1 t − 1 t − 1 độ sâu 3, số nút: 2t2 Ch 4: B-Trees t−1 t − 1 t − 1 11 Các thao tác lên một B-cây ° ° Các thao tác lên một B-cây: – B-TREE-SEARCH – B-TREE-CREATE – B-TREE-INSERT – B-TREE-DELETE Trong các thủ tục trên ta quy ước: – Gốc của B-cây luôn luôn nằm trong bộ nhớ chính – Bất kỳ một nút mà là một tham số được truyền đi trong một thủ tục thì đều đã thực thi thao tác DISK-READ lên nó 22.9.2004... TRUE 3 n[x] ← 0 4 DISK-WRITE(x) 5 root[T] ← x – B-TREE-CREATE cần O(1) thời gian CPU và O(1) disk operations 22.9.2004 Ch 4: B-Trees 16 Chèn một khóa vào một B-cây ° Khi một nút y là đầy (n[y] = 2t − 1), đònh nghóa khóa giữa (median key) của y là khóa keyt [y] ° Ta sẽ chèn khóa vào một lá của cây Để tránh trường hợp chèn khóa vào một lá đã đầy, ta cần một thao tác tách (split) một nút đầy y Thao tác... [x] Chèn một khóa vào một nút không đầy (tiếp) x ⋅⋅⋅ N 9 10 11 12 13 14 15 16 17 else while i ≥ 1 and k < keyi [x] do i ← i − 1 y = ci [x] i←i+1 P Q R DISK-READ(ci [x]) if n[ci [x]] = 2t − 1 then B-TREE-SPLIT-CHILD(x, i, ci [x]) if k > keyi [x] then i ← i + 1 B-TREE-INSERT-NONFULL(ci [x], k) 22.9.2004 Ch 4: B-Trees W ⋅⋅⋅ S 25 T Phân tích chèn một khóa vào trong một B-cây ° Thủ tục B-TREE-INSERT cần... ⋅⋅⋅ k ⋅⋅⋅ k’ Ch 4: B-Trees 32 Xóa một khóa khỏi một B-cây B-TREE-DELETE(x, k) 1 2 Nếu khóa k có trong nút x và x là một nút trong thì a b Tương tự, nếu nút con z ở sau k có ít nhất t khóa thì tìm khóa sau (successor) k’ của k trong cây con có gốc tại z Xóa k’ bằng cách gọi đệ quy B-TREE-DELETE(z , k’), thay k bằng k’ trong x x ⋅⋅⋅ k ⋅⋅⋅ z 22.9.2004 k’ ⋅⋅⋅ Ch 4: B-Trees 33 Xóa một khóa khỏi một B-cây... V T1 T2 T3 T4 T5 T6 T7 T8 22.9.2004 S P Q z = ci +1[x] R T1 T2 T3 T4 Ch 4: B-Trees T U V T5 T6 T7 T8 18 Tách một nút của một B-cây ° Thủ tục B-TREE-SPLIT-CHILD – Input: một nút trong không đầy x, một chỉ số i mà nút y = ci [x] là một nút đầy – Thủ tục tách y thành hai nút và chỉnh x để cho x có thêm một nút con [x] [x] 1 B-TREE-SPLIT-CHILD(x, i, y) ey i − key i x k 1 z ← ALLOCATE-NODE() 2 3 4 5 6 7... thì trả về một cặp (y, i) gồm một nút y và một chỉ số i mà keyi [y] = k ° nếu k không có trong cây thì trả về NIL 22.9.2004 Ch 4: B-Trees 13 Tìm trong một B-cây (tiếp) [x] [x] 1 y i − key i ke B-TREE-SEARCH(x, k) x ⋅⋅⋅ N 1 i←1 ci [x] 2 while i ≤ n[x] and k > keyi [x] 3 do i ← i + 1 4 if i ≤ n[x] and k = keyi [x] 5 then return (x, i) 6 if leaf [x] 7 then return NIL 8 else DISK-READ(ci [x]) 9 return B-TREE-SEARCH(ci... X N O Ch 4: B-Trees Q R S U V 30 Y Z Xóa một khóa khỏi một B-cây Thủ tục B-TREE-DELETE(x, k) để xóa khóa k khỏi cây con có gốc tại x bảo đảm rằng khi B-TREE-DELETE được gọi đệ quy lên x thì — số khóa trong x phải ≥ t (bậc tối thiểu của cây) Do đó đôi khi một khóa được di chuyển (từ một nút thích hợp khác) vào một nút trước khi đệ quy xuống nút đó 22.9.2004 Ch 4: B-Trees 31 Xóa một khóa khỏi một B-cây... keyj [z] ← keyj + t [y] if not leaf [y] then for j ← 1 to t do cj [z] ← cj + t [y] n[y] ← t − 1 22.9.2004 Ch 4: B-Trees ⋅⋅⋅ N W ⋅⋅⋅ y = ci [x] P Q R S 19 T U V Tách một nút của một B-cây (tiếp) 10 11 12 13 14 15 16 17 18 19 22.9.2004 for j ← n[x] + 1 downto i + 1 do cj +1 [x] ← cj [x] ci +1 [x] ← z for j ← n[x] downto i do keyj +1 [x] ← keyj [x] keyi [x] ← keyt [y] n[x] ← n[x] + 1 DISK-WRITE(y) DISK-WRITE(z) . stack. ° Phân tích khấu hao (amortized analysis): – Thời gian thực thi một chuỗi các thao tác được lấy trung bình trên số các thao tác đã thực thi, T(n)/n , được gọi là phí tổn khấu hao. (Đây. (aggregate) của phân tích khấu hao, chúng ta gộp chung thời gian mà một chuỗi n thao tác cần trong trường hợp xấu nhất (worst case) thành T(n). – Chi phí khấu hao (amortized cost) của mỗi thao tác. Phaân Tích Khaáu Hao 12.9.2004 Ch. 2: Amortized Ana lysis 2 Phân tích khấu hao ° Gọi T(n) là thời gian cần thiết để thực thi một chuỗi n thao tác lên một cấu trúc dữ liệu. – Ví

Ngày đăng: 19/10/2014, 00:40

Xem thêm: chương 3 phân tích khấu hao

TỪ KHÓA LIÊN QUAN

Mục lục

    Phân Tích Khấu Hao

    Phân tích khấu hao

    Cấu trúc dữ liệu stack

    Cấu trúc dữ liệu stack (tiếp)

    Bộ đếm nhò phân dài k bit

    Bộ đếm nhò phân dài k bit (tiếp)

    Phân tích một stack

    Phương pháp gộp chung

    Phương pháp gộp chung: phân tích stack

    Phương pháp gộp chung: phân tích bộ đếm nhò phân

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w