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

Bài giảng Phân tích thiết kế giải thuật: Chương 1 - Trịnh Huy Hoàng

72 1 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

Tiêu đề Các phương pháp phân tích thuật toán
Tác giả Trịnh Huy Hoàng
Trường học Đại học Sư phạm TP.HCM
Chuyên ngành Công nghệ thông tin
Thể loại Bài giảng
Thành phố TPHCM
Định dạng
Số trang 72
Dung lượng 554,5 KB

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

Nội dung

Trong lĩnh vực Công Nghệ Thông Tin nói riêng, yêu cầu quan trọng nhất của người học đó chính là thực hành. Có thực hành thì người học mới có thể tự mình lĩnh hội và hiểu biết sâu sắc với lý thuyết. Với ngành mạng máy tính, nhu cầu thực hành được đặt lên hàng đầu. Tuy nhiên, trong điều kiện còn thiếu thốn về trang bị như hiện nay, người học đặc biệt là sinh viên ít có điều kiện thực hành. Đặc biệt là với các thiết bị đắt tiền như Router, Switch chuyên dụng

Trang 2

Nội dung

 Một số kiến thức Toán cần thiết

 Thuật toán là gì?

 Vai trò của phân tích thuật toán

 Các phương pháp phân tích thuật toán

 Bộ khung cho quá trình phân tích thuật toán

– Mã giả

– RAM

– Thời gian thực hiện chương trình

– Độ phức tạp của chương trình

Trang 4

