Bài giảng Phân tích thiết kế giải thuật: Chương 2 được biên soạn nhằm trang bị cho các bạn những kiến thức về phân tích khấu hao với những nội dung chính như phương pháp để xác định phí tổn khấu hao (phương pháp gộp chung; phương pháp kế toán; phương pháp thế năng).
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.) 20.2.2004 Ch 2: Amortized Analysis Sơ lược ° Ba phương pháp để xác định phí tổn khấu hao: – Phương pháp gộp chung (the aggregate method) – Phương pháp kế toán (the accounting method) – Phương pháp (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 có k bits – bảng động 20.2.2004 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 20.2.2004 Ch 2: Amortized Analysis Bộ đếm nhị phân có k bit ° Bộ đếm nhị phân có k-bit (k-bit binary counter) – mảng A[0 k - 1] bit – có độ dài, length[A], k ° Dùng đếm để trữ số nhị phân x: x = A[k - 1]⋅ 2k - + … + A[0]⋅ 20 – Để cộng vào trị có đếm (modulo 2k), ta dùng thủ tục sau INCREMENT(A) i ←0 while i < length[A] and A[i] = A[i] ← i ←i + if i < length[A] then A[i] ← 20.2.2004 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: Bằng 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 q thơ Tìm chận tốt hơn! – Dùng phương pháp khấu hao 20.2.2004 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 20.2.2004 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ừ MULTIPOP, 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) 20.2.2004 Ch 2: Amortized Analysis Phương pháp gộp chung: phân tích đếm nhị phân ° ° Phân tích chuỗi gồm n thao tác INCREMENT lên đếm nhị phân có chiều dài k bit Dùng phương pháp gộp chung để xác định chi phí khấu hao thao tác – Nhận xét (giả sử trị ban đầu đếm 0) bit A[0] flips n lần bit A[1] n/2 bit A[2] n/4 Tổng quát: bit A[i] flips n/2i lần, i = 0,…, lg n bit A[i] không flips i > lg n – Tính tổng n/2i từ i = đến lg n ≤ 2n 20.2.2004 Ch 2: Amortized Analysis Phương pháp gộp chung: phân tích đếm nhị phân ° ° Dùng phương pháp gộp chung để xác định chi phí khấu hao thao tác (tiếp) – Vậy thời gian xấu cho chuỗi n thao tác INCREMENT lên đếm (mà trị ban đầu 0) O(n) ⇒ Thời gian khấu hao cho thao tác O(n)/n = O(1) Nhận xét: Phân tích thơ sơ – Một thao tác INCREMENT cần đến thời gian xấu Θ(k) đếm chứa – Nếu phân tích “thơ sơ”, chuỗi n thao tác INCREMENT cần thời gian xấu nO(k) = O(nk) 20.2.2004 Ch 2: Amortized Analysis 10 Chiến lược mở rộng bảng ° Chiến lược nới rộng bảng diễn tả giải thuật sau TABLE-INSERT(T, x) if size[T] = then allocate table[T] with slot size[T] ← if num[T] = size[T] then allocate new-table with ⋅ size[T] slots insert all items in table[T] into new-table free table[T] table[T] ← new-table size[T] ← ⋅ size[T] 10 insert x into table[T] 11 num[T] ← num[T] + 20.2.2004 Ch 2: Amortized Analysis 27 Phân tích chuỗi TABLE-INSERT ° ° Giả sử: – Thời gian thực thi TABLE-INSERT tỉ lệ với thời gian chèn item (“chèn sơ đẳng”) vào bảng dòng 10 – Chi phí chèn sơ đẳng Sẽ phân tích chi phí chuỗi gồm n INSERT lên bảng động dùng – Phương pháp gộp chung – Phương pháp kế toán – Phương pháp 20.2.2004 Ch 2: Amortized Analysis 28 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 cịn 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 3n / n = ° ° 20.2.2004 Ch 2: Amortized Analysis 29 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 TABLEINSERT – 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 cịn tiền trả trước (vì di chuyển) 20.2.2004 Ch 2: Amortized Analysis 30 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 TABLE-INSERT 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 20.2.2004 Ch 2: Amortized Analysis 31 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ó size = size i i −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 )) =3 20.2.2004 Ch 2: Amortized Analysis 32 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 20.2.2004 Ch 2: Amortized Analysis 33 Xóa item khỏi bảng ° ° ° ° Thêm thao tác “Xóa item khỏi bảng”: TABLE-DELETE – 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 20.2.2004 Ch 2: Amortized Analysis 34 Một 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 20.2.2004 Ch 2: Amortized Analysis 35 Một 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ế 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) 20.2.2004 Ch 2: Amortized Analysis 36 Chiến lược nới rộng thu nhỏ bảng ° 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 20.2.2004 Ch 2: Amortized Analysis 37 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] α(T) < 1/2 – 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 xố item 20.2.2004 Ch 2: Amortized Analysis 38 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 TABLE-INSERT nhiều 20.2.2004 Ch 2: Amortized Analysis 39 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 TABLE-DELETE chận số 20.2.2004 Ch 2: Amortized Analysis 40 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 O(n) 20.2.2004 Ch 2: Amortized Analysis 41 ... cộng O(n) 20 .2. 2004 Ch 2: Amortized Analysis 14 Phương pháp kế tốn: phân tích đếm nhị phân ° ° Phân tích chuỗi thao tác INCREMENT lên đếm nhị phân có k-bit mà trị ban đầu Dùng phương pháp kế toán... trường hợp xấu n thao tác O(n) 20 .2. 2004 Ch 2: Amortized Analysis 22 Phương pháp năng: phân tích đếm nhị phân có k bits ° ° Phân tích chuỗi thao tác lên đếm nhị phân có k-bit Dùng phương pháp để xác... = ci + Φi − Φi−1 = + (2numi − sizei ) − (2numi−1 − sizei−1) = + (2numi − sizei ) − (2( numi − 1) − sizei )) =3 20 .2. 2004 Ch 2: Amortized Analysis 32 Phân tích chuỗi TABLE-INSERT phương pháp –