Tải bản đầy đủ (.ppt) (57 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.14 MB, 57 trang )

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.
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
2. Các ví dụ:
b. Gia số bộ đếm nhị phân:
bit A[0] lật n lần
bit A[1] lật n/2
bit A[2] lật n/4
……… …
Tổng quát:

-bit A[i] lật n/2
i
lần, i = 0,…, lg n
-bit A[i] không lật nếu i > lg n
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
2. Các ví dụ:
b. Gia số bộ đếm nhị phân:
-
Tổng của các lần lật trong dãy là:
 
nn
n
i
i
n
i
i
2
2
1
2
0
lg
0
=<
∑∑

==
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
2. Các 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 ít hơn chi phí thực
tế của chúng.
Khoản mà ta tính công cho 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à
PUSH 1,
POP 1,
MULTIPOP min(k, s) ,

PUSH 2,
POP 0,
MULTIPOP 0,
Lưu ý, 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 Analysis)
Mức hao
phí khấu
trừ của một
phép toán
Về sau khoản tín dụng có thể được dùng để 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
Chi phí
thực tế
Kho n tín ả
d ng ụ
Ký gửi
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 c
i
là chi phí thực tế của phép toán thứ i
là mức hao phí khấu trừ của phép toán thứ i
i
C
ˆ
Ta cần phải có
∑∑
==

n
i
i
n
i
i
cc
11
ˆ
cho tất cả dãy n phép toán
Tổng tín dụng được lưu trữ trong cấu trúc dữ liệu là sự khác nhau
giữa tổng mức hao phí khấu trừ và tổng chi phí thực tế, hay
∑∑
==

n
i
i
n

i
i
cc
11
ˆ
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
Tổng khoản tín dụng kết hợp với cấu trúc dữ liệu phải
luôn là không âm, bởi nó biểu thị cho 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ế của bit đó
1 đô la đặt trên bit đó làm khoản
tín dụng.
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
Chi phí bằng 0
Chi phí bằng 2
Số lượng 1 trong bộ đếm không bao giờ âm và như vậy
khoản tín dụng luôn không âm.

Do đó, với n phép toán INCREMENT, tổng mức hao phí
khấu trừ là O(n), định cận tổng chi phí thực tế.
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
X A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0]
Tổng chi phí
0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 1 (1) 0 4
1 0 0 0 0 0 0 0 1 (1) 2
3 0 0 0 0 0 0 1 (1) 1 (1) 6
4 0 0 0 0 0 1 (1) 0 0 8
5 0 0 0 0 0 1 (1) 0 1 (1) 10
6 0 0 0 0 0 1 (1) 1 (1) 0 12
7 0 0 0 0 0 1 (1) 1 (1) 1 (1) 14
8 0 0 0 0 1 (1) 0 0 0 16
9 0 0 0 0 1 (1) 0 0 1 (1) 18
10 0 0 0 0 1 (1) 0 1 (1) 0 20
11 0 0 0 0 1 (1) 0 1 (1) 1 (1) 22
12 0 0 0 0 1 (1) 1 (1) 0 0 24
13 0 0 0 0 1 (1) 1 (1) 0 1 (1) 26
14 0 0 0 0 1 (1) 1 (1) 1 (1) 0 28
15 0 0 0 0 1 (1) 1 (1) 1 (1) 1 (1) 30
16 0 0 0 1 (1) 0 0 0 0 32
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
i
c
i
D
0
D
1

D
2
D
n-1
D
n
1 2 n-1 n
c
1
c
2
c
n-1
c
n
+ D
i
:

cấu trúc dữ liệu kết quả sau khi thực
hiện phép toán thứ i
+ c
i
:

chi phí thực tế của phép toán thứ i
…D
n-2
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
Định nghĩa một hàm thế Φ:{D

i
} R
Độ lệch thế
Tổng chi phí khấu trừ là:
)()(
ˆ
1−
Φ−Φ+=
iiii
DDcc
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:

∑∑
=
=

=
Φ−Φ+=
Φ−Φ+=
n
i
ni
n
i
iii
n
i

i
DDc
DDcc
1
0
1
1
1
)()(
))()((
ˆ
PHÂN TÍCH KHẤU TRỪ (Amortized Analysis)
Nếu chọn hàm thế Φ sao cho: Φ(D
n
) ≥ Φ(D
0
)
Thì
Hay nói cách khác: tổng chi phí khấu trừ
là cận trên của tổng chi phí thực tế.
∑∑
==

n
i
i
n
i
i
cc

11
ˆ

∑∑
=
=

=
Φ−Φ+=
Φ−Φ+=
n
i
ni
n
i
iii
n
i
i
DDc
DDcc
1
0
1
1
1
)()(
))()((
ˆ

×