Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 35 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
35
Dung lượng
135,2 KB
Nội dung
GV: NGUYỄN XUÂN VINH CẤU TRÚC DỮ LIỆU DATA STRUCTURES [214331] MÔN: CẤU TRÚC DỮ LIỆU ĐỘ PHỨC TẠP (Complexity) Nguyễn Xuân Vinh /XX 12/3/15 nguyenxuanvinh@hcmuaf.edu.vn GV: NGUYỄN XUÂN VINH Khái niệm Thuật toán (Algorithm) dãy hữu hạn bước thực thi mà theo ta đạt lời giải toán /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU 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 dãy số, thuật toán xếp… GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Ví dụ Mô tả giải thuật tìm phần tử lớn dãy hữu hạn phần tử B1: Đặt giá trị cực đại tạm thời (max) phần tử dãy B2: Nếu số lớn max gán giá trị max = số B3: Lặp lại bước phần tử dãy B4: Dừng không phần tử dãy, số max lúc phần tử lớn dãy GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Khái niệm Dữ liệu nhập (input) /XX 12/3/15 Dãy thao tác Dữ liệu xuất (output) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Các tính chất thuật toán Tính xác định (rõ ràng, xác định) Tính hữu hạn (dừng) Tính đắn Tính tổng quát: phải áp dụng cho họ vấn đề Đầu vào Đầu Thời gian (số thao tác) MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Độ phức tạp thuật toán Độ phức tạp Dữ liệu nhập thuật toán /XX 12/3/15 Không gian GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Độ phức tạp thuật toán Thời gian mà máy tính thực thuật toán phụ thuộc vào: Bản thân thuật toán Máy tính thực thi thuật toán Đánh giá hiệu thuật toán có thể: Xét số phép tính phải thực thực thuật toán GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Độ phức tạp thuật toán Độ phức tạp không gian Độ phức tạp thời gian Độ phức tạp giải thuật GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Độ phức tạp không gian Chiếm tài nguyên máy Bộ nhớ Sử dụng CPU Băng thông … VD: heap sort dùng heap mà không dùng arraytốn nhớ GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 10 Độ phức tạp thời gian Tính hiệu thuật toán tính phương pháp thực nghiệm thông qua liệu thử Phụ thuộc vào ngôn ngữ lập trình Trình độ, kỹ người viết Phần cứng máy tính dùng để thử nghiệm Sự phức tạp việc xây dựng liệu thử GV: NGUYỄN XUÂN VINH Thí dụ (tt) n3 ≠ O(100n2)? 3 Nếu n = O(100n ), i.e ∃c, k cho: ∀n ≥ k: n ≤ c×100n 21 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU ⇔ ∀n ≥ k: n ≤ c×100 Vô lý GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 22 Định lý Nếu f1(n) = O(g1(n)) f2(n) = O(g2(n)) (f1(n) + f2(n)) = O(max{g1(n), g2(n)}) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 23 Hệ Nếu f1(n) = O(g(n)) f2(n) = O(g(n)) (f1(n) + f2(n)) = O(g(n)) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 24 Định lý Nếu f1(n) = O(g1(n)) f2(n) = O(g2(n)) (f1(n)×f2(n)) = O(g1(n)×g2(n)) GV: NGUYỄN XUÂN VINH Một số định nghĩa Cho f, g hàm thực xác định N Ta viết f = Ω(g) g = O(f) f = Θ(g) f = O(g) f = Ω(g) (i.e f = O(g) g = O(f)) f = O(g) ∀c>0, ∃k∈N cho MÔN: CẤU TRÚC DỮ LIỆU n ≥ k → f(n) ≤ c×g(n) (i.e 25 /XX 12/3/15 tăng nhanh f f ).(Khi n )đó g gọi lim =0 n →∞ g ( n ) 26 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Thí dụ Chứng minh rằng: n2 = o(n2logn) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 27 Một số lớp độ phức tạp thường gặp Độ phức tạp hằng: O(1) Độ phức tạp logarith: O(logn) Độ phức tạp tuyến tính: O(n) Độ phức tạp nlogn: O(nlogn) Độ phức tạp đa thức: O(nk) Độ phức tạp mũ: O(kn), k>1 Độ phức tạp giai thừa: O(n!) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 28 Mức độ tăng trưởng Sắp theo thứ tự tăng dần logn n nlogn n k n k , k>1 n! GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 29 Mức độ tăng trưởng n logn nlogn n n n 0 1 2 8 16 64 16 24 64 512 256 16 64 256 4096 65536 32 160 1024 32768 2147483648 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 30 Thời gian thực Độ phức tạp Thời gian O(log(n)) 10 O(n) 10 O(nlogn) 10 O(n ) 10 O(n ) phút n O(2 ) 1014 năm O(n!) 10142 năm -7 -6 -5 -4 giây giây giây giây GV: NGUYỄN XUÂN VINH Một số ví dụ Thuật toán xếp theo phương pháp bọt (bubble sort) /* Sắp xếp theo thứ tự tăng dần */ for (i=1; i=i; j ) 31 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU if (a[j-1] > a[j]) swap(a[j-1], a[j]); Độ phức tạp: O(n2) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 32 Một số ví dụ Thuật toán xếp quicksort void quickSort(int[] a, int left, int right) { int i, j, x; i = left; j = right; x = a[(i+j)/2]; { while (a[i] < x) i = i + 1; while (x < a[j]) j = j - 1; if (i[...]... j); if (i < right) quickSort(i, right); } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 33 Một số ví dụ (tt) Sắp xếp dãy 44 55 12 42 94 18 06 67 Độ phức tạp của thuật toán quick sort: O(nlogn) 34 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Một số ví dụ (tt) Bài toán tháp Hanoi 35 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH HỎI ĐÁP ... k =1 2 3 GV: NGUYỄN XUÂN VINH Thí dụ (tt) n3 ≠ O(100n2)? 3 2 3 2 Nếu n = O(100n ), i.e ∃c, k sao cho: ∀n ≥ k: n ≤ c×100n 21 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU ⇔ ∀n ≥ k: n ≤ c×100 Vô lý GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 22 Định lý 2 Nếu f1(n) = O(g1(n)) và f2(n) = O(g2(n)) thì (f1(n) + f2(n)) = O(max{g1(n), g2(n)}) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 23 Hệ quả... NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 28 Mức độ tăng trưởng Sắp theo thứ tự tăng dần 1 logn n nlogn n k n k , k>1 n! GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 29 Mức độ tăng trưởng n logn nlogn 2 n 3 n n 2 1 0 0 1 1 2 2 1 2 4 8 4 3 2 8 16 64 16 8 3 24 64 512 256 16 4 64 256 4096 65536 32 5 160 1024 32768 2147483648 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 30 Thời... MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Thí dụ Chứng minh rằng: n2 = o(n2logn) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 27 Một số lớp độ phức tạp thường gặp Độ phức tạp hằng: O(1) Độ phức tạp logarith: O(logn) Độ phức tạp tuyến tính: O(n) Độ phức tạp nlogn: O(nlogn) Độ phức tạp đa thức: O(nk) Độ phức tạp mũ: O(kn), k>1 Độ phức tạp giai thừa: O(n!) GV: NGUYỄN XUÂN VINH. .. Phép toán số học, Trong các giải thuật sắp xếp thì các phép toán cơ sở là so sánh và chuyển dời GV: NGUYỄN XUÂN VINH Độ phức tạp của thuật toán (tt) Thời gian (số thao tác) MÔN: CẤU TRÚC DỮ LIỆU Thuật toán 1 Thuật toán 2 14 /XX 12/3/15 Thuật toán 3 Dữ liệu nhập GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 15 Độ phức tạp của thuật toán (tt) Thời gian tối thiểu (trường hợp tốt nhất) Thời... GV: NGUYỄN XUÂN VINH Định lý 1 Nếu f(n) là một đa thức bậc k theo n: k k-1 f(n) = akn + ak-1n + + a1n + a0, với ak ≠ 0, 19 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU k thì ta có f(n) = O(n ) GV: NGUYỄN XUÂN VINH Thí dụ n (n + 1) 2 k = = O ( n ) ∑ 2 k =1 MÔN: CẤU TRÚC DỮ LIỆU n n 2 2 2 2 2 2 2 3 k = 1 + 2 + + n ≤ n + n + + n = n ∑ k =1 n 20 /XX 12/3/15 n ⇒ ∑ k = O( n ) k =1 2 3 GV: NGUYỄN XUÂN... phụ thuộc đầu vào GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 12 Độ phức tạp của thuật toán 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 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 13... O(n!) 10142 năm -7 -6 -5 -4 giây giây giây giây GV: NGUYỄN XUÂN VINH Một số ví dụ Thuật toán sắp xếp theo phương pháp nổi bọt (bubble sort) /* Sắp xếp theo thứ tự tăng dần */ for (i=1; i=i; j ) 31 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU if (a[j-1] > a[j]) swap(a[j-1], a[j]); Độ phức tạp: O(n2) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 32 Một số ví dụ Thuật toán sắp... f2(n)) = O(g(n)) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 24 Định lý 3 Nếu f1(n) = O(g1(n)) và f2(n) = O(g2(n)) thì (f1(n)×f2(n)) = O(g1(n)×g2(n)) GV: NGUYỄN XUÂN VINH Một số định nghĩa Cho f, g là 2 hàm thực xác định trên N Ta viết f = Ω(g) nếu g = O(f) 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, ∃k∈N sao cho MÔN: CẤU TRÚC DỮ LIỆU n ≥ k → f(n) ≤... GV: NGUYỄN XUÂN VINH Ký hiệu O Cho f, g là 2 hàm thực xác định trong N Khi đó ta viết f(n) = O(g(n)) Nếu ∃C>0, ∃k∈N, ∀n∈N, n≥k → |f(n)| ≤ C.|g(n)| 16 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Vớ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 GV: NGUYỄN XUÂN VINH ... phần tử lớn dãy GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Khái niệm Dữ liệu nhập (input) /XX 12/3/15 Dãy thao tác Dữ liệu xuất (output) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX... (số thao tác) MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Độ phức tạp thuật toán Độ phức tạp Dữ liệu nhập thuật toán /XX 12/3/15 Không gian GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX... NGUYỄN XUÂN VINH Độ phức tạp thuật toán (tt) Thời gian (số thao tác) MÔN: CẤU TRÚC DỮ LIỆU Thuật toán Thuật toán 14 /XX 12/3/15 Thuật toán Dữ liệu nhập GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU