Thay đổi các biến trong quan hệ tái phát


20

Hiện tại, tôi đang tự nghiên cứu Giới thiệu về Thuật toán (CLRS) và có một phương pháp cụ thể mà họ phác thảo trong cuốn sách để giải quyết các mối quan hệ tái phát.

Phương pháp sau đây có thể được minh họa bằng ví dụ này. Giả sử chúng ta có sự tái phát

T(n)=2T(n)+logn

Ban đầu, họ thực hiện thay thế m = lg (n), sau đó cắm lại để tái phát và nhận:

T(2m)=2T(2m2)+m

Cho đến thời điểm này tôi hiểu hoàn hảo. Bước tiếp theo này là một điều khó hiểu với tôi.

Bây giờ họ "đổi tên" tái phát và để S ( m ) = T ( 2 m ) , dường như tạo raS(m)S(m)=T(2m)

S(m)=2S(m/2)+m

Vì một số lý do, tôi không rõ lý do tại sao việc đổi tên này hoạt động và nó có vẻ như gian lận. Bất cứ ai có thể giải thích điều này tốt hơn?

Câu trả lời:


15

Đó chắc chắn không phải là gian lận. Hãy suy nghĩ trong tính toán làm thế nào thay thế có thể được sử dụng để giải quyết một tích phân khó khăn. Sự thay thế làm cho phương trình dễ quản lý hơn cho thao tác. Ngoài ra, sự thay thế có thể biến đổi một số lần tái phát phức tạp thành những lần quen thuộc.

Đây chính xác là những gì xảy ra trong ví dụ của bạn. Chúng tôi xác định một tái phát mới . Hãy nhớ rằng T ( 2 m ) = 2 T ( 2 mS(m)=T(2m). Lưu ý rằng,S(m/2)=T(2mT(2m)=2T(2m2)+m. Nếu điểm cụ thể này vẫn chưa rõ ràng, hãy đểk=m/2và chú ý tất cả những gì chúng ta đang làm làS(k)=T(2k) này. Bây giờ, chúng ta có thể biểu thịS(m)bằng cách mở rộng nó thành: S(m)=2S(m/2)+m. Giải quyết choS,chúng tôi thấy rằng nó giải quyết cho người bạn quen thuộc của chúng tôiO(mlogmS(m/2)=T(2m2)k=m/2S(k)=T(2k)S(m)

S(m)=2S(m/2)+m.
S . Bây giờ chúng tôi đã giải quyết S, chúng tôi muốn diễn đạt điều này theo T ( n ) . Để làm điều này, chỉ cần cắm lại giá trị ban đầu của chúng tôi cho m và chúng tôi có T O ( log n log log n ) .O(mlogm)ST(n)mTO(lognloglogn)

Đúng vậy, tôi hoàn toàn hiểu làm thế nào thay thế giúp làm cho vấn đề dễ dàng hơn và làm thế nào để cắm lại các giá trị để có được sự phức tạp về mặt n. Tôi đoán câu hỏi của tôi là, sau khi để S (m) = T (2 ^ m), làm thế nào để bạn lấy được S (m / 2)? Nó chỉ không rõ ràng đối với tôi vì một số lý do. Để cụ thể hơn, làm thế nào để bạn kết luận rằng T (2 ^ (m / 2)) = S (m / 2). Có vẻ như trong T tái phát, kích thước của biểu đồ con đang được căn bậc hai, trong khi ở S tái phát, kích thước của bài toán con đang bị giảm đi một nửa

Phần duy nhất tôi không hiểu là khi bạn nói "Lưu ý rằng, S (m / 2) = T (2 ^ (m / 2))" Đó là phần duy nhất không rõ ràng đối với tôi. Tôi đã quen với ý tưởng tạo ra các sự thay thế khác nhau, nhưng tôi không thực sự quen với ý tưởng thay thế toàn bộ sự tái phát.

Ah ok, chỉnh sửa cuối cùng đã làm điều đó cho tôi. Bây giờ thì rõ rồi, cảm ơn!

1
Tôi có một chút nghi ngờ. Nếu tôi viết hàm S () theo cách ktôi nhận được dưới phương trình S (k) = 2S (k / 2) + m Làm thế nào tôi có thể thay thế mchok
Atinesh

4

S(m)=T(2m)STm2m

S

  1. Sm2m

  2. T

Do đó, quá trình chuyển đổi là:

m2mT(2m)=S(m)
m22m/2T(2m/2)=S(m2).
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.