1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng cấu trúc dữ liệu thuật toán chương 1 nguyễn đức nghĩa

50 228 1

Đ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 50
Dung lượng 6,96 MB

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

Nội dung

Ta hiểu thuật toán giải bài toán đặt ra là một thủ tục xác định bao gồm một dãy hữu hạn các bước cần thực hiện để thu được đầu ra cho một đầu vào cho trước của bài toán.. – Đầu ra Output

Trang 2

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 3

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

k=i a kđ c g i là tr ng l ng c a dãy con này

Bài toán đ t ra là: Hãy tìm tr ng l ng l n nh t c a các dãy con, t c

Trang 4

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán tr c ti p

• Thu t toán này có th cài đ t trong đo n ch ng trình sau:

int maxSum = 0;

for (int i=0; i<n; i++) {

for (int j=i; j<n; j++) { int sum = 0;

for (int k=i; k<=j; k++) sum += a[k];

if sum > maxSum maxSum = sum;

} }

Thu t toán tr c ti p

mà thu t toán ph i th c hi n, t c là đ m xem dòng l nh

Trang 5

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán nhanh h n

int maxSum = a[0];

for (int i=0; i<n; i++) {

int sum = 0;

for (int j=i; j<n; j++) { sum += a[j];

if sum > maxSum maxSum = sum;

} }

Trang 6

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán nhanh h n

• Phân tích thu t toán Ta l i tính s l n th c hi n phép c ng

0

( ) ( 1) 1

2 2

n i

Thu t toán đ qui

• Ta còn có th xây d ng thu t toán t t h n n a! Ta s s

d ng k thu t chia đ tr K thu t này bao g m các

– Chia bài toán c n gi i ra thành các bài toán con cùng d ng

– Gi i m i bài toán con m t cách đ qui

– T h p l i gi i c a các bài toán con đ thu đ c l i gi i c a bài toán

xu t phát.

l n nh t c a các dãy con: Ta chia dãy đã cho ra thành 2

(g i t t là dãy bên trái và dãy bên ph i) v i đ dài gi m

đi m t n a

Trang 7

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán đ qui

• t h p l i gi i, nh n th y r ng ch có th x y ra m ttrong 3 tr ng h p:

– Dãy con l n nh t n m dãy con bên trái (n a trái)

– Dãy con l n nh t n m dãy con bên ph i (n a ph i)

– Dãy con l n nh t b t đ u n a trái và k t thúc n a ph i (gi a).

• Do đó, n u ký hi u tr ng l ng c a dãy con l n nh t

n a trái là wL, n a ph i là wR và gi a là wM thì

max(wL, wR, wM).

Thu t toán đ qui

• Vi c tìm tr ng l ng c a dãy con l n nh t n a trái(wL) và n a ph i (wR) có th th c hi n m t cách đ qui

Trang 8

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán đ qui

• m – đi m chia c a dãy trái, m+1 là đi m chia c a dãy ph i

Thu t toán đ qui

a[i] đ n a[j]) k t thúc a[j] ta dùng thu t toán sau:

Trang 9

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán đ qui

}

Thu t toán đ qui

S đ c a thu t toán đ qui có th mô t nh sau:

Trang 10

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán đ qui

• Phân tích thu t toán:

Ta c n tính xem l nh g i MaxSub(a,1,n) đ th c hi n thu ttoánđòi h i bao nhiêu phép c ng?

• Tru c h t nh n th y MaxLeft và MaxRight đòi h i

n/2 + n/2 = n phép c ng

• Vì v y, n u g i T(n) là s phép c ng c n tìm, ta có công th c

đ qui sau:

0 1 ( )

Trang 11

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

So sánh các thu t toán

• Cùng m t bài toán ta đã đ xu t 3 thu t toán đòi h i s

l ng phép toán khác nhau và vì th s đòi h i th i giantính khác nhau

• Các b ng trình bày d i đây cho th y th i gian tính v i

gi thi t máy tính có th th c hi n 108 phép c ng trong 1giây

Th i gian tính

Trang 12

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Th i gian tính

B ng qui đ i th i gian

• B ng sau đây dùng đ tính th i gian th c hi n

Trang 13

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

V i n nh th i gian tính là không đáng k

V n đ tr nên nghiêm tr ng h n khi n > 106 Lúc

đó ch có thu t toán th ba là có th áp d ng đ c trong th i gian th c.

• Còn có th làm t t h n n a không?

• Có th đ xu t thu t toán ch đòi h i n phép c ng!

Thu t toán Quy ho ch đ ng

Vi c phát tri n thu t toán d a trên DP bao g m 3 giai đo n:

1 Phân rã: Chia bài toán c n gi i thành nh ng bài toán con nh

h n có cùng d ng v i bài toán ban đ u

2 Ghi nh n l i gi i: L u tr l i gi i c a các bài toán con vào

m t b ng

3 T ng h p l i gi i: L n l t t l i gi i c a các bài toán conkích th c nh h n tìm cách xây d ng l i gi i c a bài toánkích th c l n h n, cho đ n khi thu đ c l i gi i c a bài toán

xu t phát (là bài toán con có kích th c l n nh t)

Trang 14

C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT

– Giả sử i > 1 và s k là đã biết với k = 1, 2, , i-1 Ta cần tính s i

tr ng l ng c a dãy con lớn nhất của dãy

a1, a2, , ai-1, ai .

Thu t toỏn QH

• Do dóy con l n nh t c a dóy này ho c là cú ch a ph n t a i ho c là khụng

ch a ph n t a i , nờn nú ch cú th là m t trong hai dóy:

Dóy con l n nh t c a dóy a1, a2, , a i-1

– Dóy con l n nh t c a dóy a1, a2, , a i k t thỳc t i a i .

Trang 15

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Thu t toán QH

MaxSub(a);

