Nội dung môn họcLý thuy ết Bài Tập học Tự 1 Các khái niệc phân tích độ phức tạp tính toán m căn bải thuật.n về phân tích độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p gi
Trang 1PHÂN TÍCH VÀ
THIẾT KẾ GIẢI THUẬT
ANALYS AND DESIGN
ALGORITHMS
1
Trang 2Mục tiêu môn học
Cung c p ki n th c và k năng trong ấp kiến thức và kỹ năng trong ến thức và kỹ năng trong ức và kỹ năng trong ỹ năng trong
vi c phân tích đ ph c t p tính toán ệc phân tích độ phức tạp tính toán ộ phức tạp tính toán ức và kỹ năng trong ạp tính toán
c a gi i thu t ủa giải thuật ải thuật ật.
Tìm hi u các chi n thu t thi t k gi i ểu các chiến thuật thiết kế giải ến thức và kỹ năng trong ật ến thức và kỹ năng trong ến thức và kỹ năng trong ải thuật.
thu t ật.
2
Trang 3Nội dung môn học
Lý thuy ết
Bài Tập học Tự
1 Các khái niệc phân tích độ phức tạp tính toán m căn bải thuật.n về phân tích độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p giải thuật.i thuật.t 6 6 0 10
2 Phân tích độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p của giải thuật.a mộ phức tạp tính toán t số giải thuật.i thuật.t sắp thức và kỹ năng trong tự và tìm kiến thức và kỹ năng trong m 8 8 3 20
3 Phân tích độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p của giải thuật.a mộ phức tạp tính toán t số giải thuật.i thuật.t trên cấp kiến thức và kỹ năng trong u trúc dữ liệc phân tích độ phức tạp tính toán u 9 9 3 20
4 Phân tích độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p của giải thuật.a mộ phức tạp tính toán t số giải thuật.i thuật.t đồ thị 5 5 3 20
5 Các chiến thức và kỹ năng trong n lược thiến thức và kỹ năng trong t kến thức và kỹ năng trong giải thuật.i thuật.t 8 8 3 15
6 Vấp kiến thức và kỹ năng trong n đề NP-đầy đủa giải thuật 9 9 3 20
Trang 4Đánh giá kết quả
Điểm Kiểm tra giữa kỳ < 4 không được thi kết thúc môn học lại
4
Trang 5Tài liệu học tập
Rivest, Introduction to Algorithms, The MIT Press, 1997
Addison-Wesley, 1998
Algorithm Analysis in C , The Benjamin/Cummings Publishing, 1993
5
Trang 6Nhắc nhở một số quy định
Đi học đúng giờ
Đeo thẻ SV
Không đểu các chiến thuật thiết kế giải chuông điệc phân tích độ phức tạp tính toán n thoạp tính toán i reo trong giờ học
Không nghe điệc phân tích độ phức tạp tính toán n thoạp tính toán i, nhắn tin trong giờ học
Không nói chuyệc phân tích độ phức tạp tính toán n riêng, làm ồn khi nghe giải thuật.ng
Mang đầy đủa giải thuật tài liệc phân tích độ phức tạp tính toán u học tật.p của giải thuật.a môn học (khi học
LT và TH): giáo trình, bài tật.p, tật.p chép bài (hoặc
slide bài giải thuật.ng), usb đểu các chiến thuật thiết kế giải lưu bài tật.p
Phải thuật.i làm bài tật.p ở nhà
Trang 9Nội dung
Trang 10Thuật ngữ và khái niệm
Cấp kiến thức và kỹ năng trong u trúc dữ liệc phân tích độ phức tạp tính toán u
Độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p của giải thuật.a thuật.t toán
10
Trang 11 Mải thuật.ng (Array)
Danh sách liên kến thức và kỹ năng trong t (Linked List)
Ngăn xến thức và kỹ năng trong p (Stack)
Hàng đợi (Queue)
Cây (Tree)
…
(1) the logical arrangement of data elements, combined with
(2) the set of operations we need to access the elements.
11
Trang 13Thuật toán
định nhằm giải một bài toán nào đó.
Trang 14Các đặc trưng của Thuật toán
INPUT: Có các bộ dữ liệu đầu vào thuộc một tập hợp dữ liệu nào đó
OUTPUT: Xuất dữ liệu đầu ra theo yêu cầu của bài toán
Tính xác định: Mỗi bước của thuật toán hoàn toàn xác định, được mô tả chính xác và cho kết quả xác định
Tính dừng: Thuật toán phải kết thúc sau hữu hạn bước.
Tính phổ dụng: Thuật toán áp dụng được cho mọi
14
Trang 15Mối quan hệ của CTDL và thuật toán
CTDL + Thuật toán = Chương trình
15
Trang 16Các phương pháp biểu diễn giải thuật
ngôn ngữ tựa PASCAL;
languages) như Pascal, C/C++ vv
16
Trang 17Các phương pháp biểu diễn giải thuật
Ví dụ: Tìm x trong dãy a1, a2, , an
Trang 19Độ phức tạp của thuật toán
Độ phức tạp của giải thuật là chi phí về tài nguyên của hệ thống (chủ yếu là thời gian, bộ nhớ, CPU, đường truyền) cần thiết để thực hiện giải thuật
Phân tích giải thuật (Analyzing of Algorithm) là quá trình tìm ra những đánh giá về tài nguyên cần thiết để thực hiện giải thuật
19
Trang 20Thời gian thực hiện thuật toán
Độ phức tạp về thời gian của giải thuật:
thuật
của input
machine) để thực hiện giải thuật
20
Trang 21 Thời gian tối thiểu để thực hiện giải thuật với
tốt nhất(best-case)của giải thuật
chạy xấu nhất (worst-case) của giải thuật
Thời gian trung bình để thực hiện giải thuật với mọi kích thước đầu vào n được gọi là thời gian chạy trung bình (average case) của giải thuật
21
Độ phức tạp thời gian của thuật toán
Trang 23Giải:
gán, phép so sánh và trả về của giải thuật
Trường hợp tốt nhất: Nếu a1= x, thìT(n) = α+β+ γ
Trường hợp xấu nhất : Nếu x {a1, a2, , an} thì ∉{a1, a2, , an} thì T(n) = (n+1)α+ nβ+ γ
23
Độ phức tạp thời gian của thuật toán
Trang 24 Lưu ý: T(n) là kỳ vọng (expected value) của
f(i)=αi +βi +γ trên không gian xác suất {1, 2, …, n}
24
Độ phức tạp thời gian của thuật toán
Trang 25Khung thức của sự phân tích
Bước 1: Đặc trưng hóa dữ liệu nhập và quyết định kiểu phân tích thích hợp Thông thường, ta tập trung vào việc
Chứng minh rằng thời gian tính toán luôn nhỏ hơn một
“cận trên” (upper bound), hay
Dẫn xuất ra thời gian chạy trung bình đối với một dữ liệu nhập ngẫu nhiên.
Bước 2: nhận dạng thao tác trừu tượng (abstract operation)
mà giải thuật dựa vào đó làm việc.
Thí dụ: thao tác so sánh trong giải thuật sắp thứ tự
Tổng số thao tác trừu tượng thường tùy thuộc vào một vài đại lượng
Bước 3: thực hiện phân tích toán học để tìm ra các giá trị trung bình và giá trị xấu nhất của các đại lượng quan trọng.
Trang 26Hai trường hợp phân tích
• Thường thì không khó để tìm ra cận trên của thời gian tính toán của một giải thuật.
• Nhưng phân tích trường hợp trung bình thường đòi hỏi một sự phân tích toán học cầu kỳ, phức tạp.
• Về nguyên tắc, một giải thuật có thể được phân tích đến một mức độ chính xác rất chi li Nhưng
(estimating) mà thôi
• Tóm lại, chúng ta tìm kiếm một ước lượng thô về
Trang 27Giải thuật có thể có thời gian tính toán tỉ lệ với
1 Nếu tác vụ chính được thực thi một vài lần
thời gian tính toán là hằng số
2 lgN (logarithmic) log2N lgN
Trang 28Các ký hiệu tiệm cận
đơn giản hơn
Trang 29hay T(n) hay T(n) O(g(n))
không vượt quá mức tăng của g(n)
Ký hiệu O biểu diễn g(n) là
một chặn trên tiệm cận (asymptotic upper bound) của f(n)
Trang 30Kí hiệu omega
nhiên no và hằng số C sao cho:
n>no ta có T(n) > C.g(n)
Viết T(n) = (g(n))
hay T(n) (g(n))
không kém mức tăng của g(n)
một chặn dưới tiệm cận (asymptotic lower bound) của f(n)
Trang 31 Ý nghĩa : Mức tăng của T(n)
tương đương mức tăng
Trang 3434
Trang 35TỔNG QUÁT
Mọi đa thức và kỹ năng trong c P(n) bật.c k khi n
tương đương với nk
Pk(n) = aknk+ + ao= (nk)
Trang 36Luật tổng
Trang 37Luật tổng
Trang 38 Lưu ý: Các tính chất trên cũng đúng cho Θ và Ω
Bậc của thời gian chạy càng lớn thì giải thuật càng chậm (chẳng hạn, giải thuật có thời gian chạy T(n) = O(n 2 ) sẽ hiệu quả hơn giải thuật có thời gian chạy T(n) = O(n )
Trang 39Thời gian chạy của các lệnh
Lệnh gán có dạp tính toán ng
X = <biểu các chiến thuật thiết kế giải u thức và kỹ năng trong c> X = <biểu các chiến thuật thiết kế giải u thức và kỹ năng trong c>
Thời gian chạp tính toán y của giải thuật.a lệc phân tích độ phức tạp tính toán nh gán là thời gian thực hiệc phân tích độ phức tạp tính toán n biểu các chiến thuật thiết kế giải u thức và kỹ năng trong c
Trang 40
2 Lệnh lựa chọn
Lệc phân tích độ phức tạp tính toán nh lựa chọn if-else có dạp tính toán ng
if (<điều kiệc phân tích độ phức tạp tính toán n>)
Trang 413 Lệnh lặp: for, while, do-while
Giải thuật sử :
Số tối đa các lần lặp là L(n)
Thời gian kiểu các chiến thuật thiết kế giải m tra điều kiệc phân tích độ phức tạp tính toán n lặp là T0(n).
Thời gian thực hiệc phân tích độ phức tạp tính toán n lệc phân tích độ phức tạp tính toán nh lặp ở lần i (i=1,2, , L(n)) là Ti(n)
Như vật.y thời gian chạp tính toán y của giải thuật.a lệc phân tích độ phức tạp tính toán nh lặp là:
)(
1
0 ( ) ( )
n L i
T n
T
Trang 42– Nếu i < n, quay lại bước 2.
– Ngược lại, dừng thuật toán
Trang 43Thí dụ 1 Cho mộ phức tạp tính toán t giải thuật.i thuật.t tìm phần tử lớn nhấp kiến thức và kỹ năng trong t
trong mộ phức tạp tính toán t mải thuật.ng 1 chiều
procedure MAX(A, n, max)
/* Set max to the maximum of A(1:n) */
Nến thức và kỹ năng trong u C(n) là độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p tính toán của giải thuật.a giải thuật.i thuật.t
3 Lệnh lặp: for, while, do-while
Trang 44Tổng số thao tác so sánh của thủ tục MAX chính là số lần thân vòng lặp được thực thi: (f(n))n-1))
Vậy độ phức tạp tính toán của giải thuật là O(f(n))n))
Đây là độ phức tạp của cả hai trường hợp trung bình và
Trang 45Thí dụ 2: Giải thuật kiểm tra xem có phải mọi phần tử trong
mảng 1 chiều là khác biệt nhau
Trong trường hợp xấu nhất, mảng không hề có hai phần tử nào bằng
nhau hoặc mảng có hai phần tử cuối cùng bằng nhau Lúc đó một sự
3 Lệnh lặp: for, while, do-while
1 + 2 + 3 + … + (n-2) + (n-1) = n(n-1)/2 Vậy độ phức tạp tính toán của giải thuật trong trường hợp xấu nhất là O(n 2 ).
Trang 46nó là lệnh (3) có thời gian chạy là O(1), do đó thời gian chạy của lệnh lặp for này là O(n)
• Lệnh lặp for (1) cũng có số
lần lặp là n, thân của nó có thời gian đã đánh giá là O(n), nên thời gian của lệnh lặp for (1) là O(n 2 )
• Tương tự lệnh for (4) có thời
gian chạy là O(n)
Trang 47Các độ phức tạp thường gặp
Độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p hằng số: O(1) – thời gian chạy
không phụ thuộc vào độ lớn đầu vào
Độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p tuyến thức và kỹ năng trong n tính: O(n) – thời gian
chạy tỉ lệ thuận với độ lớn đầu vào
Độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p logarit: O(logn)
Độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p đa thức và kỹ năng trong c: O(P(n)) , với P là đa thức và kỹ năng trong c có bật.c từ 2 trở lên
Độ phức tạp tính toán phức và kỹ năng trong c tạp tính toán p hàm mũ: O(2n)
47
Trang 48Bảng so sánh các độ phức tạp của thuật toán
Mộ phức tạp tính toán t số lớp thuật.t toán
48
Trang 49Thứ tự độ phức tạp của thuật toán
Trang 50Nguyên tắc phân tích độ phức tạp trung bình
Để tính độ phức tạp trung bình của một giải thuật A, ta phải làm một số bước:
1 Quyết định một không gian lấy mẫu (sampling space)
để diễn tả những dữ liệu đầu vào (kích thước n) có thể
có Giả sử không gian lấy mẫu là S = { I1, I2,…, Ik}
biểu diễn mức độ chắc chắn mà dữ liệu đầu vào đó có thể xảy ra
Trang 52algorithm
1. Khái niệm chia để trị
2. Đệ quy và hệ thức truy hồi
3. Phân tích giải thuật đệ quy
4. Chiến lược thiết kế giải thuật
5. Thiết kế giải thuật kiểu “trực tiếp”
(f(n))bruce-force))
Trang 54Sơ đồ chung
Chia để trị là một kỹ thuật thiết kế thuật toán bao gồm:
hơn có cùng một loại vấn đề
toán ban đầu
Chia để trị thường dẫn đến giải thuật đệ quy
Trang 55SƠ ĐỒ TỔNG QUÁT CHIA
TRỊ
TỔNG HỢP
Trang 56bài toán kích thước n
bài toán con 1 kích thước n/2
bài toán con 2 kích thước n/2
lời giải cho
Chiến lược chia-để-trị
CHIA
TRỊ
Trang 57Chú ý
quy
1. Cơ sở của đệ quy: Các trường hợp cơ bản (thường với kích thước nhỏ) có thể giải trực tiếp;
2. Phần đệ quy: Tổng hợp lời giải: tìm lời giải của bài toán lớn
từ các lời giải của các bài toán nhỏ
từ các lời giải của các bài toán nhỏ
Trang 58Ví dụ đơn giản
Bài Toán : Tìm phần tử lớn nhất trong một dãy số
INPUT: Dãy không rỗng L[1 n] các số
OUTPUT: Số lớn nhất trong dãy L.
Procedure LargestNumber {Chia để tri}
if largest1 > largest2 then largest:= largest1
else largest:= largest2
return largest
Trang 60Phân tích các giai đoạn
Bài toán con cơ bản : Với n
Trang 61Bài toán con 1
Bài toán con 2
Bài toán con 3
phân cách
Trang 62TỔNG HỢP LỜI GIẢI
Quá trình giải bài toán con 2, 3 kết hợp với quá trình tổng hợp lời giải:
1 Khi giải Bài toán 1, lưu kết quả gồm:
Hai điểm P,Q Hai điểm P,Q gần nhau nhất
Giá trị d Giá trị dmin của khoảng cách ngắn nhất
2 Khi giải bài toán con 2 và 3: Chỉ xét các cặp điểm
có hiệu hoành độ và hiệu tung độ nhỏ hơn
có hiệu hoành độ và hiệu tung độ nhỏ hơn d dmin.
Trang 64Kỹ thuật chung:
Lưu cặp điểm gần nhất vào hai biến
Lưu cặp điểm gần nhất vào hai biến cp1 cp1, cp2 và khoảng cách
giữa chúng vào biến
giữa chúng vào biến d d min , sau đó chỉ cần kiểm tra cặp điểm có
hiệu hoành độ nhỏ hơn
hiệu hoành độ nhỏ hơn d d min bằng thủ tục Check sau đây
Procedure Check(p1,p2:Point);
dx=Abs(p1.x-p2.x); If dx> dmin then exit;
dy=Abs(p1.y-p2.y); If dy> dmin then exit;
d:=sqrt(dx*dx+dy*dy) ;
if d < dmin then
begin cp1:=p1; cp2:=p2; dmin:=d ;
Trang 65điểm này theo thứ tự
tăng của tung độ,
trong các điểm này
Trang 66 left[k] := (day_diem[i].x <= x0) ; end;
Sort_y; { sắp xếp day_chon theo trục y}Sort_y; { sắp xếp day_chon theo trục y}
For i:=1 to k-1 do begin y0:= day_chon[i].y; j:=i+1 ;
while j <= k do begin
Check(day_chon[i],day_chon[j]);j:=j+1;end;
Trang 67 if s-r =1 then {Bài toán con cơ bản , chỉ gồm 2 điểm}if s-r =1 then {Bài toán con cơ bản , chỉ gồm 2 điểm}
begin Check(Day_diem[r];Day_diem[s]); exit;end;
{ Chia}
m:= (r+s) div 2;
Find_near(r,m) ; { trị nửa trái }Find_near(r,m) ; { trị nửa trái }
Find_near(m+1,s) ; {trị nửa phải }Find_near(m+1,s) ; {trị nửa phải }
Mid_near(m);
Trang 68Dạng khác: Giảm để trị
INPUT: Dãy không rỗng L[1 n] các số
OUTPUT: Số lớn nhấp kiến thức và kỹ năng trong t trong dãy L.
Algorithm LargestNumber(L[1 n]) {giải thuật.m đểu các chiến thuật thiết kế giải trị}
Trang 72đệ quy thành một giải thuật
F[i]: = F[i-1] + F[i-2]
Fibonacci – Không đệ quy
Trang 73Các phương pháp giải quyết đệ qui
Iteration method – Phương pháp truy hồi)
Substitution method – Phương pháp thay thến thức và kỹ năng trong
Recursion tree method – Phương pháp cây đệc phân tích độ phức tạp tính toán qui
Master method – Phương pháp Master
Trang 74• Tính chất này được mô tả bằng một công thức toán học được gọi là hệ thức truy hồi (recurrence relation).
• Để dẫn xuất ra độ phức tạp của một giải thuật đệ quy,
Trang 75Phân tích giải thuật đệ quy bằng
phương pháp lặp
Công thức 1: Một chương trình đệ quy mà lặp qua bộ dữ
liệu nhập để loại đi một phần tử Hệ thức truy hồi của nó như sau:
C N = C N-1 + N N 2
C 1 = 1
C N = C N-1 + N = C N-2 + (N – 1) + N = C N-3 + (N – 2) + (N – 1) + N
= C 1 + 2 + … + (N – 2) + (N – 1) + N = 1 + 2 + … + (N – 1) + N
Cách suy ra độ phức
tạp bằng phương
pháp lặp:
Trang 76Công thức 2: Một chương trình đệ quy mà tách đôi bộ dữ
liệu nhập trong một bước làm việc Hệ thức truy hồi là:
Trang 77Công thức 3 Một chương trình đệ quy mà tách đôi bộ dữ liệu
nhập trong một bước làm việc nhưng phải xem xét từng phần tử trong dữ liệu nhập Hệ thức truy hồi là
= n
Trang 78Công thức 4 Một chương trình đệ quy mà tách đôi dữ liệu nhập thành hai nửa trong một bước làm việc Hệ thức truy hồi là
C(N) = 2C(N/2) + 1 for N 2 C(1) = 0
Phân tích giải thuật.i thuật.t đệc phân tích độ phức tạp tính toán quy bằng phương pháp lặp
Trang 81Phương pháp thay thến thức và kỹ năng trong
1. Đoán
2. Sử dụng qui nạp tính toán p đểu các chiến thuật thiết kế giải đưa ra
kến thức và kỹ năng trong t quải thuật.