Chương 10-Phân tích thuật toán

10 8 0
Chương 10-Phân tích thuật toán

Đang tải... (xem toàn văn)

Thông tin tài liệu

Hầu hết các bài toán đều có nhiều thuật toán khác nhau để giải quyết chúng. Như vậy, làm thế nào để chọn được sự cài đặt tốt nhất? Đây là một lĩnh vực được phát triển tốt trong nghiên cứu về khoa học máy tính.

NHẬP MƠN LẬP TRÌNH CHƯƠNG 10 PHÂN TÍCH THUẬT TỐN NỘI DUNG Đánh giá thời gian thực thuật toán Độ phức tạp thuật toán Phương pháp tính độ phức tạp CTDL1- Nguyễn Hữu Thể Phân tích thuật tốn − Đánh giá chi phí thời gian thực thuật tốn − Thời gian tính tốn thuật tốn => phụ thuộc kích thước đầu vào (size of input) − Nếu gọi n kích thước liệu đưa vào => thời gian thực thuật tốn biểu diễn hàm n: T(n) − Phần cứng máy tính, ngơn ngữ, chương trình dịch ảnh hưởng tới thời gian thực Ví dụ: Nếu thời gian thực thuật toán T1(n) = n2 Và thời gian thực thuật toán khác T2(n) = 100n => Khi n đủ lớn, thời gian thực thuật toán T2 nhanh thuật toán T1 CTDL1- Nguyễn Hữu Thể Độ phức tạp thuật toán − Cho hàm T(n), T(n) gọi có độ phức tạp f(n) tồn C • cho T(n) ≤ C*f(n) Tức T(n) có tỷ suất tăng f(n) • kí hiệu: O(f(n)) (đọc “ô f(n)”) Chú ý: O(C.f(n))=O(f(n)) với C số Ðặc biệt: O(C)=O(1) CTDL1- Nguyễn Hữu Thể Độ phức tạp thuật toán − Bảng cấp thời gian thực thuật toán: − Các hàm log2n, n, nlog2n, n2, n3 gọi hàm đa thức − Giải thuật với thời gian thực có cấp hàm đa thức thường chấp − nhận Các hàm 2n, n!, nn gọi hàm mũ => tốc độ chậm CTDL1- Nguyễn Hữu Thể Phương pháp tính độ phức tạp − Phương pháp tính độ phức tạp (thời gian thực hiện) của: Chương trình khơng gọi chương trình Chương trình có gọi chương trình khơng đệ quy Chương trình đệ quy − Hai qui tắc quan trọng: Qui tắc cộng: Nếu T1(n) T2(n) thời gian thực hai đoạn chương trình P1 P2 • T1(n) = O(f(n)), • T2(n) = O(g(n)) • => thời gian thực nối tiếp T(n) = O(max(f(n),g(n))) Qui tắc nhân: Nếu T1(n) T2(n) thời gian thực hai đoạn chương trình P1và P2 • T1(n) = O(f(n)), • T2(n) = O(g(n)) • => thời gian thực T(n) = O(f(n)*g(n)) CTDL1- Nguyễn Hữu Thể Phương pháp tính độ phức tạp Phân tích chương trình khơng có chương trình con: Thời gian thực lệnh gán, Read, Write O(1) Thời gian thực chuỗi lệnh xác định qui tắc cộng • => thời gian thi hành lệnh lâu chuỗi lệnh Thời gian thực cấu trúc IF-ELSE: thời gian lớn thực lệnh sau IF sau ELSE thời gian kiểm tra điều kiện Thường thời gian kiểm tra điều kiện O(1) Thời gian thực vòng lặp: tổng (trên tất lần lặp) thời gian thực thân vòng lặp Nếu thời gian thực thân vịng lặp khơng đổi: • thời gian thực vòng lặp = (số lần lặp) * (thời gian thực thân vòng lặp) CTDL1- Nguyễn Hữu Thể Phương pháp tính độ phức tạp Ví dụ: thủ tục xếp “nổi bọt” void BubbleSort(int a[], int n) { int i,j,temp; /*1*/ for(i= 0; i=i ; j ) /*3*/ if (a[j] < a[j-1]){ /*4*/ temp=a[j-1]; /*5*/ a[j-1] = a[j]; /*6*/ a[j] = temp; } } − Tồn chương trình gồm: lệnh lặp {1}, lồng lệnh {1} lệnh lặp {2} lồng lệnh {2} lệnh {3} lồng lệnh {3} lệnh nối tiếp {4}, {5} {6} − Chúng ta tiến hành tính độ phức tạp theo thứ tự từ − Trước hết, ba lệnh gán {4}, {5} {6} tốn O(1) thời gian, so sánh a[j-1]> a[j] tốn O(1) thời gian, lệnh {3} tốn O(1) thời gian − Vòng lặp {2} thực (n-i) lần, lần O(1) => vòng lặp {2} tốn O((n-i).1) = O(n-i) − Vịng lặp {1} có i chạy từ đến n-2 nên thời gian thực vòng lặp {1} độ phức tạp giải thuật là: CTDL1- Nguyễn Hữu Thể Bài tập: tính độ phức tạp void SelectionSort(int a[],int N ) { int min; // số phần tử nhỏ dãy hành for (int i=0; i

Ngày đăng: 09/05/2021, 14:45

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan