- vừa được xem lúc

Chương 1: Introduction - 6.Các định lý chính về giải thuật Chia Để Trị

0 0 19

Người đăng: Đặng An

Theo Viblo Asia

Hi mọi người, tiếp theo series mình sẽ trình bày về giải thuật Divide and Conquer(Chia để trị)

1.22 Master Theorem for Divide and Conquer Recurrences

Tất cả các thuật toán Divide and Conquer (Mình sẽ thảo luận chi tiết trong chương Divide and Conquer) chia bài toán thành các bài toán con, mỗi bài toán là một phần của bài toán ban đầu, sau đó thực hiện một số công việc bổ sung để tính ra câu trả lời cuối cùng.

Ví dụ, thuật toán Merge sort (Mình sẽ trình bày kĩ hơn ở chương Sort) hoạt động trên hai bài toán con, mỗi bài toán nhỏ bằng một nửa kích thước của bài toán ban đầu T(n/2), và sau đó thực hiện thêm O(n) công việc để hợp nhất.
=> Điều này đưa ra phương trình tính running time:\


Định lý sau có thể được sử dụng để xác định thời gian chạy của các divide and conquer.
Đối với một chương trình (thuật toán) đã cho, trước tiên chúng ta cố gắng tìm mối quan hệ lặp lại cho vấn đề.
Nếu sự lặp lại có dạng như dưới đây thì chúng ta có thể trực tiếp đưa ra câu trả lời mà không cần giải quyết hoàn toàn.\


với a ≥ 1, b > 1, k ≥ 0 và b là 1 số thực thì:

  1. Nếu a > b^k
  2. Nếu a = b^k
    • a. Nếu p > –1
    • b. Nếu p = –1
    • c. Nếu p < –1
  3. Nếu a < b^k
    • a. Nếu p ≥ 0
    • b. Nếu p < 0

Định lý quả thật phức tạp, mình xin phép chỉ dừng ở mức độ sử dụng định lý và áp dụng, các bạn nếu như có đam mê sâu hơn về toán muốn chứng minh định lý có thể tham khảo link sau(hoặc gg search thêm giúp mình nhé 😁):
[https://www.cs.purdue.edu/homes/spa/papers/jacm-divide.pdf]

1.23 Divide and Conquer Master Theorem: Problems & Solutions

Đối với mỗi problem sau đây, đưa ra một biểu thức cho thời gian chạy T(n) nếu nó có thể được giải quyết bằng Master Theorem.
Nếu không, chỉ ra rằng Master Theorem không áp dụng.

Problem-1
T(n) = 3T (n/2) + n^2
Solution: Các bạn tìm từ biểu thức các biến a, b, k, p rồi kiểm tra xem nó thuộc trường hợp nào trong Master Theorem, các bài sau các bạn áp dụng tương tự nhé.
Giải thích chi tiết:
Ta có a=3, b=2, k=2, p=0(Vì n^2 = n^2 * 1 = n^2 * (1 biểu thức bất kỳ)^0 )
⇒ 3 < 2^2 và p = 0 ⇒ T(n) = Θ(n^2) (Master Theorem Case 3.a)


Problem-2 T(n) = 4T (n/2) + n^2
Solution: T(n) = 4T (n/2) + n^2 ⇒ T (n) = Θ(n^2 * logn) (Master Theorem Case 2.a)


Problem-3 T(n) = T(n/2) + n 2
Solution: T(n) = T(n/2) + n^2 ⇒ Θ(n^2) (Master Theorem Case 3.a)


Problem-4 T(n) = 2^n * T(n/2) + n^n
Solution: T(n) = 2^n T(n/2) + n n ⇒ Không áp dụng vì a không phải 1 hằng số)


Problem-5 T(n) = 16T(n/4) + n
Solution: T(n) = 16T (n/4) + n ⇒ T(n) = Θ(n^2) (Master Theorem Case 1)


Từ đây các kí hiệu số mũ trong hàm log hơi khó biểu diễn trên viblo nên mình xin phép dùng ảnh

Bài viết này hơi nặng về toán, nó là lý thuyết tổng quát cho giải thuật chia để trị. Ở các chương sau khi có các bài toán cụ thể hơn sẽ áp dụng các lý thuyết này để tính được độ phức tạp của giải thuật 😁

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đôi chút về cấu trúc dữ liệu và thuật toán

Theo anh Phạm Huy Hoàng (toidicodedao) đã viết trong blog của mình là kiến thức trong ngành IT có 2 loại, một là càng để lâu thì càng cũ, lạc hậu và trở lên vô dụng. Hai là càng để lâu thì càng có giá trị thậm chí ngày càng có giá.

0 0 42

- vừa được xem lúc

Cấu trúc dữ liệu Merkle Tree

Cây Merkle là một cây nhị phân có thứ tự được xây dựng từ một dãy các đối tượng dữ liệu (d1, d2,...,dn) sử dụng hàm băm h. Các “lá” của cây là các giá trị băm h(di) đối với 1 ≤ i ≤ n.

0 0 63

- vừa được xem lúc

Cách xây dựng cấu trúc dữ liệu Stack và Queue.

Mở đầu. Hello các bạn, hôm nay mình sẽ chia sẻ với các bạn cách để có thể tự xây dựng 2 loại cấu trúc dữ liệu stack(ngăn xếp) và queue(hàng đợi) sử dụng mảng trong C++;.

0 0 43

- vừa được xem lúc

Tối ưu ứng dụng với cấu trúc dữ liệu cơ bản

Ở Việt Nam có một nghịch lý ai cũng biết: hầu hết sinh viên ngành CNTT đều đã học cấu trúc dữ liệu và giải thuật, thuộc các môn bắt buộc. Thế nhưng lại rất hiếm khi ứng dụng vào công việc hoặc bị loại

0 0 48

- vừa được xem lúc

Chương 1: Introduction - Analysis of Algorithrms

Trong bài viết này mình sẽ nói về cách chúng ta sẽ sử dụng để phân tích và so sánh các loại thuật toán khác nhau. 1.

0 0 26

- vừa được xem lúc

Chương 1: Introduction - Các khái niệm cơ bản

Lời nói đầu. Trước khi có máy tính, đã có các thuật toán.

0 0 24