2)(n

1)(n

ni

n

0 i

1

x

0 i

i 

 if |x| < 1

1-x

i   

Dãy hình học if x  1

Trang 5

Thuật toán là gì?

 “Thuật toán là một thủ tục tính toán được định nghĩa rõ ràng để biến đổi các đầu vào thành các đầu ra nhằm đạt được quan hệ

Trang 6

Thuật toán là gì? (tt)

 “Nếu cho trước một bài toán, thì một cách

giải bài toán được phân định ra thành một số hữu hạn bước , có kết thúc cuối cùng và đạt được kết quả mong muốn gọi là thuật toán” (Vũ Đức Thi, 1999)

Trang 7

Vai trò của việc phân tích thuật toán

 Phân tích thuật toán = Xác định các đặc trưng liên quan đến hiệu năng (Dự đoán tài nguyên được yêu cầu.)

– Thời gian, bộ nhớ, đường truyền …

Thời gian thi hành (running time) là quan tâm chính bởi nó là tài nguyên quan trọng nhất và không thể phục hồi.

 Tại sao phải phân tích thuật toán?

Chọn cách hiệu quả nhất trong số các thuật toán có thể có cho

cùng một vấn đề.

Liệu một giải pháp tốt nhất có thời gian thi hành chấp nhận

được trong thực tế hay không?

Liệu một thuật toán đã được tối ưu hay chưa? – Liệu có một

thuật toán nào khác tốt hơn không?

Trang 8

Phân tích thực nghiệm

 Dựa trên thời gian thực thi của thuật toán đã được cài đặt trên các đầu vào cụ thể.

 Phụ thuộc vào môi trường phần cứng (vi xử

lý, xung nhịp đồng hồ, RAM, đĩa cứng,…) và phần mềm (hệ điều hành, ngôn ngữ lập

trình, biên dịch hoặc thông dịch,…)

Trang 9

– Rất khó để so sánh tính hiệu quả của hai thuật toán trừ khi chúng chạy trên cùng một môi trường phần cứng và phần mềm.

– Cần phải cài đặt và thi hành thuật toán

Trang 10

Ý tưởng

 Có một bộ khung phân tích thỏa

– Xem xét tất cả đầu vào có thể

– Cho phép đánh giá hiệu quả tương đối của hai thuật toán bất kỳ độc lập với môi trường phần cứng và phần mềm

– Có thể được tiến hành bằng cách nghiên cứu mô

tả cấp cao của thuật toán mà không cần phải thật

sự cài đặt và thi hành thuật toán đó

Trang 11

Mục tiêu

 Liên kết mỗi thuật toán với một hàm f(n) để đặc trưng thời gian thực thi của thuật toán đó với n là kích thước đầu vào.

 Cũng là mục tiêu của môn học

Trang 12

Các thành phần của bộ khung

 Một ngôn ngữ: để mô tả các thuật toán

 Một máy tính: để thi hành các mô tả thuật

toán bởi ngôn ngữ ở trên

 Một độ đo: để biểu đạt thời gian thực thi của bản mô tả thuật toán trên máy tính

Trang 13

Ngôn ngữ: ngôn ngữ mã giả

 Mô tả thuật toán ở cấp cao để người đọc có thể hiểu đồng thời rõ ràng cô đọng súc tích.

 Dựa trên các cấu thành chung của ngôn ngữ

C, C++, Java.

Trang 14

Algorithm Tên_Thuật_Toán(tham số 1, tham số 2,…)

 Cấu trúc điều kiện:

If điều_kiện then

Các hành động

Trang 16

Cấu thành của mã giả (tt)

 Truy xuất mảng:

– A[i]: phần tử thứ i của mảng A Bắt đầu từ 0

– Lưu ý phần tử đầu tiên của mảng có nghĩa là phần tử 1

Trang 18

Máy tính:

Mô hình máy tính truy xuất ngẫu nhiên

 Cấu tạo: CPU nối với một bộ nhớ Bộ nhớ bao gồm các ô nhớ Mỗi ô nhớ có thể lưu 1 số (không giới hạn kích thước), 1 kí tự hoặc 1 địa chỉ

Trang 19

Mô hình máy tính truy xuất ngẫu nhiên

 Các thao tác cơ sở có thời gian thi hành gần bằng nhau

 Các thao tác cơ sở có thời gian thi hành không phụ thuộc kích thước đầu vào của nó

 Thời gian thực thi của thuật toán = Số lượng các thao tác cơ sở của thuật toán đó trong mô hình máy tính truy xuất ngẫu nhiên (RAM)

 Được gọi là độ phức tạp của thuật toán

Trang 20

– Các đặc trưng khác của dữ liệu đầu vào

 Dãy gần như đã có thứ tự hay chưa?

Trang 21

Các cách xác định độ phức tạp thuật toán

 Độ phức tạp trong trường hợp xấu nhất

– Số thao tác cơ sở tối đa mà thuật toán thi hành trong tất cả các input có thể

– Dễ tìm thấy

 Độ phức tạp trong trường hợp trung bình

– Giá trị trung bình của thời gian thực thi cho tất cả các input có thể.

– Cần phải có hàm phân phối xác suất cho sự xuất hiện của input Điều này thường rất khó xác định

 Độ phức tạp trong trường hợp tốt nhất

– Số thao tác cơ sở ít nhất mà thuật toán thi hành cho bất kỳ một input nào

– Không có ích lắm (???)

Trang 22

Đếm số thao tác cơ sở

 Xét ví dụ thuật toán arrayMax

Trang 26

Ðơn vị đo thời gian thực hiện

 Ðơn vị của T(n) không phải là đơn vị đo thời gian bình thường như giờ, phút giây mà thường được xác định bởi số các lệnh được thực hiện trong một máy tính lý tưởng.

Ví dụ: Khi ta nói thời gian thực hiện của một

chương trình là T(n) = Cn thì có nghĩa là chương trình ấy cần Cn chỉ thị thực thi

Trang 27

Thời gian thực hiện

trong trường hợp xấu nhất

 Nói chung thì thời gian thực hiện chương

trình không chỉ phụ thuộc vào kích thước mà còn phụ thuộc vào tính chất của dữ liệu vào

 Vì vậy thường ta coi T(n) là thời gian thực

hiện chương trình trong trường hợp xấu nhất trên dữ liệu vào có kích thước n, tức là: T(n)

là thời gian lớn nhất để thực hiện chương trình đối với mọi dữ liệu vào có cùng kích thước n

Trang 29

Tỷ suất tăng (tt)

Ví dụ 1: Giả sử T(0) = 1, T(1) = 4 và tổng quát

T(n) = (n+1)2 Ðặt N0 = 1 và C = 4 thì với mọi n ≥1 chúng ta dễ dàng chứng minh được rằng T(n) = (n+1)2 ≤ 4n2 với mọi n ≥ 1, tức là tỷ suất tăng của T(n) là n2.

Ví dụ 2: Tỷ suất tăng của hàm T(n) = 3n3 + 2n2 là

n3 Thực vậy, cho N0 = 1 và C = 5 ta dễ dàng chứng minh rằng với mọi n ≥ 1 thì 3n3 + 2n2 ≤ 5n3

Trang 30

Khái niệm độ phức tạp

của giải thuật

 Giả sử ta có hai giải thuật P1 và P2 với thời gian thực hiện tương ứng là T1(n) = 100n 2 (với tỷ suất tăng là n 2 ) và T2(n) = 5n 3 (với tỷ suất tăng là n 3 )

 Khi n>20 thì T1 < T2 Sở dĩ như vậy là do tỷ suất tăng của T1 nhỏ hơn tỷ suất tăng của T2

 Như vậy một cách hợp lý là ta xét tỷ suất tăng của hàm thời gian thực hiện chương trình thay vì xét chính bản thân thời gian thực hiện.

 Cho một hàm T(n), T(n) gọi là có độ phức tạp f(n) nếu tồn tại các hằng C, N0 sao cho T(n) ≤ Cf(n) với mọi n ≥ N0 (tức là T(n) có tỷ suất tăng là f(n)) và kí hiệu T(n) là O(f(n)) (đọc là “ô của f(n)”).

Trang 31

Khái niệm độ phức tạp

của giải thuật (tt)

 Chú ý: O(C.f(n))=O(f(n)) với C là hằng số Ðặc biệt

O(C)=O(1)

 Các hàm thể hiện độ phức tạp có các dạng thường gặp

sau: log 2 n, n, nlog 2 n, n 2 , n 3 , 2 n , n!, n n.

 Ba hàm cuối cùng ta gọi là dạng hàm mũ, các hàm khác gọi

là hàm đa thức

 Một giải thuật mà thời gian thực hiện có độ phức tạp là một hàm đa thức thì chấp nhận được, còn các giải thuật có độ phức tạp hàm mũ thì phải tìm cách cải tiến giải thuật.

 Trong cách viết, ta thường dùng logn thay thế cho log2n cho gọn.

Trang 32

Một số mệnh đề

 d(n) = O(f(n))  ad(n) = O(f(n)), a>0

 d(n) = O(f(n)), e(n) = O(g(n))  d(n)+e(n) = O(f(n)

+g(n))

 d(n) = O(f(n)), e(n) = O(g(n))  d(n)e(n) = O(f(n)g(n))

 d(n) = O(f(n)), f(n) = O(g(n))  d(n) = O(g(n))

 f(n) là một đa thức bậc d  f(n) = O(nd)

 nx=O(an),x>0, a>1

 lognx = O(logn), x>0

Trang 33

– Chương trình không gọi chương trình con.

– Chương trình có gọi chương trình con không đệ quy.

– Chương trình đệ quy

 Trước hết ta có hai quy tắc quan trọng là quy tắc cộng và quy tắc nhân

Quy tắc cộng: Nếu T1(n) và T2(n) là thời gian thực hiện của hai đoạn

chương trình P1 và P2; và T1(n)=O(f(n)), T2(n)=O(g(n)) thì thời gian thực hiện

của đoạn hai chương trình đó nối tiếp nhau là T(n)=O(max(f(n),g(n))).

Quy tắc nhân: Nếu T1(n) và T2(n) là thời gian thực hiện của hai đoạn

chương trình P1và P2 và T1(n) = O(f(n)), T2(n) = O(g(n)) thì thời gian thực hiện

của đoạn hai đoạn chương trình đó lồng nhau là T(n) = O(f(n).g(n))

Trang 34

Qui tắc tổng quát để phân tích một

chương trình không có chương trình con

 Thời gian thực hiện của mỗi lệnh gán, READ, WRITE là O(1)

 Thời gian thực hiện của một chuỗi tuần tự các lệnh được xác định bằng qui tắc cộng Như vậy thời gian này là thời gian thi hành một lệnh nào đó lâu nhất trong chuỗi các lệnh.

 Thời gian thực hiện cấu trúc IF là thời gian lớn nhất thực hiện lệnh sau THEN hoặc sau ELSE và thời gian kiểm tra điều kiện Thường thời gian kiểm tra điều kiện là O(1).

 Thời gian thực hiện vòng lặp là tổng (trên tất cả các lần lặp) thời gian thực hiện thân vòng lặp Nếu thời gian thực hiện thân vòng lặp không đổi thì thời gian thực hiện vòng lặp là tích của số lần lặp với thời gian thực hiện thân vòng lặp.

Trang 36

Tính thời gian thực hiện của thủ tục sắp xếp “nổi bọt”

Trang 37

– Giải phương trình đệ quy, nghiệm của phương trình đệ quy

sẽ là thời gian thực hiện của chương trình đệ quy.

A

Trang 39

 Ðể thành lập được phương trình đệ quy, ta phải căn cứ vào

Trang 40

Thành lập

phương trình đệ quy (tt)

 Dạng tổng quát của một phương trình đệ quy sẽ là:

 C(n) là thời gian thực hiện chương trình ứng với trường hợp đệ quy dừng

C(n) T(n)

Trang 41

Giai_thua(n-đệ quy, chương trình phải nhân kết quả đó với n và return tích số

 Thời gian để thực hiện phép nhân và return là một hằng C2 Vậy ta

nêu

C 1)

T(n

-0

= n nêu

C T(n)

2 1

Trang 42

Giải phương trình đệ quy

 Có ba phương pháp giải phương trình đệ quy:

Phương pháp truy hồi.

Phương pháp đoán nghiệm.

Lời giải tổng quát của một lớp các phương trình đệ quy.

Trang 43

Phương pháp truy hồi

 Dùng đệ quy để thay thế bất kỳ T(m) với m < n vào phía phải của phương trình cho đến khi tất cả T(m) với m > 1 được thay thế bởi biểu thức của các T(1) hoặc T(0)

 Vì T(1) và T(0) luôn là hằng số nên chúng ta có công thức của T(n) chứa các số hạng chỉ liên quan đến n

và các hằng số

 Từ công thức đó ta suy ra nghiệm của phương trình

Trang 44

Ví dụ 1 về giải phương trình đệ quy bằng phương pháp truy hồi

T(n) = T(n-1) + C2T(n) = [T(n-2) + C2] + C2 = T(n-2) + 2C2T(n) = [T(n-3) + C2] + 2C2 = T(n-3) + 3C2 ……

nêu C 1)

T(n

-0

= n nêu

C T(n)

2 1

Trang 45

Ví dụ 2 về giải phương trình đệ quy bằng phương pháp truy hồi

1

n nêu

C T(n)

2 1

n C

+ 2

n 2T

n 4T

n

C 2

n C 4

n 2T 2

3 8

n 8T

n C

2 4

n C 8

n 2T 4

n T 2

Trang 46

– Bài toán đệ quy tổng quát.

– Thành lập phương trình đệ quy tổng quát.

– Giải phương trình đệ quy tổng quát.

– Các khái niệm về nghiệm thuần nhất, nghiệm riêng và hàm nhân.

– Nghiệm của phương trình đệ quy tổng quát khi d(n) là hàm nhân.

– Nghiệm của phương trình đệ quy tổng quát khi d(n) không phải là hàm nhân

Trang 47

Bài toán đệ quy tổng quát

 Ðể giải một bài toán kích thước n, ta chia bài toán đã cho thành a bài toán con, mỗi bài toán con có kích thước n/b Giải các bài toán con này và tổng hợp kết quả lại để được kết quả của bài toán đã cho

 Với các bài toán con chúng ta cũng sẽ áp dụng phương pháp đó

để tiếp tục chia nhỏ ra nữa cho đến các bài toán con kích thước 1

Kĩ thuật này sẽ dẫn chúng ta đến một giải thuật đệ quy.

 Giả thiết rằng mỗi bài toán con kích thước 1 lấy một đơn vị thời gian

 Giả thiết thời gian để chia bài toán kích thước n thành các bài toán con kích thước n/b và tổng hợp kết quả từ các bài toán con để

được lời giải của bài toán ban đầu là d(n)

Trang 48

Thành lập phương trình đệ quy tổng quát

 Nếu gọi T(n) là thời gian để giải bài toán kích thước n

 Thì T(n/b) là thời gian để giải bài toán con kích thước n/b

 Khi n = 1 theo giả thiết trên thì thời gian giải bài toán kích

thước 1 là 1 đơn vị, tức là T(1) = 1

 Khi n lớn hơn 1, ta phải giải đệ quy a bài toán con kích thước n/b, mỗi bài toán con tốn T(n/b) nên thời gian cho a lời giải đệ quy này là aT(n/b)

 Ngoài ra ta còn phải tốn thời gian để phân chia bài toán và tổng hợp các kết quả, thời gian này theo giả thiết trên là d(n) Vậy ta

1

n neu

1 T(n)

Trang 49

Giải phương trình đệ quy tổng quát

d(n) b

n aT

n ad b

n T a

d(n) b

n d b

n aT a

n ad b

n d b

n aT a

i

b

n d

a b

n T

n ad b

n d

a b

n T

Trang 50

b

nd

ab

nTa

bTb

nTb

j - k j

k a d b a

T(n)

Trang 51

j - k j

ak = nlog

ba

Nghiệm riêng

Nghiệm của phương trình là:

MAX(NTN,NR)

Trang 52

Hàm nhân

Một hàm f(n) được gọi là hàm nhân

(multiplicative function) nếu f(m.n) = f(m).f(n) với mọi số nguyên dương m và n.

Trang 53

1

d(b)

-a [d(b)]

d(b)

a [d(b)]

[d(b)]

a b

d a NR

k k

1 - k 0 j

j k

1 - k 0 j

j - k j

1 - k 0 j

j - k

a [d(b)]

-a NR

Trang 54

a

-NR  k k

Trang 55

Ba trường hợp (tt)

1

- d(b)

Công thức trên không xác đinh nên

ta phải tính trực tiếp nghiệm riêng:

d(b)) a

(do

k a

1

a d(b)

a [d(b)]

0 j

k

1 - k

0 j

balogbn > NTN

Do đó T(n) là O(nlog

b alogbn).

Trang 60

Ví dụ: GPT với T(1) = 1 và

 PT thuộc dạng phương trình tổng quát nhưng d(n) =

nlogn không phải là một hàm nhân

 NTN = nlog

ba = nlog2 = n

 Do d(n) = nlogn không phải là hàm nhân nên ta phải

tính nghiệm riêng bằng cách xét trực tiếp

nlogn 2

n 2T

Trang 61

1 - k

0 j

j - k

O(22

1)

k(k2

)j-(k2

0 j

 

Trang 62

2

nT

Trang 63

2

n 2T

ba)=O(nlog2)=O(n).

 Tính trực tiếp nghiệm riêng.

Trang 64

nVd: GTP voi T(1) 1 va T(n) 2T logn

)

j

j k j

k j

j k

j d b a

1 0

2 2

) (

j

j k

j

j k

j

j k j k j NR

) 1 2

