Chương 1: Introduction – 8.Phương pháp phỏng đoán và xác nhận

1.26 Method of Guessing and Confirming Ở bài viết này, mình sẽ trình bày phương pháp có thể được sử dụng để giải quyết bất kỳ sự lặp lại nào. Ý tưởng cơ bản của phương pháp này là : Đoán đáp án, sau đó chứng minh bằng quy nạp. Nói cách khác, nó giải

1.26 Method of Guessing and Confirming

Ở bài viết này, mình sẽ trình bày phương pháp có thể được sử dụng để giải quyết bất kỳ sự lặp lại nào.
Ý tưởng cơ bản của phương pháp này là :

Đoán đáp án, sau đó chứng minh bằng quy nạp.

Nói cách khác, nó giải quyết câu hỏi:
Điều gì sẽ xảy ra nếu sự lặp lại đã cho dường như không khớp với bất kỳ phương pháp nào trong số master theorem ( định lý chính) mà mình đã trình bày trong các bài trước?
Nếu chúng ta đoán một giải pháp và sau đó cố gắng xác minh theo suy đoán của mình, thường là việc chứng minh sẽ thành công (trong trường hợp này chúng ta đã hoàn thành), hoặc thất bại (trong trường hợp này, thất bại sẽ giúp chúng ta tinh chỉnh lại suy đoán của mình).

Ví dụ: ta hãy xem xét hàm đệ quy sau: T(n)=nT(n)+nT ( n ) = sqrt { n } T ( sqrt { n } ) + n. Cấu trúc này không phù hợp với bất kỳ form nào trong các Master Theorem. Quan sát kĩ hàm đệ quy cho chúng ta ấn tượng rằng nó tương tự như phương pháp chia để trị (chia bài toán thành nsqrt { n } các bài toán con với kích thước mỗi bài toán nsqrt { n }).
Như chúng ta thấy, kích thước của các bài toán con ở mức đệ quy đầu tiên là n.
Vì vậy, chúng ta hãy đoán rằng T(n)=O(nlogn)T ( n ) = O ( n l o g n ), và sau đó cố gắng chứng minh rằng suy đoán của chúng ta là đúng.

Hãy bắt đầu bằng cách cố gắng chứng minh một giới hạn trên upper bound T(n)≤cnlognT ( n ) leq c n l o g n:
T(n)=nT(n)+nT ( n ) = sqrt { n } T ( sqrt { n } ) + n
≤n⋅cnVogn+nquad quad leq quad sqrt { n } cdot c sqrt { n } V o g sqrt { n } + n
=n.clogn+nquad quad = n . c l o g sqrt { n } + n
=n.c.12.logn+nquad quad = n . c . frac { 1 } { 2 } . l o g n + n≤c.n.lognquad quad leq c . n . l o g n (*)

Từ (*) => 1≤c.n.logn1 leq c . n . l o g n. Điều này đúng nếu n đủ lớn và với bất kỳ hằng số c nào, dù nhỏ đến đâu.
Từ chứng minh trên, chúng ta có thể thấy rằng suy đoán của chúng ta là đúng đối với giới hạn trên.

Chúng ta tiếp tục chứng minh giới hạn dưới lower bound cho hàm đệ quy này.
T(n)=nT(n)+nT ( n ) = sqrt { n } T ( sqrt { n } ) + n
≥n.knlogn+nquad quad geq sqrt { n } . k sqrt { n} l o g sqrt { n } + n
=n.klogn+nquad quad = n . k l o g sqrt { n } + n
=n.k12.logn+nquad quad = n . k frac { 1 } { 2 } . l o g n + n≥knlogngeq k n l o g n (*)

Từ (*) => 1≥k.12.logn1 geq k . { frac { 1 } { 2 } } . l o g n. Điều này không chính xác nếu n đủ lớn và với bất kỳ hằng số k.
Từ bằng chứng trên, chúng ta có thể thấy rằng suy đoán của chúng ta không chính xác đối với giới hạn dưới này.


Từ chứng minh ở trên, chúng ta hiểu rằng Θ(nlogn) là quá lớn. Nếu vậy Θ(n) thì sao? Giới hạn dưới dễ dàng chứng minh trực tiếp:
T(n)=nT(n)+n≥nquad quad quad quad quad quad quad quad quad quad quad quad quad quad quad quad T ( n ) = sqrt { n } T ( sqrt { n } ) + n geq n
Bây giờ, chúng ta hãy chứng minh giới hạn trên cho Θ (n) này.
T(n)=nT(n)+nT ( n ) = sqrt { n } T ( sqrt { n } ) + n
≤n.c.n+nquad quad leq sqrt { n } . c . sqrt { n } + n
=n.c+nquad quad = n . c + n
=n.(c+1)quad quad = n .( c + 1)
image.png (Kí hiệu này mình thử mãi không biểu diễn được nên đành chụp ảnh vậy 😁)


Từ chứng minh trên, chúng ta hiểu rằng Θ (n) quá nhỏ và Θ (nlogn) quá lớn. Vì vậy, chúng ta cần một cái gì đó lớn hơn n và nhỏ hơn nlogn.
Thử với nloglognn l o g l o g n.
Chứng minh cận trên upper bound cho nloglognn l o g l o g n
T(n)=nT(n)+nT ( n ) = sqrt { n } T ( sqrt { n } ) + n
≤n.c.nloglogn+nquad quad leq sqrt { n } . c . sqrt { n } l o g l o g sqrt { n } + n
=n.c.(loglogn+log(12))+nquad quad = n . c . ( l o g l o g n + log(frac { 1 } { 2 } ) ) + n
=n.c.loglogn−c.n+nquad quad = n . c . { l o g l o g n – c .n } + n (Lấy log cơ số 2 => log(12)log(frac { 1 } { 2 } ) = -1)
≤cnloglogn,ifc≥1quad quad leq c n l o g l o g n , if c geq 1

Chứng minh cận dưới lower bound cho nloglognn l o g l o g n
T(n)=nT(n)+nT ( n ) = sqrt { n } T ( sqrt { n } ) + n
≥n⋅k⋅nloglogn+nquad quad geq sqrt { n } cdot k cdot sqrt { n } l o g l o g sqrt { n } + n
=n.k.loglogn−k.n+nquad quad = n .k. l o g l o g n – k . n + n
≥knloglogn, i f k≤1quad quad geq k n l o g l o g n , text { i f } k leq 1

Từ các chứng minh trên, chúng ta có thể thấy rằng T (n) ≤ cnloglogn, nếu c ≥ 1 và T (n) ≥ knloglogn, nếu k ≤ 1.
Yeah, chứng minh thành công, ta đã tìm được cận trên và dưới của hàm T(n) đã cho.

Tạm kết

Haizzzzz, quả là nhiều toán, lâu lâu mới động vào cũng đau đầu thật các bạn ạ 😅
Bài viết tiếp theo sẽ là Amortized Analysis(Phân tích khấu hao), lý thuyết cuối cùng của chương 1, sau đó sẽ là 1 số Problem và các solution để chúng ta áp dụng và nhớ hơn các lý thuyết đã học 😁

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,