Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 48 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
48
Dung lượng
289,5 KB
Nội dung
PHÂN TÍCH KHẤU HAO Phân tích khấu hao ° ° Gọi T(n) thời gian cần thiết để thực thi chuỗi n thao tác lên cấu trúc liệu – Ví dụ: thực thi chuỗi PUSH, POP, MULTIPOP lên stack Phân tích khấu hao (amortized analysis): – Thời gian thực thi chuỗi thao tác lấy trung bình số thao tác thực thi, T(n)/n , gọi phí tổn khấu hao (Đây định nghóa phí tổn khấu hao, định nghóa khác trình bày phần sau.) Ch 2: Amortized Analysis 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) – (the potential method) ° Sẽ minh họa phương pháp thông qua việc phân tích cấu trúc liệu: – stack – đếm nhị phân dài k bits – bảng động Ch 2: Amortized Analysis Cấu trúc liệu stack ° Các thao tác lên stack S – PUSH(S, x) – POP(S) – MULTIPOP(S, k) MULTIPOP(S, k) while not STACK-EMPTY(S) and k ≠ POP(S) k ← k −1 Ch 2: Amortized Analysis Cấu trúc liệu stack (tiếp) ° Minh họa thao tác MULTIPOP top → 23 33 45 78 MULTIPOP(S, 4) top → 78 Ch 2: Amortized Analysis MULTIPOP(S, 7) Bộ đếm nhị phân dài k bit ° Bộ đếm nhị phân dài k-bit (k-bit binary counter) – mảng A[0 k − 1] bit – có độ dài, length[A], k Ch 2: Amortized Analysis Bộ đếm nhị phân dài k bit (tiếp) ° Dùng đếm để trữ số nhị phân x: x = A[k − 1]⋅ 2k − + … + A[0]⋅ 20 – INCREMENT: coäng vào trị có đếm (modulo 2k) INCREMENT(A) 1 1 0 – Thuû tuïc INCREMENT INCREMENT(A) i ←0 while i < length[A] and A[i] = A[i] ← i ←i + if i < length[A] then A[i] ← Ch 2: Amortized Analysis Phân tích stack ° ° ° Bài toán: xác định thời gian chạy chuỗi n thao tác lên stack (ban đầu stack trống) Giải phân tích “thô sơ”: — Phí tổn trường hợp xấu M ULTIPOP O(n) Vậy phí tổn trường hợp xấu thao tác lên stack O(n) — Do phí tổn chuỗi n thao tác O(n2) Nhận xét: Chận O(n2) tìm thô Tìm chận tốt hơn! – Dùng phân tích khấu hao Ch 2: Amortized Analysis Phương pháp gộp chung ° Định nghóa: Trong phương pháp gộp chung (aggregate) phân tích khấu hao, gộp chung thời gian mà chuỗi n thao tác cần trường hợp xấu (worst case) thành T(n) – Chi phí khấu hao (amortized cost) thao tác định nghóa chi phí trung bình cho thao tác, tức T(n)/n Ch 2: Amortized Analysis Phương pháp gộp chung: phân tích stack ° ° Phân tích chuỗi n thao tác lên stack S (mà bắt đầu stack trống), chuỗi gồm 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 thao tác – Mỗi đối tượng popped tối đa lần sau pushed Số PUSH tối đa n, số lần POP gọi, kể từ M ULTIPOP, n – Vậy phí tổn chuỗi n thao tác PUSH, POP, MULTIPOP O(n) – Do phí tổn khấu hao thao tác O(n)/n = O(1) Ch 2: Amortized Analysis 10 Phân tích chuỗi TABLE-INSERT phương pháp gộp chung ° Dùng phương pháp gộp chung để xác định chi phí khấu hao INSERT – Chi phí ci thao tác thứ i i i − = 2j ° trường hợp lại – Chi phí n thao tác TABLE-INSERT ° n + tổng 2j từ j = đến lg n ≤ n + 2n = 3n Vậy chi phí khấu hao INSERT laø 3n / n = ° ° Ch 2: Amortized Analysis 34 Phân tích chuỗi TABLE-INSERT phương pháp kế toán ° Dùng phương pháp kế toán để xác định chi phí khấu hao TABLE-INSERT – Chi phí khấu hao TABLE-INSERT – Trả sau: ° đồng để trả cho chi phí thực cho riêng ° đồng để trả trước cho nó di chuyển lúc bảng nới rộng ° đồng để trả trước cho item khác bảng mà không tiền trả trước (vì di chuyển) Ch 2: Amortized Analysis 35 Phân tích chuỗi TABLE-INSERT phương pháp ° Dùng phương pháp để phân tích chuỗi gồm n thao tác INSERT lên bảng – Định nghóa Φ Φ(T) = 2num[T] − size[T] – Nhận xét ° Ngay sau nới rộng (dòng T ABLEINSERT thực thi xong) • num[T] = size[T] / ∀ Φ(T) = ° Ngay trước nới rộng num[T] = size[T] ∀ Φ(T) = num[T] ° Φ(0) = 0, Φ(T) ≥ Vì tổng chi phí khấu hao n thao tác TABLE-INSERT chận lên tổng chi phí thực Ch 2: Amortized Analysis 36 Phân tích chuỗi TABLE-INSERT phương pháp (tiếp) – Xác định chi phí khấu hao thao tác ° Giả sử thao tác thứ i không gây nới rộng Ta có sizei = sizei −1 Chi phí khấu hao thao tác c^i = ci + Φi − Φi−1 • = + (2numi − sizei ) − (2numi−1 − sizei−1) = + (2numi − sizei ) − (2(numi − 1) − sizei )) = Ch 2: Amortized Analysis 37 Phân tích chuỗi TABLE-INSERT phương pháp – Xác định chi phí khấu hao thao tác (tiếp) ° Giả sử thao tác thứ i gây nới rộng Ta có sizei / = sizei−1 = numi − Chi phí khấu hao thao tác c^i = ci + Φi − Φi−1 = numi + (2numi − sizei) − (2numi−1 − sizei−1) = numi +(2numi −(2numi −2)) −(2(numi −1)−(numi −1)) = numi + − (numi − 1) =3 Ch 2: Amortized Analysis 38 Xóa item khỏi bảng ° ° ° ° Thêm thao tác “Xóa item khỏi bảng”: TABLEDELETE – Hệ số sử dụng bảng trở nên nhỏ Nhắc lại định nghóa hệ số sử dụng α(T) = num[T] / size[T] Ta muốn – giử hệ số sử dụng cao, tức chận số – chi phí bù trừ thao tác lên bảng chận số Giả sử chi phí đo số lần chèn hay xoá item sơ đẳng Ch 2: Amortized Analysis 39 Chiến lược nới rộng thu nhỏ bảng ° ° Một chiến lược tự nhiên cho nới rộng thu nhỏ bảng – Gấp đôi bảng chèn item vào bảng đầy – Giảm nửa bảng xóa item khỏi bảng đầy nửa bảng Phân tích – Chiến lược bảo đảm α(T) ≥ 1/2 Ch 2: Amortized Analysis 40 Chiến lược nới rộng thu nhỏ bảng ° Phân tích (tiếp) – Tuy nhiên phí tổn khấu hao thao tác lớn: ° Lấy n có dạng 2m ° Xét chuỗi n thao tác (I insert D delete) I … I (n/2 lần), kế laø I D D I I D D I I … (n/2 lần) ° Chuỗi n thao tác có phí tổn Θ(n2), phí tổn khấu hao thao tác Θ(n) Ch 2: Amortized Analysis 41 Chiến lược nới rộng thu nhỏ bảng (tiếp) ° Cải tiến chiến lược cách cho phép hệ số sử dụng trở nên nhỏ 1/2: – Nếu α(T) = 1, thao tác TABLE-INSERT gấp đôi bảng – Nếu α(T) = 1/4, thao tác TABLE-DELETE giảm nửa bảng Ch 2: Amortized Analysis 42 Chiến lược thu nhỏ bảng (tiếp) thực thi TABLE-DELETE α(T) = 1/4 bảng = 1/2 bảng cũ Ch 2: Amortized Analysis 43 Phương pháp ° Dùng phương pháp để phân tích chuỗi gồm n thao tác TABLE-INSERT TABLE-DELETE lên bảng – Định nghóa Φ bảng Φ(T) = num[T] − size[T] α(T) ≥ 1/2 = size[T] / − num[T] neáu α(T) < 1/2 Ch 2: Amortized Analysis 44 Phương pháp (tiếp) – Nhận xét: ° Φ(bảng trống) = 0, Φ(T) ≥ ° Nếu hệ số sử dụng 1/2 Φ(T) = ° Nếu hệ số sử dụng Φ(T) = num[T] – Đủ để trả phí tổn có nới rộng bảng chèn item ° Hệ số sử dụng 1/4 Φ(T) = num[T] – Đủ để trả phí tổn có thu nhỏ bảng xoá item Ch 2: Amortized Analysis 45 Phân tích chuỗi TABLE-INSERT TABLE-DELETE ° Xác định chi phí khấu hao thao tác – Nếu thao tác thứ i TABLE-INSERT, ta phân biệt trường hợp: ° α i−1 ≥ 1/2 – theo Section 18.4.1, c^i nhiều ° αi−1 < 1/2, ta phân biệt trường hợp: – trường hợp αi < 1/2 c^i = ci + Φi − Φi−1 =0 – trường hợp αi ≥ 1/2 c^i = ci + Φi − Φi−1 =3 – Vậy chi phí khấu hao thao tác T ABLE-INSERT nhiều Ch 2: Amortized Analysis 46 Phân tích chuỗi TABLE-INSERT TABLE-DELETE ° Xác định chi phí khấu hao thao tác (tiếp) – Nếu thao tác thứ i TABLE-DELETE, numi = numi−1 − 1, ta phân biệt trường hợp: ° αi−1 < 1/2 Có hai trường hợp – không gây thu nhỏ: sizei = sizei−1 c^i = ci + Φi − Φi−1 =2 – gây thu nhỏ: ci = numi + 1, sizei / = sizei−1 / = numi + c^i = ci + Φi − Φi−1 =1 ° αi−1 ≥ 1/2 Bài tập 18.4-3 – Vậy chi phí khấu hao T ABLE-DELETE chận số Ch 2: Amortized Analysis 47 Phân tích chuỗi TABLE-INSERT TABLE-DELETE ° (tiếp) Kết luận: Vì chi phí khấu hao thao tác TABLE-INSERT TABLE-DELETE chận số, nên thời gian chạy cho chuổi gồm n thao tác lên bảng động laø O(n) Ch 2: Amortized Analysis 48 ... pháp năng: phân tích đếm nhị phân dài k bits ° ° Phân tích chuỗi thao tác lên đếm nhị phân dài k-bit Dùng phương pháp để xác định chi phí khấu hao thao tác – Định nghóa Φ đếm sau thao tác INCREMENT... tích đếm nhị phân ° ° Phân tích chuỗi thao tác INCREMENT lên đếm nhị phân dài k-bit mà trị ban đầu Dùng phương pháp kế toán để xác định chi phí khấu hao INCREMENT – Quy phí tổn khấu hao đồng để... (aggregate) phân tích khấu hao, gộp chung thời gian mà chuỗi n thao tác cần trường hợp xấu (worst case) thành T(n) – Chi phí khấu hao (amortized cost) thao tác định nghóa chi phí trung bình cho thao