1. Trang chủ
  2. » Thể loại khác

Tài Liệu - Võ Tấn Dũng (votandung) ď DanhGiaThuatToan

2 63 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 2
Dung lượng 32,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Gọi n là số phần tử dữ liệu hay còn gọi là kích thước của bài toánVới hai hay nhiều thuật toán cùng giải quyết một bài toán, ta sẽ nhận rõ thuật toán nào tốt hơn khi kích thước của bài t

Trang 1

Gọi n là số phần tử dữ liệu (hay còn gọi là kích thước của bài toán)

Với hai (hay nhiều) thuật toán cùng giải quyết một bài toán, ta sẽ nhận rõ thuật toán nào tốt hơn khi kích thước của bài toán là một con số vô cùng lớn Tức là n tiến về vô cực (n -> ∞ )

Ký hiệu Ô-lớn (Big-O):

Xét hàm: f,g: IN->IR

Ta viết f=O(g) nếu:

Tồn tại n0,k∈N sao cho

|f(n)| <= k|g(n)| ∀n>=n0

(đọc là f nhỏ thua g)

Ví dụ 1:

Cho f(n)=20000n2

và g(n)=n3

Hỏi “f có nhỏ thua g” hay không?

Giải

Xét bất đẳng thức:

20000n2 <= n3

 20000<=n ∀n>=20000

Vậy |f(n)|<= 1.|g(n)| ∀n>=20000

Hay |f(n)|<= k.|g(n)| ∀ n>=n0 (với k=1 và n0 =20000)

Hoặc nói cách khác: |f(n)|<= k.|g(n)| ∀ n>=n0 (với k=20000 và n0 =1)

Do đó ta có thể kết luận: f=O(g) (f nhỏ thua g)

Ví dụ 2:

Cho f(n)=n3+1

và g(n)=20n3+n+7

Hỏi “f có nhỏ thua g” hay không?

Giải

Xét bất đẳng thức:

n3+1<=20n3+n+7

 0 <= 19n3+n+6 khi n>=1

Suy ra: |f(n)| <= k.|g(n)| ∀n>=n0 (với k=1 và n0 =1)

Kết luận: f nhỏ thua g

Viết là f=O(g)

Trang 2

- Các lệnh ảnh hưởng chủ yếu đến tốc độ thực hiện trong máy tính của một thuật toán là: lệnh gán và lệnh so sánh

- Sau khi đếm tổng số lệnh gán và lệnh so sánh của một thuật toán, ta quy nó

về Big-O để làm căn cứ đánh giá thuật toán nào tốt hơn

Ví dụ 3:

Đếm tổng số lệnh gán và lệnh so sánh của đoạn mã sau rồi tìm Big-O của nó khi n tiến về vô cực

S=0; //1 lệnh gán

i=0; //1 lệnh gán

while(i<n) //n+1 lệnh so sánh

{

S=S+i; //n lệnh gán

i=i+1; //n lệnh gán

}

Tổng số lệnh gán và lệnh so sánh của đoạn mã trên là:

1+1+(n+1)+n+n=3n+3

Gọi f(n)=3n+3

Và gọi g(n)=n

Xét bất đẳng thức:

3n+3 <=4n

 3<=n ∀n>=3

Vậy |f(n)| <= k.|g(n)| ∀n>=n0 (với k=4 và n0=3)

Kết luận: 3n+3=O(n)

Vậy độ phức tạp của thuật toán của đoạn mã trên là O(n)

Nếu có hai (hay nhiều) thuật toán cùng để giải một bài toán thì người ta so sánh các Big-O của các thuật toán để chọn thuật toán tốt hơn

Ngày đăng: 15/12/2017, 17:02

🧩 Sản phẩm bạn có thể quan tâm

w