1

2 (

) 2

n n

O k

O

) log

( )

( n O n n

T

Trang 65

Bài tập

 Xét thuật toán tìm phần tử có giá trị x trong một

mảng A cho trước

– Viết mã giả mô tả thuật toán trên

– Đếm số thao tác cơ sở trong thuật toán trên

– Xác định độ phức tạp thuật toán

 Xét thuật toán tìm phần tử có giá trị x trong một ma trận A có kích thước mxn cho trước

– Viết mã giả mô tả thuật toán trên

– Đếm số thao tác cơ sở trong thuật toán trên

– Xác định độ phức tạp thuật toán

Trang 66

Ví dụ minh họa

 Phát biểu bài toán:

– Cho trước một mảng X chứa n số cho trước, mảng trung bình tiền tố A của mảng X là một mảng có n phần tử được định nghĩa như sau:

– A[i] = avg(X[1] X[i])

– Hãy viết thuật toán xác định mảng trung bình tiền

tố A của mảng X cho trước

Trang 67

Thuật toán 1:

Algorithm prefixAverages1(X)

Input: Một mảng n phần tử số X

Output: một mảng n phần tử A thỏa A[i] là

trung bình cộng của các phần tử X[1],…X[i].

Trang 68

Phân tích thuật toán 1

Trang 71

Phân tích thuật toán 2

Trang 72

Bài tập

 Cài đặt hai thuật toán 1 và 2 bằng ngôn ngữ C/C++

 Khảo sát thời gian thực thi hai thuật toán lần lượt với các giá trị n khác nhau

 Thời gian thực thi của hai thuật toán với cùng một giá trị n (rất lớn, >10000) có khác nhau hay không? Nếu có giải thích vì sao có Nếu không giải thích vì sao không

 Vẽ đồ thị thể hiện thời gian thực thi của mỗi thuật

toán phụ thuộc vào n

Ngày đăng: 02/07/2023, 11:12

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