1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

57 677 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 1,31 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

-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à Tn.. -Vậy trong trường hợp xấu nhất, mức hao phí trung

Trang 1

PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN

PHÂN TÍCH KHẤU TRỪ

(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

Trang 2

-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

Trang 3

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

Trang 4

M ULTIPOP(S, 4)

top  23

33 4 45 4 78

Stack S

Trang 5

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

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)

Trang 6

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).

Trang 7

Để 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ộ

2]

Trang 9

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).

I NCREMENT (A) L1

I NCREMENT (A) L2

I NCREMENT (A)

L16

Trang 10

Thuật toán INCREMENT

Trang 11

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/2i lần, i = 0,…, lg n -bit A[i] không lật nếu i > lg n

Trang 12

-Tổng của các lần lật trong dãy là:

n n

1

lg 0

Trang 13

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)

Trang 15

Để 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à

Trang 16

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ế

Trang 17

Chi phí thực tế

Kho n tín ản tín

d ng ụng

Ký gửi

Dùng hết

Trang 18

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

là mức hao phí khấu trừ của phép toán thứ i

i

n i

c

1 1

ˆ 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

ˆ

Trang 19

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

Trang 20

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

Trang 21

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ế

Trang 24

Độ lệch thế

Tổng chi phí khấu trừ là:

) (

) (

ˆici   Di   Di1

c

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

n i

i i

i

n i

i

D D

c

D D

c c

1

0

1

1 1

) (

) (

)) (

) (

( ˆ

Trang 25

Nếu chọn hàm thế sao cho: (D n ) ≥ (D 0 )

n i

i i

D D

c

1

0

1 1

) (

) (

Trang 26

Thực tế không phải khi nào ta cũng biết có bao nhiêu phép toán được thực hiện

Cần ràng buộc (DD i ) ≥ (DD 0 ), với mọi i

Thường chọn hàm  sao cho:

(DD 0 ) = 0 Rồi chỉ ra (DD i ) ≥ 0, với mọi ivới với mọi imọi với mọi ii

Trang 27

Xét các phép toán PUSH, POP, MULTIPOP

Chọn hàm  chính bằng số lượng các đối tượng trong Stack

- Xuất phát với ngăn xếp rỗng nên (D 0 ) = 0

- Rõ ràng (D i ) ≥ 0 = (D 0 ), với mọi i ≠ 0

Do đó, 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ế.

Trang 28

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ế:

(D i ) - (D i-1 ) = (s + 1) – s = 1

Chi phí khấu trừ:

ĉ i = c i + (D i ) - (D i-1 ) = 1 + 1 = 2

Trang 31

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 (D i ) ≥ (D 0 ) 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)

Trang 33

Giả sử phép toán INCREMENT thứ i chỉnh lại t i bit từ 1 thành 0 Chi phí thực tế của phép toán tối đa là t i + 1 Do đó, số lượng bit 1 trong

bộ đếm sau khi thực hiện phép toán thứ i là b i :

Trang 34

Chi phí khấu trừ của phép toán INCREMENT là O(1).

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 INCREMENT

là O(n)

Trang 35

tượng mà không biết trước bao nhiêu đối tượng sẽ được lưu trữ

Do đó

- Khi bảng hiện thời không có đủ chỗ cho các đối tượng mới, cần một bảng mới với kích thước lớn hơn.

- Khi bảng hiện thời dư nhiều chỗ trống do xoá nhiều đối

tượng, để tiết kiệm, dùng một bảng mới với kích thước nhỏ hơn

° Các phép toán lên một bảng

- TABLE-INSERT: Chèn một item vào bảng

- TABLE-DELETE: Xóa một item khỏi bảng.

Trang 36

một bảng T (không trống) là (T):

số lượng các mục lưu trữ trong bảng chia cho kích cỡ (số lượng các khe) của bảng

(T): với mọi i= num[T] / size[T]

• Bài toán: Xác định chiến lược nới rộng (expansion)

và thu nhỏ (contraction) bảng sao cho

- Hệ số sử dụng của bảng cao

Được chặn dưới bởi một hằng số

- Chi phí bảo trì bảng thấp: chi phí khấu trừ của TABLE-INSERT và TABLE-DELETE là O(1)

Trang 37

1 if size[T ] = 0

2 then allocate table[T] with 1 slot

3 size[T] ← 1

4 if num[T] = size[T]

5 then allocate new-table with 2 size[T] slots

6 insert all items in table[T] into new-table

Trang 39

- Thời gian thực thi của TABLE-INSERT tỉ lệ với thời gian chèn từng item (“chèn sơ đẳng”) vào bảng ở dòng 6 và 10.

- Chi phí của một chèn sơ đẳng là 1

Ta sẽ phân tích chi phí của một chuỗi gồm n phép toán INSERT lên một bảng động dùng lần lượt các

phương pháp

°Kết tập

°Kế toán

°Thế năng

Trang 40

- Mức hao phí của phép toán thứ i là

- Tổng mức hao phí của n phép toán TABLE-INSERT là

n

n c

n j

j n

i

i

3 2

2

) 1 lg(

0 1

Trang 41

Với mỗi thao tác ta trả như sau:

- 1 đồng để trả cho chi phí thực sự cho riêng nó

- 2 đồng để dành khi nới rộng bảng:

+1 đồng để trả trước cho chính nó một khi nó được

di chuyển lúc bảng nới rộng

+1 đồng để trả trước cho một item khác trong bảng

mà không còn tiền trả trước (vì đã di chuyển)

Do đó Chi phí khấu hao của TABLE-INSERT là 3đồng

Trang 42

+ Định nghĩa thế năng  là:

(T) = 2num[T] - size[T] (17.5)+ Nhận xét

- Ngay sau khi nới rộng bảng

Trang 43

Xác định chi phí khấu trừ của mỗi phép toán

° Giả sử phép toán thứ i không gây nới rộng Ta có:

sizei = sizei-1

° Chi phí khấu trừ của phép toán là

Trang 44

° Xác định chi phí khấu trừ của mỗi phép toán(tiếp)+ Giả sử phép toán thứ i gây nới rộng Ta có:

sizei / 2 = sizei-1 = numi -1

+ Chi phí khấu trừ của phép toán là

Trang 46

TABLE-° Một chiến lược tự nhiên cho nới rộng và thu nhỏ bảng là:

+ Gấp đôi bảng khi chèn một item vào một bảng

Trang 47

° Lấy n cĩ dạng 2 m

° Xét một chuỗi n phép tốn, I là một insert và D là một delete

bảng đầy gây gấp đôi bảng

gây giảm nửa bảng

… n/2 lần

Chuỗi n phép tốn này cĩ phí tổn là (n2), do đĩ phí tổn khấu hao của mỗi phép tốn là (n)

Trang 48

Cải tiến chiến lược trên bằng cách cho phép hệ số

Trang 49

bảng mới = 1/2 bảng cũ

(T) = 1/4

thực thi T ABLE -D ELETE

Trang 50

Định nghĩa thế năng  trên một bảng là

Hiệu ứng của một dãy n phép toán

TABLE-INSERT và TABLE-DELETE trên số numi của các mục trong bảng, số sizei của các khe trong bảng và thế:

(T) = 2 num[T] - size[T] nếu (T) 

1/2

(T) = size[T] / 2 - num[T] nếu (T)  1/2

Trang 52

Xác định chi phí khấu trừ của mỗi phép toán

+ Nếu phép toán thứ i là TABLE-INSERT, ta phân biệt các trường hợp:

 i1  ½

° Tương tự đoạn (17.4), nhiều lắm là 3

n n

n

n c

n

j

j n

i

i

32

2

) 1 lg(

0 1

Trang 53

+Trường hợp i  ½ mức hao phí khấu trừ

Trang 54

Vậy chi phí khấu trừ của phép toán TABLE-INSERT nhiều lắm là 3.

Trang 55

 i1  1/2 Có hai trường hợp con:

- Không gây thu nhỏ: sizei = sizei-1 và mức hao phí khấu trừ là:

Trang 56

°Vậy chi phí khấu trừ của TABLE-DELETE được chặn trên bởi một hằng số.

size i / 2 = size i-1 / 4 = num i + 1

và mức hao phí khấu trừ

Trang 57

Vì chi phí khấu trừ của mỗi phép toán TABLE-INSERT và TABLE-DELETE được chặn trên bởi một hằng số, nên thời gian chạy cho một chuỗi bất kỳ gồm n phép toán lên một bảng động

là O(n)

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

HÌNH ẢNH LIÊN QUAN

Bảng đầy gây gấp đôi bảng - Tiểu luận Phân tích và thiết kế thuật toán PHÂN TÍCH KHẤU TRỪ
ng đầy gây gấp đôi bảng (Trang 47)
Bảng mới = 1/2 bảng cũ - Tiểu luận Phân tích và thiết kế thuật toán PHÂN TÍCH KHẤU TRỪ
Bảng m ới = 1/2 bảng cũ (Trang 49)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w