Kiến trúc máy tính - Bài 4

36 6 0
Kiến trúc máy tính - Bài 4

Đ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

Phân tích các thuật toán (Analysis of Algorithms) Phân tích thuật toán Thuật toán là một qui trình thực hiện từng bước, từng bước giải quyết một vấn đề trong một khoảng thời

Bài Phân tích thuật tốn (Analysis of Algorithms) 05/08/21 Phân tích thuật tốn Thuật tốn qui trình thực bước, bước giải vấn đề khoảng thời gian hữu hạn 05/08/21 Phân tích thuật tốn Các khía cạnh cần phân tích  Bộ nhớ (Space) Xác định tổng dung lượng nhớ cần thiết để lưu trữ toàn liệu đầu vào, trung gian kết đầu  Ví dụ: Sắp xếp dãy n phần tử Bộ nhớ cần cho toán là: Bộ nhớ lưu biến n, lưu n phần tử dãy, lưu biến i, j, tg (nếu thuật toán Bubble Sort)  Thời gian chạy thuật toán (Running time) 05/08/21 Phân tích thuật tốn Thời gian chạy (Running time)      Hầu hết thuật toán thực biến đổi đối tượng đầu vào thành đối tượng đầu Thời gian chạy thuật đặc trưng kích thước liệu đầu vào Chúng ta thường đánh giá thời gian chạy thuật toán trường hợp: xấu nhất, trung bình tốt Thời gian chạy trung bình thuật tốn thường khó xác định Chung ta tập chung vào phân tích thời gian chạy trường hợp xấu (do dễ phân tích) 05/08/21 Phân tích thuật toán Phương pháp đánh giá Phương pháp thực nghiệm Phương pháp phân tích lý thuyết 05/08/21 Phân tích thuật tốn Phương pháp thực nghiệm Các bước thực hiện:  Viết chương trình thể thuật tốn  Chạy chương trình với liệu đầu vào có kích thước khác tổng hợp lại  Sử dụng hàm đồng hồ để lấy xác thời gian chạy thuật toán  Vẽ đồ thị biểu diễn kết 05/08/21 Phân tích thuật tốn Hạn chế phương pháp thực nghiệm Cần phải cài đặt thuật toán ngơn ngữ lập trình, số thuật tốn việc cài đặt khó Kết thu biểu thị cho liệu đầu vào chưa thực nghiệm Để so sánh hai thuật toán ta cần cài đặt máy có cấu hình giống phần cứng/ mơi trường phần mềm 05/08/21 Phân tích thuật tốn Phương pháp phân tích lý thuyết     Sử dụng thuật tốn mơ tả mức cao (giả mã) thay cho chương trình cài đặt Mơ tả thời gian chạy thuật toán hàm phụ thuộc vào kích thước liệu đầu vào, n Tính toán tất khả liệu đầu vào Cho phép đánh giá tốc độ thuật tốn khơng phụ thuộc vào phần cứng/mơi trường phần mềm 05/08/21 Phân tích thuật tốn Giả mã (Pseudocode)     Mơ tả thuật tốn mức trừu tượng cao Nhiều cấu trúc ngôn ngữ tự nhiên Kém chi tiết chương trình Sử dụng nhiều ký hiệu để mơ tả Ví dụ thuật tốn tìm Max phần tử mảng Algorithm arrayMax(A,n) Input: Mảng A có n số nguyên Output: Giá trị lớn A Max  A[0] for i  to n-1 if A[i] > Max then Max  A[i] return Max 05/08/21 Phân tích thuật tốn n2 Những chi tiết mô tả PseudoCode        Cấu trúc điểu khiển If then while For Biến.Phươngthức([Danh sách đối]) else  Xuống dòng thay cho dấu {, } Khai báo phương thức Algorithm Phươngthức([Dánh sách đối]) Input: output: 05/08/21 Gọi hàm, phương thức Phân tích thuật tốn Trả lại giá trị cho hàm return Biểu_thức  Các biểu thức  Phép gán sánh = n2 phép so sánh Cho phép viết số mũ 10 Ô-lớn tốc độ phát triển giá trị    Ký hiệu Ô-lớn cận tốc độ phát triển giá trị hàm Ta nói “f(n) O(g(n))” có nghĩa tốc độ phát triển giá trị f(n) không lớn tốc độ phát triển g(n) Chúng ta sử dụng ký hiệu Ô-lớn để xếp hạng hàm theo thứ tự tốc độ phát triển giá trị 05/08/21 f(n) O(g(n)) g(n) O(f(n)) Tốc độ g(n) lớn Đúng Không Tốc độ Đúng Đúng Phân tích thuật tốn 22 Qui tắc xác định Ơ-lớn    Nếu f(n) đa thức bậc d f(n) O(nd) - Bỏ qua số hạng bậc thấp - Bỏ qua hệ số Sử dụng lớp hàm nhỏ - Ta nói “2n O(n)” thay cho “2n O(n2)” Sử dụng lớp hàm đơn giản Ta nói “3n+5 O(n)” thay cho “3n+5 O(3n)” 05/08/21 Phân tích thuật tốn 23 Phân tích tiệm cận     Việc phân tích thời gian chạy tiệm cận thuật tốn xác định ký hiệu Ơ-lớn (O) Thực phân tích: - Tìm số phép tốn cần phải thực trường hợp xấu nhất, thể hàm phụ thuộc vào kích thước liệu đầu vào - Diễn tả hàm ký hiệu Ơ-lớn Ví dụ: - Chúng ta xác định thuật toán ArrayMax thực tối đa 5n+1 phép tốn - Chúng ta nói thuật toán ArrayMax chạy thời gian O(n) Các hệ số số hạng bậc thấp bị bỏ qua xác đếm số phép toán 05/08/21 Phân tích thuật tốn 24 Ví dụ: Tính trung bình phần tử đầu dãy (prefix average)   Để minh họa phân tích tiệm cận phân tích hai thuật tốn tính trung bình phần tử đầu dãy sau: Hãy tính trung bình i phần tử đầu mảng, với i=0, ,n-1 Trung bình i phần tử đầu dãy X là: A[i]=(X[0]+X[1]+….+X[i-1])/i 05/08/21 Phân tích thuật toán 25 Thuật toán bậc hai  Thuật toán định nghĩa sau: Algorithm prefxAverage(X, n) Input: mảng X có n số ngun Output: Mảng trung bình phần tử đầu dãy X A  new int[n]; n for i 0 to n-1 n+3 s  X[0]; 2n for j  to i + 2+…+(n-1) + 2n s  s + X[j]; 3(1+2+…+(n-1)) A[i]  s/(i+1); 4n return A; 05/08/21 Phân tích thuật toán 26 Thuật toán bậc hai  Tổng số phép toán tối đa thuật toán thực là: T(n) = 4(1+2+…+(n-1))+10n+4 T(n) = 4(1+2+…+n) + 6n+4  Tổng n số nguyên đầu n(n+1)/2 - Hình bên minh họa tốc độ gia tăng thời gian tnực thuật tốn T(n) = 2n2+ 8n+4 05/08/21 Phân tích thuật tốn 27 Cấp số cộng (Arithmetic progression)  Thời gian chạy thuật tốn prefixAverages1 là:  O(2n2+ 8n+4) Do thuật tốn prefixAveragres1 có thời gian chạy O(n2) 05/08/21 Phân tích thuật tốn 28 Thuật tốn tuyến tính  Thuật tốn mơ tả sau: Algorithm prefxAverage(X, n) Input: mảng X có n số nguyên Output: Mảng trung bình phần tử đầu dãy X A  new int[n]; s  0; for i 0 to n-1 s  s + X[i]; A[i]  s/(i+1); return A;   n n+3 3n 4n Tổng số phép toán tối đa cần phải thực  T(n) = 9n + Độ phức tạp tiệm cận thuật tốn prefixAverages2 O(n) 05/08/21 Phân tích thuật toán 29 Qui tắc xác định độ phức tạp thuật tốn • Qui tắc cộng Nếu thuật tốn thực hai đoạn chương trình P1, P2 rời có độ phức tạp đoạn chương trình tương ứng O(g(n)) O(f(n)) Khi độ phức tạp thuật tốn là: T(n) = O(max{g(n),f(n)}) • Ví dụ: for i = to n input a[i]; P1 có thời gian chạy O(n) Min  a[0]; P2 có thời gian chạy O(1) for i=1 to n-1 if a[i]0, c”>0 số nguyên n0≥1 để mà: c’g(n)≤f(n) ≤cg(n) với n≥n0 05/08/21 Phân tích thuật tốn 34 Tóm tắt số kiến thức tốn học  Logarit   Một số tính chất Logarit • Logxab=logxa+logxb • Logx(a/b)=logxa-logxb • Logxab = blogxa • Logba=logxa/logxb Một số tính chất số mũ • • • • 05/08/21 số mũ a(b+c)=abac abc=(ab)c ab/ac=a(b-c) b=alogab Phân tích thuật tốn 35 Bài tập 36 ... toán thực là: T(n) = 4( 1+2+…+(n-1))+10n +4 T(n) = 4( 1+2+…+n) + 6n +4  Tổng n số nguyên đầu n(n+1)/2 - Hình bên minh họa tốc độ gia tăng thời gian tnực thuật tốn T(n) = 2n2+ 8n +4 05/08/21 Phân tích... ví dụ ơ-lớn  7n-2 7n-2 O(n) Vì: chọn số c=7 n0=1 7n-2≤cn n≥n0  3n3+20n2+5 3n3+20n2+5 O(n3) Vì chọn c =4 n0=21 3n3+20n2+5≤cn3 n≥n0  3logn+log logn 3logn+log logn O(logn) Vì chọn c =4 n0=2 3logn+log... xác định ký hiệu Ơ-lớn (O) Thực phân tích: - Tìm số phép toán cần phải thực trường hợp xấu nhất, thể hàm phụ thuộc vào kích thước liệu đầu vào - Diễn tả hàm ký hiệu Ơ-lớn Ví dụ: - Chúng ta xác định

Ngày đăng: 08/05/2021, 16:39

Mục lục

  • Bài 4. Phân tích các thuật toán (Analysis of Algorithms)

  • Các khía cạnh cần phân tích

  • Thời gian chạy (Running time)

  • Phương pháp đánh giá

  • Phương pháp thực nghiệm

  • Hạn chế của phương pháp thực nghiệm

  • Phương pháp phân tích lý thuyết

  • Những chi tiết mô tả PseudoCode

  • Mô hình máy truy nhập ngẫu nhiện (Random Access Machine (RAM) Model)

  • Bẩy hàm quan trọng sử dụng trong phân tích thuật toán

  • Các phép toán cơ sở

  • Xác định số phép toán cơ sở

  • Ước lượng thời gian chạy

  • Tốc độ phát triển của thời gian chạy

  • Tốc độ phát triển TG của thuật toán

  • Ký hiệu ô-lớn (Big-Oh)

  • Thêm một số ví dụ về ô-lớn

  • Ô-lớn và tốc độ phát triển giá trị

  • Qui tắc xác định Ô-lớn

  • Phân tích tiệm cận

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

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

Tài liệu liên quan