thuật toánelearning.vnua.edu.vn/uploads/images/users_1341112/do... · 2019. 9. 20. · tính...
TRANSCRIPT
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán và độ phức tạp
Thuật toán Algorithm
Thuật toán Algorithm
i n
i := 1
+
−
1/47FITA
29/08/2015
i := i + 1
−
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán GIỚI THIỆU
Algorithm INTRODUCTION
Chúng ta sẽ học:
•Thuật toán: định nghĩa, tính chất
•Một số ví dụ
• Khái niệm Big-O
2/47FITA
29/08/2015
• Khái niệm Big-O
• Độ tăng của hàm
• Độ phức tạp của thuật toán trong trường hợp xấu nhất
•Độ phức tạp của thuật toán trong trường hợp trung bình
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỊNH NGHĨA
Algorithm DEFINITION
Định nghĩa DefinitionĐịnh nghĩa Definition
Định nghĩa
3/47FITA
29/08/2015
Thuật toán là tập hợp hữu hạn các lệnh chính xác để thực hiện tính toán hoặc để giải một bài toán.Thuật toán là tập hợp hữu hạn các lệnh chính xác để thực hiện tính toán hoặc để giải một bài toán.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỊNH NGHĨA
Algorithm DEFINITION
Tính chất Properties
Các thuật toán thường có một số tính chất chung:
• Đầu vào: Dữ kiện bài toán.
• Đầu ra: Mỗi đầu vào cho một đầu ra, nghiệm của bài toán.
• Tính xác định: Các bước của thuật toán phải được xác
Tính chất
4/47FITA
29/08/2015
• Tính xác định: Các bước của thuật toán phải được xác định một cách chính xác.
• Tính đúng đắn: Phải giải ra nghiệm chính xác với mỗi dữ kiện đầu vào.
• Tính hữu hạn: Thuật toán phải dừng sau hữu hạn bước.
• Tính hiệu quả: Mỗi bước phải thực hiện được một cách chính xác và trong một khoảng thời gian hữu hạn.
• Tính tổng quát: Áp dụng cho mọi bài toán cùng dạng.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỊNH NGHĨA
Algorithm DEFINITION
Ví dụ Example
Hai thủ tục tính toán sau thủ tục nào là một thuật toánChia 2Nhân 2
procedure nhân(n: nguyêndương)
procedure chia(n: nguyêndương)
Tính chất
5/47FITA
29/08/2015
dương)
không là thuật toán vì không dừng
dương)
while n > 0 while n mod 2 = 0
n := 2n n := n/2
là thuật toán với đầu ra là ước số lẻ lớn nhất của đầu vào n
trong khi n>0 làm công việc bên dưới
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán LỚN NHẤT
Algorithm MAXIMUM
Bài toán tìm phần tử lớn nhất ProblemBài toán tìm phần tử lớn nhất Problem
Cho một tập hợp hữu hạn các phần tử có thể so Cho một tập hợp hữu hạn các phần tử có thể so
Lớn nhất
6/47FITA
29/08/2015
Cho một tập hợp hữu hạn các phần tử có thể so sánh được với nhau (tập các số, tập các từ, …). Hãy tìm phần tử lớn nhất của tập đã cho.
Cho một tập hợp hữu hạn các phần tử có thể so sánh được với nhau (tập các số, tập các từ, …). Hãy tìm phần tử lớn nhất của tập đã cho.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán LỚN NHẤT
Algorithm MAXIMUM
Thuật toán tìm phần tử lớn nhất Algorithm
procedure LớnNhất(a1, a2,…, an)
LN: = a1 LN là phần tử lớn nhất trong a , a ,…, a
Lớn nhất
7/47FITA
29/08/2015
for i: = 2 to n
if LN < ai then LN: = ai
trong a1, a2,…, an
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán LỚN NHẤT
Algorithm MAXIMUM
Thuật toán Algorithm
LN là giá trị lớn nhất sai
a1, a2, …, an: nguyênLN: = a1; i: = 2
đầu vàoLớn nhất
8/47FITA
29/08/2015
LN là giá trị lớn nhất trong {a1, a2, …, an}
i n
đúng
sai
LN: = ai
LN < ai
i: = i + 1
đúng
sai đầu ra
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán LỚN NHẤT
Algorithm MAXIMUM
Ví dụ Example
Tìm giá trị lớn nhất trong dãy các số nguyên sau
1 52 63 4
LN: = 2 LN: = 2
2 < 1 2 < 5 5 < 3 5 < 6 6 < 4
LN: = 5 LN: = 5 LN: = 6 LN: = 6
1 52 63 4
Lớn nhất
9/47FITA
29/08/2015
1 52 63 4
lớn nhất
1 52 63 4
procedure LonNhat(a1, a2, …, an)LN: = a1for i: = 2 to n
if LN < ai then LN: = ai
LN: = a1i: = 2
LN < ai
i = 3LN: = ai
i = 4i = 5i = 6
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán TÌM KIẾM
Algorithm SEARCHING
Bài toán tìm kiếm ProblemBài toán tìm kiếm Problem
Cho một danh sách các phần tử a1, a2, …, an. Xácđịnh vị trí phần tử x nếu nó có trong danh sách hoặcxác định rằng nó không có trong danh sách đó.
Cho một danh sách các phần tử a1, a2, …, an. Xácđịnh vị trí phần tử x nếu nó có trong danh sách hoặcxác định rằng nó không có trong danh sách đó.
Tìm kiếm
10/47FITA
29/08/2015
Chúng ta sẽ học:
• Thuật toán tìm kiếm tuyến tính.
• Thuật toán tìm kiếm nhị phân.
trong danh sách bất kì
trong danh sách các phần tử được sắp theo thứ tự tăng dần
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán TÌM KIẾM
Algorithm SEARCHING
Tuyến tính
Thuật toán tìm tuyến tính Algorithm
procedure TìmTT(x; a1, a2,…, an phân biệt)
i : = 1
while (i n and x ai)
11/47FITA
29/08/2015
while (i n and x ai)
if i n then vị trí: = i vị trí là chỉ số của số hạng bằng x hoặc là 0 nếu không tìm được x
i : = i + 1
else vị trí: = 0
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán TÌM KIẾM
Algorithm SEARCHING
Thuật toán Algorithm
x: nguyên; a1, a2, …, an: nguyên phân biệt
i: = 1
Tuyến tính
12/47FITA
29/08/2015
i n andx ai
đúng
sai
vị trí: = ii n
i: = i + 1
đúng
sai
vị trí: = 0
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán TÌM KIẾM
Algorithm SEARCHING
Ví dụ Example
Tìm vị trí (nếu có) của 3, 7 trong dãy các số nguyên sau
3 2 3 1
i: = 1 i: = 3 i: = 4
3 5 3 3
i: = 2
Tuyến tính
13/47FITA
29/08/2015
1 52 63 4
3 2 3 1 3 5 3 3
vị trí của 3 trong dãy trên là 4
không có 7 trong dãy trên
7 2 7 1
i: = 1 i: = 3 i: = 4 i: = 5 i: = 6
7 5 7 3 7 6 7 4
i: = 2 i: = 7
1 52 63 4
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán TÌM KIẾM
Algorithm SEARCHING
Khi danh sách được sắp xếp theo thứ tự (tăng dần), có thể dùng thuật toán tìm kiếm nhị phân:
Tại mỗi bước, chia danh sách làm 2 nửa, rồi giữ lại nửa chứa phần tử đang tìm (bỏ đi nửa còn lại).
Nhị phân
14/47FITA
29/08/2015
<x x<<x <x
x<
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán TÌM KIẾM
Algorithm SEARCHING
Thuật toán tìm nhị phân Algorithm
procedure TìmNP(x; a1< a2 < …< an)i : = 1
while (i < j)
begin
j : = n
k cho ra số nguyên lớn nhất nhỏ hơn hoặc bằng k (hàm sàn). Ở đây ta xét số nằm giữa danh sách.
Nhị phân
15/47FITA
29/08/2015
if x = ai then vị trí: = i
else vị trí: = 0
m: = (i + j)/2
if x > am then i: = m + 1 else j: = m
endvị trí là chỉ số của số hạng bằng x hoặc là 0 nếu không tìm được x
Nhấn vào để tải về và chạy thuật toán này trong Maxima
nếu x>am thì x ở nửa bên phải
nếu không x ở nửa trái
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Ví dụ Example
Tìm vị trí (nếu có) của 3, 7 trong dãy các số nguyên sau
m: = 2j: = 2
3 = 3
Thuật toán TÌM KIẾM
Algorithm SEARCHING
3 41 86 9
3 > 1 3 > 3
i: = 1 m: = 3
3 > 4
3 41 86 9
j: = 6j: = 3m: = 1 i: = 2
Nhị phân
16/47FITA
29/08/2015
3 41 86 9
vị trí của 3 trong dãy trên là 2
không có 7 trong dãy trên
3 41 86 9
7 > 6 7 > 8
i: = 1 m: = 3 i: = 4
7 > 4
j: = 5j: = 6
m: = 5m: = 4i: = 5
7 = 8
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán TÌM KIẾM
Algorithm SEARCHING
Thuật toán Algorithm
i < j vị trí: = i
x: nguyên; a1, a2, …, an: nguyên tăng dầni: = 1; j: = n
saix = ai
Nhị phân
đúng
17/47FITA
29/08/2015
i < j
đúng
sai
vị trí: = i
x > amj: = m
đúng
vị trí: = 0m: = (i + j)/2
i: = m + 1
x = ai
sai
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán SẮP XẾP
Algorithm SORTING
Bài toán sắp xếp ProblemBài toán sắp xếp Problem
Cho một tập hợp hữu hạn các phần tử có thể so sánh được với nhau (tập các số, tập các từ, …). Hãy liệt kê các phần tử thành danh sách có thứ tự (từ lớn đến bé/từ bé đến lớn).
Cho một tập hợp hữu hạn các phần tử có thể so sánh được với nhau (tập các số, tập các từ, …). Hãy liệt kê các phần tử thành danh sách có thứ tự (từ lớn đến bé/từ bé đến lớn).
Sắp xếp
18/47FITA
29/08/2015
(từ lớn đến bé/từ bé đến lớn).(từ lớn đến bé/từ bé đến lớn).
Chúng ta sẽ học:
•Thuật toán sắp xếp kiểu nổi bọt.
•Thuật toán sắp xếp kiểu chèn.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán SẮP XẾP
Algorithm SORTING
Nổi bọt
Thuật toán sắp xếp kiểu nổi bọt dựa trên ý tưởng sau
Đi từ đầu đến cuối danh sách, tại vị trí thứ i nếu ai > ai+1
thì thực hiện đổi chỗ 2 phần tử này: ai “nặng hơn” sẽ “chìm xuống” (ở sau)ai+1 “nhẹ hơn” sẽ “nổi lên” (ở trước)
Hết bước này số nằm cuối danh sách là số lớn nhất.
19/47FITA
29/08/2015
Hết bước này số nằm cuối danh sách là số lớn nhất.
Thực hiện lại thủ tục như trên để thu được phần tử lớn thứ 2, 3, …
Sau n-1 lần lặp ta được danh sách sắp xếp cần tìm.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Ví dụ Example
Sắp xếp dãy sau theo thứ tự tăng dần bằng thuật toán nổi bọt
1
5
1
5
Thuật toán SẮP XẾP
Algorithm SORTING
1
2
Nổi bọt
20/47FITA
29/08/2015
2
6
3
4
2
6
3
46
3
45
54
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán SẮP XẾP
Algorithm SORTING
Thuật toán sắp xếp nổi bọt Algorithm
procedure SắpNB(a1, a2,…, an)
for i = 1 to n – 1
for to
Nổi bọt
a1, a2,…, an cho ra sẽ được sắp theo
21/47FITA
29/08/2015
if aj > aj+1 then đổi chỗ aj và aj+1
for j = 1 to n – i sẽ được sắp theo thứ tự tăng dần
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán SẮP XẾP
Algorithm SORTING
Chèn
Thuật toán sắp xếp kiểu chèn dựa trên ý tưởng sau
Sắp xếp 2 phần tử đầu tiên của danh sách.Sắp xếp 3 phần tử đầu tiên của danh sách. …Sắp xếp n – 1 phần tử đầu tiên của danh sách.Sắp xếp toàn bộ danh sách.
22/47FITA
29/08/2015
Sắp xếp toàn bộ danh sách.
Việc chuyển tiếp giữa 2 bước lặp từ j-1 phần tử đầu tiên của danh sách đã được sắp xếp sang sắp xếp j phần tử đầu tiên được thực hiện như sau:
Tìm vị trí thích hợp của aj trong danh sách j-1 phần tử đầu tiên của danh sách đã được sắp xếp rồi chèn vào giữa.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán SẮP XẾP
Algorithm SORTING
Ví dụ Example
Sắp xếp dãy sau theo thứ tự tăng dần bằng thuật toán sắp xếp kiểu chèn
2
1
Chèn
2
1
1<2
23/47FITA
29/08/2015
6
4
5
1
3
6
4
5
1
3
3<5
4<5
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán SẮP XẾP
Algorithm SORTING
Thuật toán sắp xếp chèn Algorithm
procedure SắpChèn(a1, a2,…, an, n > 1)
for j = 2 to n
begin
i : = 1
while a > a
Chèn
đi tìm vị trí cần chèn aj vào
24/47FITA
29/08/2015
for k = 0 to j – i – 1
end
while aj > ai
i : = i + 1
m : = aj
aj – k : = aj – k – 1
a1, a2,…, an cho ra sẽ tăng dần
ai : = m
chèn aj vào vị trí i, đẩy đoạn nằm sau i lùi xuống
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán THAM LAM
Algorithm GREEDY
Định nghĩa DefinitionĐịnh nghĩa Definition
Để giải các bài toán tối ưu, những thuật toán tìm đến sự lựa chọn tốt nhất tại mỗi bước gọi là thuật toán tham lam.
Để giải các bài toán tối ưu, những thuật toán tìm đến sự lựa chọn tốt nhất tại mỗi bước gọi là thuật toán tham lam.
Tham lam
25/47FITA
29/08/2015
Ví dụ Example
Bài toán đổi n xu ra các đồng 25 xu, 10 xu, 5 xu, 1 xu sao cho số đồng xu là nhỏ nhất.
Ý tưởng cơ bản: tại mỗi bước, tìm đồng xu lớn nhất không vượt quá số tiền chưa đổi được để đổi.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán tham lam đổi tiền Algorithm
Thuật toán THAM LAM
Algorithm GREEDY
procedure ĐổiTiền(c1 > c2 > …> cr: tiền xu, n N*)
for i = 1 to r
begin
while n ci
26/47FITA
29/08/2015
begin
end
thêm một đồng mệnh giá ci
vào số các đồng xu đã đổi
n : = n - ciTham lam
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán THAM LAM
Algorithm GREEDY
Thuật toán Algorithm
i rsai
c1 > c2 > … > cr > 0; n N*n1: = n2 = … = nr = 0i: = 1
n = n .c + … + n .c
Tham lam
27/47FITA
29/08/2015
i r
đúng
sai
i: = i + 1
đúng
sai
n = n1.c1 + … + nr.cr
n ci
ni : = ni + 1n := n - ci
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất Ví dụ Example
Đổi 47 xu ra các đồng 25 xu, 10 xu, 5 xu, 1 xu bằng
Thuật toán THAM LAM
Algorithm GREEDY
Tham lam
Định lí Theorem
Thuật toán trên tạo ra cách đổi tiền bằng các đồng 25 xu, 10 xu, 5 xu, 1 xu với số đồng xu là ít nhất.
28/47FITA
29/08/2015
Đổi 47 xu ra các đồng 25 xu, 10 xu, 5 xu, 1 xu bằng thuật toán tham lam
22 1047 25n = 47
2525 1010 55 11
n1 = 0 n2 = 0 n3 = 0 n4 = 0n1 = 1
n = 22 22 25n = 12n = 2 12 102 10 2 5 2 11 10 1
n2 = 1n2 = 2 n4 = 1n4 = 2
n = 1n = 0
47 = 1*25 + 2*10 + 0*5 + 2*1
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán BIG-O
Algorithm BIG-O
Định nghĩa DefinitionĐịnh nghĩa Definition
Big-O
Với mỗi thuật toán số phép toán cần thực hiện sẽ là một hàm số theo kích thước đầu vào. Chúng ta sẽ đánh giá tính hiệu quả của mỗi thuật toán bằng cách khảo sát độ tăng của hàm này.
29/47FITA
29/08/2015
Định nghĩa DefinitionĐịnh nghĩa Definition
Cho f(x) và g(x) là hai hàm số từ tập các số nguyên hoặc số thực đến tập các số thực. Ta nói f(x) là O(g(x)) hoặc f(x) là big-O của g(x) hay f(x) O(g(x)) nếu tồn tại hai hằng số C và k sao cho
|f(x)| C|g(x)| với mọi x k.
Cho f(x) và g(x) là hai hàm số từ tập các số nguyên hoặc số thực đến tập các số thực. Ta nói f(x) là O(g(x)) hoặc f(x) là big-O của g(x) hay f(x) O(g(x)) nếu tồn tại hai hằng số C và k sao cho
|f(x)| C|g(x)| với mọi x k.
Ta sẽ chỉ xét các hàm dương nên sẽ bỏ dấu | |
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán BIG-O
Algorithm BIG-O
Ví dụ Example
Chứng minh f(n) = 30n + 8 là big-O của g(n) = n.
Ta cần chứng minh c,k: n > k: 30n + 8 cn.
Lấy c = 31, k = 8. Khi đóvới n > k = 8,
30n+8cn =31n
Big-O
30/47FITA
29/08/2015
đóvới n > k = 8,cn = 31n = 30n + n > 30n+8
n>k=8
n
30n+8 O(n)
Giá trị cụ thể của c và kgọi là bằng chứng. Ta có thể tìm nhiều bằng chứng. Chẳng hạn:
c = 32, k = 9
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất giai thừa
Thuật toán BIG-O
Algorithm BIG-O
Khái niệm big-O được sử dụng để đánh giá số phép toán cần dùng để giải một bài toán theo một thủ tục hoặc một thuật toán cụ thể. Các hàm số cơ bản thường được dùng để so sánh là: 1, log(log(n)), log(n), logk(n), n1/k, n, nlog(n), nk, an, n!,
nnhằng
logarit
đa thức
mũ
601
log(n)
Big-O
31/47FITA
29/08/2015
t
-10
0
10
20
30
40
50
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5n
log(n)n^22^n
n!
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán BIG-O
Algorithm BIG-O
Định lí Theorem
• anxn + an -1xn -1 + …+ a1x + a0 = O(xn) (a0, a1, …, an
là các số thực)
= ( ) = ( ) = ( )
Tính chất
32/47FITA
29/08/2015
• O(g1+g2) = O(max(g1,g2)) = O(g1) nếu g2=O(g1)
• f = O(g) g = O(h) f = O(h)
• af, f 1-b, (logbf)a = O(f) với mọi a, b R và b a >
0.
• f1=O(g1) f2=O(g2) f1 f2 = O(g1g2)
• f1=O(g1) f2=O(g2) f1+f2 = O(g1+g2)
• O(g1+g2) = O(max(g1,g2)) = O(g1) nếu g2=O(g1)
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Ví dụ Example
Đánh giá hàm số
Thuật toán BIG-O
Algorithm BIG-O
n
i
inf )(
Ta có
)()(
nninf
n
Tính chất
33/47FITA
29/08/2015
i
nn
= O(n2)
hoặc n2/2 + O(n)
Bài tập: Chứng minh )(log)(
Oni
nfn
i
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán BIG-THETA
Algorithm BIG-THETA
Khi f O(g) thì hàm f bị chặn trên bởi g. Dưới đây cung cấp một vài cách đánh giá khác về độ tăng của hàmĐịnh nghĩa DefinitionĐịnh nghĩa Definition
Cho f(x) và g(x) là hai hàm số từ tập các số nguyên hoặc số thực đến tập các số thực. Ta nói
•f(x) là Ω(g(x)) hoặc f(x) là big-Omega của g(x) nếu
Cho f(x) và g(x) là hai hàm số từ tập các số nguyên hoặc số thực đến tập các số thực. Ta nói
•f(x) là Ω(g(x)) hoặc f(x) là big-Omega của g(x) nếu
Big-Theta
34/47FITA
29/08/2015
•f(x) là Ω(g(x)) hoặc f(x) là big-Omega của g(x) nếu tồn tại hai hằng số C > 0 và k sao cho
|f(x)| C|g(x)| với mọi x k.
•f(x) là (g(x)) hoặc f(x) là big-Theta của g(x) nếu f O(g) và f Ω(g) tức là tồn tại các hằng số C1, C2, k > 0 sao cho
C1|g(x)| |f(x)| C2|g(x)| với mọi x k.
•f(x) là Ω(g(x)) hoặc f(x) là big-Omega của g(x) nếu tồn tại hai hằng số C > 0 và k sao cho
|f(x)| C|g(x)| với mọi x k.
•f(x) là (g(x)) hoặc f(x) là big-Theta của g(x) nếu f O(g) và f Ω(g) tức là tồn tại các hằng số C1, C2, k > 0 sao cho
C1|g(x)| |f(x)| C2|g(x)| với mọi x k.
g O(f)
f và g cùng bậc
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán BIG-THETA
Algorithm BIG-THETA
Định lí Theorem
• anxn + an -1xn -1 + …+ a1x + a0 = (xn) (ở đây a0, a1,
…, an là các số thực và an ≠ 0)
• f = (g) g = (h) f = (h)
Tính chất
35/47FITA
29/08/2015
• f = (g) g = (h) f = (h)
• af = (f) với mọi a ≠ 0
• f1= (g1) f2= (g2) f1 f2 = (g1g2)
• f1= (g1) f2= (g2) f1+ f2 = (g1+g2)
• (g1+g2) = (max(g1,g2)) = (g1) nếu g2=O(g1)
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán BIG-THETA
Algorithm BIG-THETA
Ví dụ Example
Cho 2 hàm số
Chứng minh f = (g)
f(n) = log(1) + log(2) + …+ log(n) g(n) = nlog(n)
f (n) g(n) n 1
Tính chất
36/47FITA
29/08/2015
f (n) = O(g(n))
2f(n) = log(1) + log(2) + …+ log(n)+ log(n) + log(n-1) +…+ log(1)
= log(1.n) + log(2(n-1)) + … + log(n.1)
g(n) n 1 f (n) = Ω(g(n))
Vậy f (n) = (g(n))
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán BIG-THETA
Algorithm BIG-THETA
Ví dụ Example
Cho 2 hàm số
Chứng minh f (g)
f(n) = (log(n)+n!)/(en+n2) g(n) = n!/en
Tính chất
37/47FITA
29/08/2015
Chứng minh f (g)
limnf(n)/g(n) = limn [(log(n)+n!)/(n!).(en)/(en+n2)]
= 1.1 = 1
Vậy f (n) (g(n))
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Định nghĩa DefinitionĐịnh nghĩa Definition
Độ phức tạp của thuật toán mô tả mức độ khó khăn khi thực hiện thuật toán, gồm hai loại:Độ phức tạp của thuật toán mô tả mức độ khó khăn khi thực hiện thuật toán, gồm hai loại:
Khi có một thuật toán chúng ta sẽ quan tâm đến• Độ phức tạp: thuật toán có hiệu quả không?
Độ phức tạp
38/47FITA
29/08/2015
khi thực hiện thuật toán, gồm hai loại:
•Độ phức tạp thời gian: thời gian cần thiết để thực hiện được thuật toán với kích thước đầu vào xác định, được biểu diễn qua số phép toán được dùng bởi thuật toán như: phép so sánh, cộng, trừ, nhân, chia, …
•Độ phức tạp không gian: dung lượng bộ nhớ cần sử dụng để thực hiện thuật toán.
khi thực hiện thuật toán, gồm hai loại:
•Độ phức tạp thời gian: thời gian cần thiết để thực hiện được thuật toán với kích thước đầu vào xác định, được biểu diễn qua số phép toán được dùng bởi thuật toán như: phép so sánh, cộng, trừ, nhân, chia, …
•Độ phức tạp không gian: dung lượng bộ nhớ cần sử dụng để thực hiện thuật toán.
sẽ học hôm nay
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Ví dụ Example
Mô tả độ phức tạp thời gian của thuật toán tìm phần tử lớn nhất sau, dựa vào số phép so sánh?
procedure LớnNhất(a , a ,…, a : số nguyên)
Độ phức tạp
39/47FITA
29/08/2015
procedure LớnNhất(a1, a2,…, an: số nguyên)
LN: = a1
for i: = 2 to n
if LN < ai then LN: = ai
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Ví dụ Example
LN là giá trị lớn nhất trong {a1, a2, …, an}i n
sai
a1, a2, …, an: nguyênLN: = a1; i: = 2
một phép so sánh để thoát ra khỏi vòng lặp khi i = n + 1
Độ phức tạp
40/47FITA
29/08/2015
đúng
LN: = ai
LN < aii: = i + 1
đúng
saicó n – 1 vòng lặp, mỗi vòng lặp gồm 2 phép so sánh: i n và LN ai
Cần tất cả: (n – 1).2 + 1 = 2n – 1 phép so sánh
→ độ phức tạp thuật toán (n)
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Định nghĩa DefinitionĐịnh nghĩa Definition
Một thuật toán với kích thước đầu vào n gọi là có
• độ phức tạp hằng nếu có dạng O(1)
• độ phức tạp logarit nếu có dạng O(log n)
• độ phức tạp tuyến tính nếu có dạng O(n)
Một thuật toán với kích thước đầu vào n gọi là có
• độ phức tạp hằng nếu có dạng O(1)
• độ phức tạp logarit nếu có dạng O(log n)
• độ phức tạp tuyến tính nếu có dạng O(n)
Độ phức tạp
41/47FITA
29/08/2015
• độ phức tạp đa thức nếu có dạng O(na), a 1
• độ phức tạp hàm mũ nếu có dạng O(an), a > 1
• độ phức tạp giai thừa nếu có dạng O(n!)
• độ phức tạp đa thức nếu có dạng O(na), a 1
• độ phức tạp hàm mũ nếu có dạng O(an), a > 1
• độ phức tạp giai thừa nếu có dạng O(n!)
Ví dụ Example
Thuật toán tìm giá trị lớn nhất trong dãy các số nguyên có độ phức tạp tuyến tính.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Định nghĩa DefinitionĐịnh nghĩa Definition
• Độ phức tạp trong trường hợp xấu nhất là độ phức tạp tính trong trường hợp phải dùng tối đa các phép toán để giải bài toán theo thuật toán đang xét, ứng với một số đầu vào nào đó có kích thước xác định.
• Độ phức tạp trong trường hợp xấu nhất là độ phức tạp tính trong trường hợp phải dùng tối đa các phép toán để giải bài toán theo thuật toán đang xét, ứng với một số đầu vào nào đó có kích thước xác định.
Độ phức tạp
42/47FITA
29/08/2015
một số đầu vào nào đó có kích thước xác định.
• Độ phức tạp trong trường hợp trung bình là độ phức tạp tính số trung bình các phép toán để giải bài toán trên toàn bộ các giá trị đầu vào có kích thước xác định.
• Những bài toán giải được bằng một thuật toán có độ phức tạp đa thức trong trường hợp xấu nhất gọi là bài toán dễ dử lí, nếu không gọi là bài toán không dễ xử lí.
một số đầu vào nào đó có kích thước xác định.
• Độ phức tạp trong trường hợp trung bình là độ phức tạp tính số trung bình các phép toán để giải bài toán trên toàn bộ các giá trị đầu vào có kích thước xác định.
• Những bài toán giải được bằng một thuật toán có độ phức tạp đa thức trong trường hợp xấu nhất gọi là bài toán dễ dử lí, nếu không gọi là bài toán không dễ xử lí.
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Ví dụ Example
Mô tả độ phức tạp thời gian của thuật toán tìm kiếm tuyến tính sau, dựa trên số phép so sánh?
procedure TìmTT(x Z; a , a ,…, a Z phân biệt)
Độ phức tạp
43/47FITA
29/08/2015
procedure TìmTT(x Z; a1, a2,…, an Z phân biệt)
i : = 1
while (i n and x ai)
if i n then vị trí: = i
i : = i + 1
else vị trí: = 0
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Ví dụ Example
x: nguyên; a1, a2, …, an: nguyên phân biệt, i = 1
i n andx ai
đúngi: = i + 1
nếu x = ai có i vòng lặp
mỗi vòng lặp có 2 phép so sánh i n và x ≠ ai
nếu x ≠ ai i có n vòng lặp Xấu nhất
44/47FITA
29/08/2015
sai
vị trí: = ii n đúng
sai
vị trí: = 0
Trường hợp x ≠ ai i có 2n + 1 + 1= 2n + 2 phép so sánh
nếu x ≠ ai i có n vòng lặp và 1 phép so sánh để thoát ra khỏi vòng lặp
một phép so sánh ngoài vòng lặp
Trường hợp x = ai có 2i + 1 phép so sánh
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
Ví dụ Example
Độ phức tạp của thuật toán tìm kiếm tuyến tính trong trường hợp xấu nhất là
2n + 2 = (n) (độ phức tạp tuyến
Trung bình
45/47FITA
29/08/2015
2n + 2 = (n) (độ phức tạp tuyến tính)
Nếu coi x có mặt trong danh sách và khả năng x ở mỗi vị trí là như nhau thì độ phức tạp của thuật toán tìm kiếm tuyến tính trong trường hợp trung bình là
(2.1 + 1) + (2.2 + 1) + …+ (2n + 1)
n= n + 2 = (n)
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Ví dụ Example
Xác định độ phức tạp của thuật toán tìm kiếm nhị phân dựa trên số phép so sánh
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
procedure TìmNP(x Z; a1, a2,…, an Z tăng dần)
i : = 1
j : = nXấu nhất
46/47FITA
29/08/2015
while (i < j)
if x = ai then vị trí: = i
begin
else vị trí: = 0
j : = n
m: = (i + j)/2
if x > am then i: = m + 1 else j: = mend
Thuật toán
Định nghĩa
Tính chất
Ví dụ
Big-O
Độ phức tạp
TH trung bình
TH xấu nhất
Ví dụ Example
Thuật toán ĐỘ PHỨC TẠP
Algorithm COMPLEXITY
x: nguyên; a1, a2, …, an: nguyên tăng dầni: = 1; j: = n
i < j
đúng
vị trí: = isai
vị trí: = 0
x = ai
đúng
sai
1 phép so sánh để thoát khỏi VL, 1 ở ngoài VL
Xấu nhất
47/47FITA
29/08/2015
đúng
saix > amj: = m
đúng
vị trí: = 0m: = (i + j)/2
i: = m + 1
sai
mỗi vòng lặp có 2 phép so sánh i < j và x > am
sau mỗi vòng, kích thước danh sách giảm đi cỡ một nửa có không quá log2n vòng lặp
Độ phức tạp trường hợp xấu nhất: 2 log2n + 2 = (log n)