Thuật toán Algorithm là một dãy hữu hạn các bước có thể thực thi được mà theo đó ta đạt được lời giải của bài toán.. Từ Algorithm bắt nguồn từ nhà toán học Ả Rập Al-Khwārizmī Thuật
Trang 1Nguyễn Xuân Vinh nguyenxuanvinh@hcmuaf.edu.vn
CẤU TRÚC DỮ LIỆU DATA STRUCTURES
[214331]
Trang 2 Thuật toán (Algorithm) là một dãy hữu hạn các bước có thể thực
thi được mà theo đó ta đạt được lời giải của bài toán
Từ Algorithm bắt nguồn từ nhà toán học Ả Rập Al-Khwārizmī
Thuật toán giải phương trình bậc 2, thuật toán tìm số lớn nhất trong dãy số, thuật toán sắp xếp…
Trang 3– B2: Nếu số kế tiếp lớn hơn max thì gán giá trị max = số đó
– B3: Lặp lại bước 2 nếu còn phần tử trong dãy
– B4: Dừng khi không còn phần tử trong dãy, số max lúc này là phần tử lớn nhất của dãy
Trang 6Độ phức tạp của thuật toán Thời gian (số thao tác)
Không gian
Dữ liệu nhập
Trang 7• Thời gian mà máy tính khi thực hiện một thuật toán phụ thuộc vào:
– Bản thân thuật toán đó
– Máy tính đang thực thi thuật toán
• Đánh giá hiệu quả của một thuật toán có thể:
– Xét số các phép tính phải thực hiện khi thực hiện thuật toán này
Trang 10– Phụ thuộc vào ngôn ngữ lập trình
– Trình độ, kỹ năng của người viết
– Phần cứng máy tính dùng để thử nghiệm
– Sự phức tạp của việc xây dựng một bộ dữ liệu thử
Trang 12• Thông thường số các phép tính được thực hiện phụ thuộc vào cỡ của bài toán, tức là độ lớn của đầu vào
• Trong thực tiễn, chỉ cần biết một ước lượng đủ tốt của chúng
• Để ước lượng độ phức tạp của một thuật toán ta thường dùng khái niệm big-O
Trang 14Dữ liệu nhập Thời gian (số thao tác)
Trang 15• Thời gian tối thiểu (trường hợp tốt nhất).
• Thời gian tối đại (trường hợp xấu nhất)
• Thời gian trung bình
• Ta thường dùng các ký hiệu sau để mô tả cho độ phức tạp thuật toán
– Bậc big-O: chặn trên, trường hợp tốt nhất
– Bậc big-Ω: chặn dưới, trường hợp xấu nhất
– Bậc Θ (bậc Theta): chặn 2 đầu, trung bình
Trang 16Với n là độ lớn đầu vào:
Bài toán giai thừa: n là số cần tính giai thừa
Bài toán sai phân: n là số chữ số có nghĩa cần đạt được
Các phép tính trên ma trận: n là số hàng hoặc số cột của ma trận
Trang 17 log(n!) log(n n ) = n.log(n)
log(n!) = O(n.log(n)) (f(n) = O(g(n))
Trang 20O 2
) 1 n
n n
n n
n
2 1
k
3 n
1 k
2
3 n
2 2
2 n
1 k
2 2
2 2
Trang 25 f = (g) nếu f = O(g) và f = (g) (i.e f = O(g) và g = O(f)).
f = O(g) nếu c>0, kN sao cho
n k f(n) cg(n)
(i.e ) Khi đó g được gọi là
tăng nhanh hơn f
0 )
n ( g
) n (
f lim
Trang 32void quickSort(int[] a, int left, int right) { int i, j, x;