Tiểu luận Phân tích và thiết kế thuật toán PHÂN TÍCH KHẤU TRỪ

57 673 0
Tiểu luận Phân tích và thiết kế thuật toán PHÂN TÍCH KHẤU TRỪ

Đ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

PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) TIỂU LUẬN MÔN HỌC TIỂU LUẬN MÔN HỌC PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN PHÂN TÍCH KHẤU TRỪ PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) (Amortized Analysis) Giảng viên hướng dẫn: TS. Hồng Quang Học viên thực hiện: Võ Thanh Minh Nguyễn Quang Hồ Văn Lâm Phạm Vinh Trần Thị Quế Vy PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 1. Ý tưởng của phương pháp: -Trong phương pháp kết tập của phép phân tích khấu trừ ta tính thời gian tổng cộng của dãy n phép toán trong trường hợp xấu nhất là T(n). - Vậy trong trường hợp xấu nhất, mức hao phí trung bình hay mức hao phí khấu trừ của mỗi phép toán là T(n)/n. - Mức hao phí khấu trừ này áp dụng cho mỗi phép toán, thậm chí khi có vài kiểu phép toán trong dãy. PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2. Các ví dụ: 2.1. Các phép toán trong ngăn xếp (Stack): Ta xét dãy n phép toán trên Stack bao gồm: - PUSH(S,x) bỏ đối tượng x vào stack S. - POP(S) lấy một đối tượng ra từ đầu stack S và trả về đối tượng được kéo ra. - MULTIPOP(S,k) để lấy k đối tượng trên cùng ra khỏi stack S hoặc kéo nguyên tất cả các đối tượng trong Stack nếu nó chứa ít hơn k đối tượng . MULTIPOP(S, k) 1 while not STACK-EMPTY(S) and k ≠ 0 2 do POP(S) 3 k → k - 1 PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2. Các ví dụ: 2.2 Các phép toán trong ngăn xếp (Stack): MULTIPOP(S, k) 1 while not STACK-EMPTY(S) and k ≠ 0 2 do POP(S) 3 k → k - 1 Minh hoïa thao taùc MULTIPOP (empty stack) MULTIPOP(S, 7) top → 4 78 MULTIPOP(S, 4) top → 23 33 4 45 4 78 Stack S PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2. Các ví dụ: 2.1. Các phép toán trong ngăn xếp (Stack): Như vậy chi phí để thực hiện một trong ba phép toán trên (trong trường hợp xấu nhất) là O(n). Do đó tổng chi phí T(n) để thực hiện một dãy n phép toán trên trong trường hợp xấu nhất sẽ là O(n 2 ). Nhưng nếu sử dụng phương pháp Phân tích khấu trừ để đánh giá thì ta có tổng chi phí T(n) để thực hiện n phép toán đó chỉ là O(n) PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2. Các ví dụ: 2.2. Các phép toán trong ngăn xếp (Stack): Nếu ta xét chi tiết: -Mỗi đối tượng trong Stack có thể được lấy ra (POP) tối đa là một lần sau khi nó được bỏ vào (PUSH). Số lần PUSH tối đa là n, vậy số lần gọi POP kể cả từ MULTIPOP cũng chỉ là n. -Vậy với bất kì giá trị nào của n, một dãy n phép toán PUSH, POP và MULTIPOP bất kì đều chiếm một tổng O(n) thời gian. Do đó hao phí khấu trừ của mỗi thao tác là O(n)/n = O(1). PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2. Các ví dụ: 2.3. Gia số bộ đếm nhị phân: Để thực thi một bộ đếm nhị phân k bít, đếm lên từ 0, ta dùng một mảng A[0 k-1] làm bộ đếm. Một số nhị phân của x được lưu trữ trong bộ đếm có bit thấp nhất của nó lưu trong A[0] và bit cao nhất trong A[k-1], sao cho Ban đầu gi trị bộ đếm bằng 0 nên A[i]=0 với i=0,1,…k- 1. Để cộng thêm 1(theo hệ nhị phân) vào giá trị trong bộ đếm ta dùng thủ tục sau: ∑ − = = 1 0 2].[ k i i iAx PHN TCH KHU TR (Amortized Analysis) 88 0 1 1 1 1 0 0 0 INCREMENT(A) Vớ duù minh hoùa cho thuaọt toaựn: A[0] A[1] A[2]A[3] 2. Cỏc vớ d: b. Gia s b m nh phõn: Thut toỏn 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 PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2. Các ví dụ: b. Gia số bộ đếm nhị phân: Nhận xét: -Để thực hiện thủ tục INCREMENT trong trường hợp xấu nhất (cả mảng A chứa số 1)sẽ mất một lượng thời gian là O(k). Để đếm từ 0 lên đến n ta phải thực hiện thủ tục INCREMENT n lần, do đó tổng chi phí thời gian trong trường hợp xấu nhất sẽ là O(nk). -Nhưng nếu dùng phương pháp phân tích khấu trừ để đánh giá chặt chẽ hơn thì tổng chi phí cho bài toán trên chỉ là O(n). Vd: n =16, k = 8 INCREMENT(A) L1 INCREMENT(A) L2 INCREMENT(A) L16 PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2. Các ví dụ: b. Gia số bộ đếm nhị phân: Thuật toán 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 Nhận xét (giả sử trị ban đầu của bộ đếm nhị phân là 0): Thời gian thực hiện của các phép toán INCREMENT tỉ lệ với số lần mà các bit trong bộ đếm lật. [...]... ví dụ: b Gia số bộ đếm nhị phân: Vậy thời gian trường hợp xấu nhất cho một dãy n phép toán INCREMENT trên một bộ đếm mà giá trị ban đầu là 0 là O(n) Như vậy mức hao phí khấu trừ của mỗi phép toán là O(n)/n=O(1) PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Phương pháp kế toán của phân tích khấu trừ Ta gán các khoản tính công khác biệt cho các phép toán khác nhau, với vài phép toán được tính công nhiều hoặc... ý, mức hao phí khấu trừ của MULTIPOP là hằng (0), trong khi đó chi phí thực tế lại biến đổi Ở đây, cả ba mức hao phí khấu trừ là O(1) PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Như vậy, với bất kỳ dãy n phép toán PUSH, POP và MULTIPOP, tổng mức hao phí khấu trừ vẫn là một cận trên của tổng chi phí thực tế Do tổng mức hao phí khấu trừ là O(n), nên nó là tổng chi phí thực tế PHÂN TÍCH KHẤU TRỪ (Amortized... khoản mà tổng các mức hao phí khấu trừ gánh chịu vượt quá tổng các chi phí thực tế gánh chịu PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Phân tích phép toán INCREMENT trên một bộ đếm nhị phân bắt đầu tại 0 Dùng phương pháp kế toán để xác định mức hao phí khấu trừ của phép toán INCREMENT Ta hãy tính công cho mức hao phí khấu trừ 2 đô la để xác lập một bit là 1 1 đô la dùng để thanh toán cho xác lập thực tế... đó, tổng chi phí khấu trừ của n phép toán đối với hàm Φ là một cận trên của tổng chi phí thực tế PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Ví dụ 1: Các phép toán trên Stack Tính chi phí khấu trừ của các phép toán: Giả sử ngăn xếp đang chứa s đối tượng Xét phép toán PUSH: Hiệu thế: Φ(Di) - Φ(Di-1) = (s + 1) – s = 1 Chi phí khấu trừ: ĉi = ci + Φ(Di) - Φ(Di-1) = 1 + 1 = 2 PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)... một phép toán được gọi là mức hao phí khấu trừ của nó Khi mức hao phí khấu trừ của phép toán vượt quá chi phí thực tế của nó, thì giá trị chênh lệch được gán cho các đối tượng cụ thể trong cấu trúc dữ liệu dưới dạng khoản tín dụng PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Để minh họa phương pháp kế toán của phân tích khấu trừ, chúng ta hãy trở lại ví dụ ngăn xếp, chi phí thực tế của các phép toán là... giúp thanh toán cho những phép toán có mức hao phí khấu trừ nhỏ hơn chi phí thực tế của chúng Mức hao phí khấu trừ của một phép toán Chi phí thực tế Ký gửi Khoản tín dụng Dùng hết PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Nếu muốn phân tích bằng mức hao phí khấu trừ để chứng tỏ chi phí trung bình trong trường hợp xấu nhất của mỗi phép toán là nhỏ Ta biểu diễn ci là chi phí thực tế của phép toán thứ i... phí khấu trừ: ĉi = ci + Φ(Di) - Φ(Di-1) ≤ (ti + 1)+(1 – ti) = 2 PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Ví dụ 2: Gia số bộ đếm nhị phân: Chi phí khấu trừ INCREMENT là O(1) của phép toán Vậy, tổng chi phí khấu trừ của dãy n phép toán INCREMENT là O(n) Vì ta đã chỉ ra rằng: tổng chi phí khấu trừ của dãy n phép toán INCREMENT là cận trên của tổng chi phí thực tế Vậy mức chi phí xấu nhất của n phép toán. .. Analysis) Chi phí khấu trừ của mỗi trong 3 phép toán là O(1) Vậy, tổng chi phí khấu trừ của một dãy gồm n phép toán là O(n) Vì ta đã chứng tỏ rằng Φ(Di) ≥ Φ(D0) nên tổng chi phí khấu trừ của một dãy gồm n phép toán là một cận trên của tổng chi phí thực tế Do đó chi phí xấu nhất của n phép toán là O(n) PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Ví dụ 2: Gia số bộ đếm nhị phân: Xét phép toán INCREMENT Chọn... 1: Các phép toán trên Stack Xét phép toán POP: Hiệu thế: Φ(Di) - Φ(Di-1) = (s - 1) – s = -1 Chi phí khấu trừ: ĉi = ci + Φ(Di) - Φ(Di-1) = 1 - 1 = 0 PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Ví dụ 1: Các phép toán trên Stack Xét phép toán MULTIPOP(s,k): Đặt k’ = min(s,k) Hiệu thế: Φ(Di) - Φ(Di-1) = (s – k’) – s = -k’ Chi phí khấu trừ: ĉi = ci + Φ(Di) - Φ(Di-1) = k’ – k’ = 0 PHÂN TÍCH KHẤU TRỪ (Amortized... 1 (1) 30 16 0 0 0 1 (1) 0 0 0 0 32 PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) D0 D1 D2 i 1 ci c1 …Dn-2 Dn-1 Dn 2 n-1 n c2 cn-1 cn + Di: cấu trúc dữ liệu kết quả sau khi thực hiện phép toán thứ i + ci: chi phí thực tế của phép toán thứ i PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Định nghĩa một hàm thế Φ:{Di} R Lúc này, chi phí khấu trừ của phép toán thứ i, kí hiệu là ĉi và được tính như sau: ˆ ci = ci + Φ . PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) TIỂU LUẬN MÔN HỌC TIỂU LUẬN MÔN HỌC PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN PHÂN TÍCH KHẤU TRỪ PHÂN TÍCH KHẤU TRỪ (Amortized. bình hay mức hao phí khấu trừ của mỗi phép toán là T(n)/n. - Mức hao phí khấu trừ này áp dụng cho mỗi phép toán, thậm chí khi có vài kiểu phép toán trong dãy. PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) 2 O(n)/n=O(1). PHÂN TÍCH KHẤU TRỪ (Amortized Analysis) Phương pháp kế toán của phân tích khấu trừ Ta gán các khoản tính công khác biệt cho các phép toán khác nhau, với vài phép toán được tính

Ngày đăng: 11/04/2015, 22:07

Từ khóa liên quan

Mục lục

  • Slide 1

  • Slide 2

  • Slide 3

  • Slide 4

  • Slide 5

  • Slide 6

  • Slide 7

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

Tài liệu cùng người dùng

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

Tài liệu liên quan