Bài giảng THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN

34 594 0
Bài giảng THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN Phân tích đánh giá độ phức tạp thuật toán CHƯƠNG PHÂN TÍCH VÀ ĐÁNH GIÁ ĐỘ PHỨC TẠP THUẬT TOÁN Nội dung Phân tích thuật toán Đánh giá độ phức tạp thuật toán Chứng minh tính thuật toán Phân lớp độ phức tạp thuật toán Phân tích thuật toán • Mô hình thuật toán  Hai mô hình mô tả thuật toán: mô hình lý thuyết mô hình thực tế o Mô hình lý thuyết: Thuật toán tương đương máy Turing với đặc trưng: - Đơn vị nhớ: ô nhớ lưu giữ kí hiệu băng Đơn vị thời gian: thời gian thực bước chuyển trạng thái Độ phức tạp thời gian: số bước chuyển trạng thái từ ban đầu tới kết thúc Độ phức tạp không gian: Số ô nhớ băng sử dụng để thực thuật toán o Mô hình thực tế: Thuật toán mô tả theo ngôn ngữ tựa Algol (Pascal): - Đơn vị nhớ: lưu giữ trọn vẹn liệu, dài hay ngắn - Đơn vị thời gian: thời gian thực phép tính số học, logic - chí câu lệnh “đơn” Độ phức tạp thời gian: Số đơn vị thời gian thực thuật toán => độ phức tạp tính toán: hàm phụ thuộc vào kích thước liệu vào Độ phức tạp không gian: yêu cầu nhớ, băng thông, cổng logic… Phân tích thuật toán • Mô hình thuật toán  Ví dụ thuật toán theo mô hình thực tế: Thuật toán Sắp xếp chèn InsertionSort(A, n) { for i = to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - } A[j+1] = key } } Thomas’s book Phân tích thuật toán • Phân tích thuật toán:  Là việc dự đoán: o Tài nguyên mà thuật toán đòi hỏi o Thời gian thực thuật toán: Khó đánh giá cụ thể số lượng đơn vị thời gian => Đánh giá qua biểu diễn tiệm cận (Asymptotic Performance) mô hình thực tế thuật toán   Mỗi phân tích thuật toán thực với mô hình tính toán Chúng ta sử dụng mô hình máy truy cập ngẫu nhiên đơn xử lí (generic uniprocessor random-access machine –RAM) với đặc trưng: o o o o Thời gian truy cập ô nhớ Các thao tác thực tuần tự, thao tác đồng thời Các lệnh thực với đơn vị thời gian trừ lời gọi hàm, vòng lặp Kích thước đơn liệu đồng (1 biến int = biến float) (ngoại trừ số tính toán cụ thể tới bit liệu) Phân tích thuật toán • Kích thước liệu vào (input size)   Độ phức tạp thời gian không gian thuật toán hàm kích thước liệu vào (có thể số lượng giá trị) Ví dụ việc mô tả phụ thuộc kích thước liệu vào thuật toán o o o o o o Sắp xếp mảng: Số phần tử mảng cần Nhân số học: Tổng số bit liệu Tính giai thừa: Số cần tính giai thừa Tháp Hà Nội: Số tầng tháp Tìm bao trùm đồ thị: Số đỉnh cạnh đồ thị … Phân tích thuật toán • Thời gian thực thuật toán (running time)   Là số thao tác thực hiện; phép tính số học, logic lệnh “đơn” (như lệnh gán, tăng, giảm biến…) Các câu lệnh sau xem thực với thời gian o y = m * x + b o c = / * (t - 32 ) o z = f(x) + g(y)  Đánh giá thời gian thực đoạn lệnh sau ? if (a > b) a = a – b; Else b = b –a; câu Phân tích thuật toán • Phân tích thời gian thực thuật toán Sắp xếp chèn Câu lệnh Thời gian InsertionSort(A, n) { for i = to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - } A[j+1] = key c1n c2(n-1) c3(n-1) c 4T c5(T-(n-1)) c6(T-(n-1)) c7(n-1) } } T = t2 + t3 + … + tn với ti số lần biểu thức câu lệnh while đánh giá lần lặp thứ i Phân tích thuật toán Độ phức tạp thuật toán • Phân lớp số hàm đánh giá độ phức tạp tính toán  Hàm (hằng số O(1)) Số phép tính/thời gian chạy/dung lượng nhớ không phụ thuộc vào độ lớn đầu vào Thuật toán với số hữu hạn thao tác thực vài lần Ví dụ: thuật toán giải phương trình bậc nhất, bậc hai…  Hàm logn (logarit – O(logn)) Các thuật toán có thời gian thực tăng theo kích thước liệu vào với tốc độ hàm logarit Ví dụ thuật toán tìm kiếm mảng sắp, thuật toán thao tác nhánh nhị phân đầy đủ… Độ phức tạp thuật toán • Phân lớp số hàm đánh giá độ phức tạp tính toán  Hàm n (tuyến tính – O(n)) Các thuật toán có thời gian thực tăng theo kích thước liệu vào với tốc độ tuyến tính Thường số hữu hạn thao tác với tất liệu vào Ví dụ thuật toán tìm kiếm (phần tử, max, min…) mảng  Hàm nlogn (tuyến tính logarit – O(nlogn)) Các thuật toán để giải toán cách chia thành toán nhỏ hơn, giải cách độc lập hợp lại để nhận kết toán lớn Ví dụ thuật toán xếp nhanh, xếp vun đống Độ phức tạp thuật toán • Phân lớp số hàm đánh giá độ phức tạp tính toán  Hàm n2 (đa thức – O(nm)) Các thuật toán với thao tác thực với vòng lặp lồng Trường hợp tổng quát nm Thông thường đánh giá thuật toán đến n=3,4 Ví dụ thuật toán xếp bọt, nhân ma trận  Hàm 2n (lũy thừa – O(mn)) Đây lớp thuật toán có độ phức tạp lớn Thông thường thuật toán đệ quy với lượng liệu đầu vào lớn Khi n đủ lớn, xem toán không giải theo nghĩa không nhận lời giải thời gian hữu hạn Độ phức tạp thuật toán • Tốc độ tăng trưởng hàm đánh giá độ phức tạp  Bằng số  Bằng biểu đồ/đồ thị ??? Độ phức tạp thuật toán • Chứng minh quan hệ tiệm cận Cho hai hàm xác định độ phức tạp tính toán thuật toán f(n) g(n) Cần xác định quan hệ tiệm cận f(n) = *(g(n)) với * O, Ω , Θ Các phương pháp chứng minh quan hệ o Dùng định nghĩa: Tìm số c, n0 thỏa mãn điều kiện o Dùng phương pháp quy nạp: - Ví dụ: log n= O(n) tức log(n) ≤ n Cơ sở quy nạp: n = => < Giả thiết quy nạp: log(n) ≤ n với n>1 Tổng quát: log(n+1) ≤ log (n+n) = log (2n) = log n + ≤ n+1 o Dùng quan hệ giới hạn (khi cho n →∞) Độ phức tạp thuật toán • Chứng minh quan hệ tiệm cận o Dùng quan hệ giới hạn (khi cho n →∞) ⇒ f (n) = O ( g (n)) 0  ⇒ f ( n) = Ω( g (n)) f (n) ∞ lim = n →∞ g ( n) const ⇒ f (n) = Θ( g (n))  kxd ⇒ quan Ví dụ: Xét lim n →∞ f ( n) = n n g ( n) = n − n f ( n) n n n = lim = lim =0 n → ∞ n → ∞ g ( n) n −n n −1 ⇒ f ( n) = O ( g ( n) Độ phức tạp thuật toán • Quy tắc đánh giá độ phức tạp thuật toán  Quy tắc Nếu thuật toán P có độ phức tạp T(n)= O(c1.f(n)) P có độ phức tạp O(f(n)) Chứng minh: Dùng định nghĩa T(n) ≤ c c1 f(n) ≤ C f(n)  Quy tắc cộng Nếu thuật toán P thực Pl; P2 P có độ phức tạp độ phức tạp lớn hai thuật toán Pl P2: P = (P1;P2) => TP(n) = Max(TP1(n), TP2(n)) Ví dụ: Tìm max cách xếp dãy giảm lấy phần tử => độ phức tạp O(n2)  Quy tắc nhân Nếu thuật toán P thực cách thực n lần thuật toán P* độ phức tạp thuật toán P tích n lần độ phức tạp thuận toán P* P = (P*)n => TP(n) = n TP*(n) Ví dụ: P for i=1 n P* TP(n)= nTP*(n)) Chứng minh tính thuật toán • Các chiến lược chứng minh tính (correctness)  Kiểm thử (testing): Chạy thử thuật toán với liệu vào cụ thể Ưu điểm: Dễ thực Nhược điểm: Có thể không phát hết lỗi (tiềm ẩn)  Chứng minh tính (correctness proof): chứng minh toán học Ưu điểm: Tổng quát Nhược điểm: khó hơn, có lỗi  Kết hợp kiểm thử chứng minh tính => hiệu • Các phương pháp chứng minh tính   Đối với thuật toán đệ quy: Dùng quy nạp Đối với thuật toán không đệ quy: tính nằm vòng lặp, sử dụng bất biến vòng lặp (loop invariant) Xem thêm Thomas’s book, mục 2.1 Chứng minh tính thuật toán • Chứng minh tính thuật toán đệ quy  Phương pháp quy nạp: o o o o  Chứng minh tính thuật toán theo kích thước liệu vào Cơ sở quy nạp: trường hợp suy biến đệ quy Giả thiết quy nạp: thuật toán với liệu kích thước n Tổng quát: với liệu kích thước n+1 thuật toán cho output Ví dụ: Thuật toán tìm max dãy số A1, A2,…, An có n phần tử Maximum(n)≡ //Tìm max dãy số có n phần tử if (n==1) return (A1) else return(max(Maximum(n-1),An); End Chứng minh thuật toán trả lại giá trị lớn phần tử A1,…, An Cơ sở: n=1 => A1 phần tử lớn Giả thiết quy nạp: Maximum(n) trả lại giá trị lớn A1,…, An Tổng quát: Maximum(n+1) trả lại max(Maximum(n),An+1)=max(A1,…, An, An+1) Chứng minh tính thuật toán • Chứng minh tính thuật toán không đệ quy  Phương pháp bất biến vòng lặp (loop invariant) o Chứng minh thuật toán có vòng lặp, có vòng lặp lồng phải vòng lặp bên o Bất biến vòng lặp biểu thức logic (của biến sử dụng vòng lặp) có giá trị không đổi trình lặp o Sử dụng bất biến vòng lặp để thuật toán lặp dừng cho output  Các đặc trưng bất biến vòng lặp: Khởi tạo, Duy trì, Kết thúc o Khởi tạo: bất biến vòng lặp phải trước lần lặp o Duy trì: Nếu trước vòng lặp, trước vòng lặp o Kết thúc: Khi vòng lặp kết thúc, bất biến cho tính chất hữu ích giúp chứng minh thuật toán đắn Chứng minh tính thuật toán • Chứng minh tính thuật toán không đệ quy  Ví dụ: Thuật toán tìm max dãy số A1, A2,…, An có n phần tử Maximum(n)≡ //Tìm max dãy số có n phần tử m=A1; for(i=2;i

Ngày đăng: 18/05/2017, 21:01

Từ khóa liên quan

Mục lục

  • THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN

  • CHƯƠNG 3 PHÂN TÍCH VÀ ĐÁNH GIÁ ĐỘ PHỨC TẠP THUẬT TOÁN

  • Nội dung

  • Phân tích thuật toán

  • Slide 5

  • Slide 6

  • Slide 7

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Độ phức tạp thuật toán

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

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

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

Tài liệu liên quan