Tải bản đầy đủ (.pdf) (28 trang)

Phân tích và thiết kế thuật toán

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 (242.99 KB, 28 trang )

PHÂN TÍCH VÀ THIẾT KẾ
THUẬT TOÁN
PhạmThế Bảo

/>Nội dung
• Tổng quan về thuậttoánvàđộ phứctạpcủathuậttoán
• Đánh giá thuậttoánbằng:
– Công cụ toán họcsơ cấp
– Thựcnghiệm
– Hàm sinh
– Hoán vị
• Đệ quy và phương pháp đánh giá
• Đánh giá mộtsố thuật toán thông dụng
• Các phương pháp giảiquyết bài toán trên máy tính:
– Trựctiếp
– Gián tiếp
• Kỹ thuậtthiếtkế thuật toán:
– Chia để trị
– Greedy
– Quy hoạch động
– Tìm kiếmcụcbộ (địaphương)
Phạm Thế Bảo
Hình thứckiểmtra
• Thựchành(4 điểm):
– Làm việc theo nhóm
– Mỗi nhóm sẽđánh giá mộtthuật toán:
• Chạy 20 loạibộ dữ liệu: 50*i phầntử, với i=1 20
• Mỗiloạibộ dữ liệuchạy 300*k lần, với k=1 10
• Mộilầnchạydữ liệu được phát sinh ngẫu nhiên
– Vẽđồthị, tính phương sai độ lệch chuNn
– Ướclượng độ phứctạp


– Viết báo cáo
• Lý thuyết(6 điểm)
Phạm Thế Bảo
Tài liệuthamkhảo
1. Cẩmnangthuật toán – cuốn 1 – Robert Sedgewich –
Trần Đan Thư.
2. Lập trình = Thuật toán + CTDL, N. Wirth
3. Algorithm Complexity & Communication Problems,
J.P.Barthélemy,G.Cohen&a.Lobstein,UCLPress,
London 1996.
4. Elementary Introduction to new Generalized
Functions, Jean Francois Colombeau, 1991.
5. Algorithm and Complexity, Herbert S.Wilf, 1994.
6. Giảimột bài toán trên máy tính như thế nào, Hoàng
Kiếm, 2003.
7. TheArtofComputerVol.1,2,3,DonaldKnuth,
Addison-Wesley
Phạm Thế Bảo
Tổng quan về thuật toán
1. Thuậttoánlàgì?
Tậphợphữuhạncáchướng dẫnrõràngđể giải
quyếtmột bài toán (vấn đề).
• Mở rộng (máy tính): mộtdãyhữuhạn các
bước không mậpmờ và có thể thựcthiđược,
quá trình hành động theo các bướcnàyphải
dừng và cho được kếtquả như mong muốn.
2. Tính chấtcơ bảncủathuật toán:
– Xác định = không mậpmờ +thựcthiđược
– Hữuhạn
– Đúng

Phạm Thế Bảo
3. Ví dụ:
– Mộtlớphọccầnchọnlớptrưởng theo các
bước:
1. Lập danh sách sinh viên
2. Sắpthứ tự
3. Chọnngười đứng đầulàmlớptrưởng
– Danh sách cầngì?
– Sắptheothứ tự nào? (tăng giảm, tiêu chí
nào)
– Nếu trùng tiêu chí thì giảiquyếtrasao?
Phạm Thế Bảo
Sửalại:
a) Lập danh sách theo: họ tên, ngày tháng năm sinh,
điểmcácmôn,điểm trung bình cuốinăm.
b) SắpxếptheoĐTB giảm. Nếu ĐTB bằng nhau Æ
cùng hạng.
c) Nếucó01HSđứng đầu Æ chọn, ngượclạichọn
ngườicóđiểmtoáncaonhất, nếu không chọn được
Æ bốcthăm.
• Phân biệtmậpmờ và lựachọncóquyết định:
– Mậpmờ là thiếuthôngtinhoặc có nhiềulựachọn
nhưng không đủ điềukiệnquyết định, ví dụ:bước1,
2.
– Lựachọncóquyết định là hoàn toàn xác định duy
nhấttrongđiềukiệncụ thể củavấn đề,vídụ bướcc.
Phạm Thế Bảo
• Tính thựcthiđược, ví dụ:
– Tính ?
– Chạyxethẳng từ nhà hát lớn đến nhà thờđứcbà

theo đường Đồng Khởi?
• Tính dừng, ví dụ:
– B1: nhậpn;
– B2: s=0;
– B3 i=1;
– B4 nếu i=n+1 sang B8, ngượclạisang B5
– B5 cộng i vào s
– B6 cộng 2 vào i
– B7 quay lạiB4
– B8 Tổng cầntínhlàs
1−
Phạm Thế Bảo
• Đặctrưng khác củathuậttoán:
– Xác định đầuvào/ra
– Tính hiệuquả: khốilượng tính toán, không gian,
thờigian.
– Tính tổng quát
Ví dụ:
– giảiax
2
+ bx + c = 0
– Cho mảng các số nguyên A, tìm phầntử lớnnhất.
• Các phương pháp biểudiễnthuậttoán:
– Ngôn ngữ tự nhiên
– Sơđồ(lưu đồ) khối
– Mã giả (Pseudo-code)
Phạm Thế Bảo
Khái niệmthuậtgiải
1. Thuậtgiảilàgì?
Các cách giảichấpnhận đượcnhưng không

hoàn toàn đáp ứng đầy đủ các tiêu chuẩn
củathuậttoánthường đượcgọilàcácthuật
giải.
Đây là khái niệmmở rộng củathuậttoándựa
trên tính xác định và tính đúng đắn.
Ví dụ thuậtgiải Heuristic:
– Nguyên lý vét cạn thông minh
– Nguyên lý Greedy (tham lam)
– Nguyên lý thứ tự
Phạm Thế Bảo
Độ phứctạpcủathuật toán
1. Giớithiệu
Bài toán
Kích thướcn
{thuật toán giải quyết}
?
Cái nào tốt?
Làm sao chọn?
Ví dụ:
• Tìm số nhỏ nhất trong n số cho trước
• Xác định số nguyên dương m có phảilà
số nguyên tố?
• Cho mộtsố nguyên dương gồmn chữ số
khác không trong hệ 10, hãy xáo trộn
các sốđểcó số lớnnhất?
Dựatrêncáigì?
“Thờigianthựchiện” Æ f(n)
1. Xáo trộntổ hợp
2. Sắpxếpgiảmdần
Phạm Thế Bảo

Làm sao xác định “
thời gian thựchiện
” f(n)?
1. Hướng tiệmcận:
– Lý thuyết
– Thựcnghiệm
2. Công cụ toán học:
– Kỹ thuậtsơ cấp
– Hàm sinh
– Hoán vị và nghịch thế
Phạm Thế Bảo
Hướng tiếp cận thực nghiệm
 Các bước thực hiện:
1. Viết chương trình cài đặt
2. Thực thi chương trình với nhiều bộ dữ liệu
3. Đo và thống kê thời gian
4. Xấp xỉ biểu đồ
 Hạn chế:
1. Cần phải cài đặt CT và đo thời gian
2. Bộ dữ liệu không thể đặc trưng hết
3. Khó so sánh 02 thuật giải
Phạm Thế Bảo
Ướclượng tiệmcận
1. Ý nghĩa:
Phân lớpcấp độ lớncủacáchàmf(n)khin
đủ lớn.
Ký hiệuO(bigO–Olớn)
2. Định nghĩa:
Cho2hàmf,g:NÆR, ta nói f = O(g) nếu
∃n

0
∈NvàM>0,saocho⏐f(n)⏐≤M⏐g(n)⏐,
∀n≥n
0
.
Phạm Thế Bảo
Phạm Thế Bảo
n
0
Running Time
f(n)
M*g(n)
Ướclượng tiệmcận
 Mục đích:
Tìm f(n) được ướclượng dựatrênnhững hàm
g(n) đãbiết
Ví duï:
1,000,001 ≈ 1,000,000
3n
2
≈ n
2
 Ví dụ:
• Xem f(n)=n và g(n)=n
2,
ta có f=O(g), vì với
M=1 và n
0
=1. Ta có ⏐f(n)⏐≤1.⏐g(n)⏐, ∀n≥1.
Phạm Thế Bảo

• Xét f(n)=10000n và g(n)=n
2
ta vẫn có f=O(g)

– ⏐f(n)⏐≤10000⏐g(n)⏐, ∀n≥1
– Hay ⏐f(n)⏐≤1.⏐g(n)⏐, ∀n≥10000
• Câu hỏi: g=O(f) ?
Giả sử g=O(f) thì có M và n
0
sao cho
n
2
≤ M (10000n), ∀n≥ n
0
⇒ n≤ 10000 M ), ∀n≥ n
0
⇒ vô lý.
• Xét f(n)=10n thì ta thấy
 f = O(n)
 f = O(n
2
)
 f = O(n
3
)
Phạm Thế Bảo
• Cách viếtkhác: f∈ O(g)
Ví dụ: 10n ∈ O(n) ∈ O(n
2
)

• Tránh lý luậnngụybiện:
• Thựcchất
Tránh viết: O(n
2
) = n
2
+1
Viếthợplệ:
n
2
+1 = O(n
2
)
n
2
+1 ∈ O(n
2
)
222
22
1
() 1
2
1
1
2
Sai
nOn n
nn
==+

⇒=+⇒
222 2
1
() 1 ()
2
nOn n On∈+∈
vaø
Phạm Thế Bảo
• ThuậttoánT cóthời gian thựchiện là f(n)
và f = O(g). Ta nói thuậttóanT cóđộ
phứctạpg.
(hàm g chỉ là mộtchặntrêncủaf, vẫncó
thể có cách ướclượng chặthơn)
Định nghĩa:
Ta nói f tương đương g nếu f=O(g) và
g=O(f), ta viếtf ∼ g.
Ví dụ: ThuậttoánT, kíchthướcn, cóthời
gian chạy
3
1
() 100
10
f
nn n=+
Phạm Thế Bảo
• Ta có thể chứng minh:
f=O(n
3
) và n
3

=O(f)
ChọnM=1, n
0
=100 ⇒ f ∼ n
3
Ta nói “T có độ phứctạptương đương n
3

33
33
3
2
1
100
10
1000 10
1000 (10 1)
1000 (10 1)
nnMn
nnMn
nMn
M
n
+≤
⇒+≤
⇒≤−
⇒≤−
Phạm Thế Bảo
• Mộtsố tính chất: xét hai hàm f(n) và g(n)
a) Nếu g(n) ≠ 0 khi n đủ lớnvà tồntạithì

f=O(g).
• Nếu khi n đủ lớn thì f∼g
• Nếu thì f=O(g) nhưng g≠O(f)
Ví dụ: f(n) = (-1)
n
n và g(n)=n+7, không tồntại
do n chẵnhay lẻ.
Tuy nhiên ⇒ f∼g
()
lim
()
n
f
n
g
n
→∞
()
lim 0
()
n
fn
gn
→∞

()
lim 0
()
n
fn

gn
→∞
=
()
lim
()
n
f
n
g
n
→∞
()
lim 1
()
n
fn
gn
→∞
=
Phạm Thế Bảo
b) Nếu f là đathứcbậc ≤ m thì f=O(n
m
)
c) Nếu f=O(g) và g=O(h) thì f=O(h)
d) Mộtsố công thức:
với C=0.577216 (hằng số Euler)
2
22
11 1

1 ln( ) ( )
2
11
1
2
?
nCO
nn
n
+++= ++
+++=
Phạm Thế Bảo
Phân lớp các hàm
Dạng O Tên Phân loại
O(1) Hằng
O(log
2
(n)) logarit
O( )
Cănthức
O( )

O( )
O(n) Tuyến tính
Đathức
O(n
2
)Bìnhphương
O(n
3

)Bậcba

O(n
m
) Đathức
O(c
n
), vớic>1 Mũ
Độ phứctạplớn
O(n!) Giai thừa
n
3
n
m
n
Phạm Thế Bảo
O(1)
O(n)
O(n lg n)
O(n
c
)
O(C
n
)
O(lgn)
O(n!)
• Ví dụ:xétđộ phứctạp khi xét mộtsố nguyên
dương n có phảilàsố nguyên tố hay không?
– Kiểm tra các ướctừ 2 đếnn-1⇒ độ phứctạplà

O(n)
– Nếukiểmtratừ 2 đến ⇒ độ phứctạplàO( )
– Nếu n khoảng vài tỷ và n=2
m
vớimlàsố bit lưu
trữ,nếuchọn m là kích thướcthuật toán thay cho n
⇒ độ phứctạpcủathuật toán trên trong hai trường
hợplàO(2
m
)vàO(2
m/2
)làhàmmũ.
n
n
Phạm Thế Bảo

×