{

smax = a[1]; (* smax – tr ng l ng cña d·y con lín nhÊt *)

maxendhere = a[1]; (* maxendhere – tr ng l ng c a dãy con l n nh t k t thúc t i a[i] *) imax = 1; (* imax - vÞ trÝ kÕt thóc cña d·y con lín nhÊt *)

Phân tích thu t toán:

D th y s phép toán c ng ph i th c hi n trong thu t toán (s l n th c

Trang 16

C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT

Khỏi ni m bài toỏn tớnh toỏn

• Định nghĩa Bài toán tính toán F là ánh xạ từ tập các xâu nhị phân độ dài

hữu hạn vào tập các xâu nhị phân độ dài hữu hạn:

– Đa thức một biến P(x) = a0+ a1x + + a n x n hoàn toàn xác định bởi

dãy số n, a0, a1, , a n , mà để biểu diễn dãy số này chúng ta có thể sử dụng xâu nhị phân

• Định nghĩa Ta hiểu thuật toán giải bài toán đặt ra là một thủ tục xác định

bao gồm một dãy hữu hạn các bước cần thực hiện để thu được đầu ra cho một đầu vào cho trước của bài toán.

• Thuật toán có các đặc trưng sau đây:

– Đầu vào (Input): Thuật toán nhận dữ liệu vào từ một tập nào đó.

– Đầu ra (Output): Với mỗi tập các dữ liệu đầu vào, thuật toán đưa ra các dữ liệu tương ứng với lời giải của bài toán.

(có thể rất lớn) bước với mọi đầu vào.

toán được xác định một cách đơn trị và chỉ phụ thuộc vào đầu vào và các kết quả của các bước trước.

– Tổng quát (Generality): Thuật toán có thể áp dụng để giải mọi bài toán có dạng

đã cho.

Trang 17

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

• L i gi i bài toán bao g m:

– Thu t toán (Algorithms)

k t qu đ u ra (output) c a bài toán trong th i gian h u h n.

Trang 18

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

The Life Cycle of Software

Vòng đ i đ i c a c a ph n ph n m m m m nh nh là là m t m t bánh bánh lái lái có có th th quay quay tt m t m t pha pha đ n đ n m t m t pha pha khác b t b t kk

• Phase 1: Ch rõ đ c đi m k thu t (Specification) (đ c t )

• Phase 2: Thi t k (Design)

• Phase 3: Phân tích r i ro (Risk Analysis)

• Phase 4: Ki m th (Verification)

• Phase 5: L p trình (Coding)

• Phase 6: Test th (Testing)

• Phase 7: Tinh ch l i gi i (Refining the Solution)

• Phase 8: S n xu t (Production)

• Phase 9: B o trì (Maintenance)

1-36Nguy n c Ngh a - B

môn KHMT HBKHN

Trang 19

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

The Life Cycle of Software

• Phase 1: c t (Specification)

– Các khía c nh c a bài toán c n ch rõ:

D li u đ u vào là gì (What is the input data?)

D li u nào là đúng đ n, là không đúng đ n?

• Ai là ng i s d ng ph n m m và giao di n ng i dùng c n đ c thi t k nh th nào?

C n phát hi n nh ng l i gì và c n thông báo nh th nào v chúng?

The Life Cycle of Software

Trang 20

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

The Life Cycle of Software

• Phase 3: Phân tích r i ro (Risk Analysis)

• Phase 4: Ki m th (Verification)

Ch ng minh tính đúng đ n c a thu t toán b ng các ph ng pháp hình th c, …

• Phase 5 : Cài đ t (Coding)

– Liên quan đ n vi c chuy n thi t k sang m t ngôn ng l p trình c th – Lo i tr các l i ng pháp

• Phase 6: Test th (Testing)

– Liên quan đ n vi c lo i b các l i logic

The Life Cycle of Software

• Phase 7: Tinh ch l i gi i (Refining the Solution)

– Do ch ng trình đ c phát tri n v i nh ng gi thi t nh t đ nh nên c n tìm cách gi m nh các gi thi t đ c b sung đ i v i đ u vào, đ u ra – B sung thêm các ch c n ng

Trang 21

C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT

ph c t p c a thu t toỏn

ỏnh giỏ đ ph c t p tớnh toỏn c a thu t toỏn là đỏnh giỏ l ng

tài nguyờn cỏc lo i mà thu t toỏn đũi h i s d ng Cú hai lo i tàinguyờn quan tr ng đú là th i gian và b nh Trong giỏo trỡnh

này ta đ c bi t quan tõm đ n đỏnh giỏ th i gian c n thi t đ th c

hi n thu t toỏn mà ta s g i là th i gian tớnh c a thu t toỏn.

• Th i gian tớnh ph thu c vào d li u vào

• Định nghĩa Ta gọi kích thước dữ liệu đầu vào (hay đ dài d

li u vào) là số bít cần thiết để biểu diễn nó.

• Ta s tỡm cỏch đỏnh giỏ th i gian tớnh c a thu t toỏn b i m t hàm

c a đ dài d li u vào.

• o th i gian tớnh b ng đ n v đo nào?

• Định nghĩa Ta gọi phép toán cơ bản là phép toán có

thể thực hiện với thời gian bị chặn bởi một hằng số không phụ thuộc vào kích thước dữ liệu.

• Để tính toán thời gian tính của thuật toán ta sẽ đếm số

phép toán cơ bản mà nó phải thực hiện.

Trang 22

C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT

Cỏc lo i th i gian tớnh

Chúng ta sẽ quan tâm đến

– Thời gian tối thiểu cần thiết để thực hiện thuật toán với mọi bộ dữ liệu đầu vào kích thước n Thời gian như vậy sẽ được gọi là thời gian tính tốt nhất

của thuật toán với đầu vào kíchthước n

– Thời gian nhiều nhất cần thiết để thực hiện thuật toán với mọi bộ dữ liệu

đầu vào kích thước n Thời gian như vậy sẽ được gọi là thời gian tính tồi

nhấtcủa thuật toán với đầu vào kíchthước n

– Thời gian trung bình cần thiết để thực hiện thuật toán trên tập hữu hạn các

đầu vào kích thước n Thời gian như vậy sẽ được gọi là thời gian tính trung

bìnhcủa thuật toán.

Trang 23

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Asymptotic Notation

Q, W, O

Trang 24

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

f(n)  cg(n) v i m i n  n0}

Ta nói g(n) là c n trên ti m c n c a f(n)

Trang 25

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 26

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

• Nói “Th i gian tính là O(f(n))” hi u là: ánh giá trong tình hu ng t i

nh t (worst case) là O(f(n)) Th ng nói: “ ánh giá th i gian tính

trong tình hu ng t i nh t là O(f(n))”

Ngh a là th i gian tính trong tình hu ng t i nh t đ c xác đ nh

b i m t hàm nào đó g(n) O (f(n))

• “Th i gian tính là W(f(n))” hi u là: ánh giá trong tình hu ng t t nh t

(best case) là W(f(n)) Th ng nói: “ ánh giá th i gian tính trong

tình hu ng t t nh t là W(f(n))”

Ngh a là th i gian tính trong tình hu ng t t nh t đ c xác đ nh

b i m t hàm nào đó g(n)  W(f(n))

Ví d

S p x p chèn (Insertion sort) đòi h i th i gian

c các ph n t , vì th bài toán s p x p có th i gian

(merge sort) , bài toán s p x p có th i gian

Trang 27

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 28

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 29

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

f(n) = O(g(n)) khi và ch khi g(n) = W(f(n))

Trang 30

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 31

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 32

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Ví d

• V i m i c p hàm sau đây, ho c f(n) = O(g(n)), f(n) = Ω(g(n)),

ho c f(n) = (g(n)) Hãy xác đ nh quan h nào là đúng

Trang 33

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 34

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Trang 35

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

C n trên và c n d i

Upper Bound and Lower Bound

cho th i gian tính c a P là O(g(n)) n u đ gi i P t n t i thu t

toán gi i v i th i gian tính là O(g(n))

cho th i gian tính c a P là (g(n)) n u m i thu t toán gi i P

– O(n): tuy n tính (linear)

– O(n log n): trên tuy n tính (superlinear)

Trang 36

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

1.5 M t s k thu t phân tích thu t toán

Mô t thu t toán: gi ngôn ng

• mô t thu t toán có th s d ng m t ngôn ng l p trình nào

đó Tuy nhiên đi u đó có th làm cho vi c mô t thu t toán trnênph c t p đ ng th i r t khó n m b t

• Vì th , đ mô t thu t toán ng i ta th ng s d ng gi ngôn

ng (pseudo language), trong đó cho phép v a mô t thu t

toán b ng ngôn ng đ i th ng v a s d ng nh ng c u trúc

l nh t ng t nh c a ngôn ng l p trình

• D i đây ta li t kê m t s câu l nh chính đ c s d ng tronggiáo trình đ mô t thu t toán

Trang 37

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Mô t thu t toán: ph ng ngôn ng

Trang 38

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Mô t thu t toán: ph ng ngôn ng

endcase;

Mô t thu t toán: gi ngôn ng

• Hàm và th t c (Function and procedure)

Function name(các tham s )

Trang 39

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Mô t thu t toán: ph ng ngôn ng

Mô t thu t toán: gi ngôn ng

Trang 40

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Mô t thu t toán: gi ngôn ng

d ng m có ph i là s nguyên t hay không (hàm Is_prime).

• S d ng hàm này này ta xây d ng thu t toán gi i bài toán đ tra

N u m=a*b v i 1 < a, b < m, thì m t trong hai th a s a, b s

là s nguyên t n u nh nó không có c s nào trong các s

Mô t thu t toán: gi ngôn ng

Thu t toán ki m tra m t s nguyên d ng có ph i là nguyên

Trang 41

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

hi n quãng 1031 l n l p N u gi thi t là m t phép chia

có th th c hi n trong th i gian 1 nanosecond thì thu t toán s ch y trong 1013 n m!

Mô t thu t toán: gi ngôn ng

Thu t toán tìm s nguyên t l n h n s nguyên d ng n.

• Thu t toán s s d ng Is_prime nh ch ng trình con

Trang 42

C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT

phõn tớch đ ph c t p c a thu t toỏn

thể là một câu lệnh nhưng cũng có thể là một thuật toán con

Gọi Time(P), Time(Q) là thời gian tính của P và Q tương ứng.Khi đó ta có

Quy tắc tuần tự: Thời gian tính đòi hỏi bởi “P; Q”, nghĩa là P

thực hiện trước, tiếp đến là Q, sẽ là

Time (P; Q) = Time(P) + Time(Q) ,

hoặc trong ký hiệu Theta:

Time (P; Q) = (max(Time(P), Time(Q)).

Trang 43

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Vòng l p for

for i =1 to m do P(i);

•Do (công th c Muavre)

suy ra s bit bi u di n f k(k) Do đó th i gian tính c a m t l n l p là (k) V y th i

k f

2

5 1 2

5 1 5 1

n c.kc n kc n(n1)   (n2)

Trang 44

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Phân tích vòng l p While và Repeat

• C n xác đ nh m t hàm c a các bi n trong vòng l p sao cho hàm này có giá tr gi m d n trong quá trình l p Khiđó

– ch ng minh tính k t thúc c a vòng l p ta ch c n ch ra giá tr c a hàm là s nguyên d ng

Trang 45

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Phân tích Binary-Search

G i d= j-i+1 d – s ph n t c a m ng c n ti p t c kh o sát

• Ký hi u i, j, i*, j* theo th t là giá tr c a i, j tr c và sau khi

th c hi n l n l p Khi đó

N u x < T[k], thì i*=i, j*=(i+j) div 2 - 1, vì th d*=j*- i*+1

= (i+j) div 2 - 1- i + 1  (i+j)/2 - i < (j - i + 1)/2 = d/2.

Trang 46

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Các mô t khác c a thu t toán Binary Search

mid=floor((p+q)/2);

if key==L(mid) break elseif key<L(mid) q=mid-1;

else p=mid+1;

end end

if key==L(p) mid=p;

else mid=0;

Hàm trên C

boolean binary_search_1(int* a, int n, int x) {

/* Test xem x có m t trong m ng a[] kích th c n */ int i;

n = i;

}

return false;

}

Trang 47

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Câu l nh đ c tr ng

th c hi n th ng xuyên ít nh t là c ng nh b t k câu

l nh nào trong thu t toán.

ch n b i h ng s thì th i gian tính c a thu t toán s

Trang 48

C u trúc d li u và thu t toán - N Ngh a B môn KHMT

Ví d : Thu t toán 1 ví d m đ u

int maxSum =0;

for (int i=0; i<n; i++) {

for (int j=i; j<n; j++) { int sum = 0;

for (int k=i; k<=j; k++)

sum += a[k];

if sum > maxSum maxSum = sum;

} }

Ch n câu l nh đ c tr ng là sum+=a[k]

=> ánh giá th i gian tính c a thu t toán là O(n3)

Ví d : S p x p

th l y câu l nh n m trong vòng l p trong cùng làm câu l nh đ c tr ng.

• Tuy v y, c ng c n h t s c th n tr ng khi s d ng cách l a ch n này.

Ví d S p x p ki u nh t chim vào chu ng (Pigeonhole Sorting).

S p x p n s nguyên d ng có giá tr n m trong kho ng 1 s.

u vào: T[1 n]: m ng ch a dãy c n s p x p.

u ra: T[1 n]: m ng ch a dãy đ c s p x p không gi m.

Thu t toán bao g m 2 thao tác:

m chim: Xây d ng m ng U[1 s], trong đó ph n t U[k] đ m s

l ng s có giá tr là k trong m ng T.

Nh t chim: L n l t nh t U[1] con chim lo i 1 vào U[1] l ng đ u tiên,

U[2] con chim lo i 2 vào U[2] l ng ti p theo,

Ngày đăng: 04/12/2015, 17:41

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