การเปลี่ยนแปลงตัวแปรในความสัมพันธ์ที่เกิดซ้ำ


20

ขณะนี้ฉันกำลังเรียนรู้ด้วยตัวเอง Intro to Algorithms (CLRS) และมีวิธีการหนึ่งที่พวกเขาร่างในหนังสือเพื่อแก้ปัญหาความสัมพันธ์ที่เกิดซ้ำ

วิธีการต่อไปนี้สามารถอธิบายได้ด้วยตัวอย่างนี้ สมมติว่าเรามีการเกิดซ้ำ

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

เริ่มแรกพวกเขาทำการทดแทน m = lg (n) แล้วเสียบกลับเข้าไปที่การเกิดซ้ำและรับ:

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

เมื่อมาถึงจุดนี้ฉันเข้าใจอย่างสมบูรณ์ ขั้นตอนต่อไปนี้เป็นขั้นตอนที่ทำให้ฉันสับสน

ตอนนี้พวกเขา "เปลี่ยนชื่อ" การเกิดซ้ำและปล่อยให้S ( m ) = T ( 2 m )ซึ่งเห็นได้ชัดว่าผลิตS(m)S(m)=T(2m)

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

ด้วยเหตุผลบางอย่างมันไม่ชัดเจนสำหรับฉันว่าทำไมการเปลี่ยนชื่อนี้จึงใช้งานได้และดูเหมือนว่าเป็นการโกง ใครช่วยอธิบายเรื่องนี้ได้ดีกว่ากัน?

คำตอบ:


15

มันไม่ได้โกงอย่างแน่นอน คิดในแคลคูลัสว่าการทดแทนอาจใช้เพื่อแก้ปัญหาอินทิกรัลที่ซับซ้อนได้อย่างไร การทดแทนทำให้สมการสามารถจัดการได้ง่ายขึ้นสำหรับการจัดการ นอกจากนี้การทดแทนอาจเปลี่ยนการเกิดซ้ำที่ค่อนข้างซับซ้อนให้เป็นที่คุ้นเคย

นี่คือสิ่งที่เกิดขึ้นในตัวอย่างของคุณ เรากำหนดกลับเป็นซ้ำใหม่ ) จำไว้ว่าT ( 2 m ) = 2 T ( 2 m)S(m)=T(2m)ม. ขอให้สังเกตว่าS(m/2)=T(2mT(2m)=2T(2m2)+m ) หากจุดนี้โดยเฉพาะยังไม่ชัดเจนให้k=เมตร/2และแจ้งให้ทราบทุกสิ่งที่เรากำลังทำอยู่นี้คือS(k)=T(2k) ตอนนี้เราสามารถแสดงS(ม.)โดยการขยายไปยัง: S(เมตร)=2S(ม./2)+ม. แก้เพื่อSเราเห็นว่ามันแก้ไขให้เพื่อนที่คุ้นเคยO(mlogmS(m/2)=T(2m2)k=m/2S(k)=T(2k)S(m)

S(m)=2S(m/2)+m.
S . ตอนนี้ที่เราได้แก้ไข Sเราต้องการที่จะแสดงนี้ในแง่ของ T ( n ) การทำเช่นนี้เพียงเสียบกลับมาอยู่ในค่าเดิมของเราสำหรับเมตรและเรามี T O ( บันทึกn เข้าสู่ระบบเข้าสู่ระบบn )O(mlogm)ST(n)mTO(lognloglogn)

ใช่ฉันเข้าใจอย่างสมบูรณ์ว่าการทดแทนช่วยให้ปัญหาง่ายขึ้นได้อย่างไรและจะเสียบค่ากลับเข้าไปเพื่อให้ได้ความซับซ้อนในรูปของ n ฉันเดาว่าคำถามของฉันคือหลังจากให้ S (m) = T (2 ^ m) คุณจะสืบทอด S (m / 2) อย่างไร มันไม่ชัดเจนสำหรับฉันด้วยเหตุผลบางอย่าง เพื่อให้ชัดเจนยิ่งขึ้นคุณจะสรุปได้อย่างไรว่า T (2 ^ (m / 2)) = S (m / 2) ดูเหมือนว่าในการเกิดซ้ำ T ขนาด subproblem กำลังสแควร์รูทในขณะที่การเกิดซ้ำ S ขนาด subproblem จะถูกลดลงครึ่งหนึ่ง

ส่วนเดียวที่ฉันไม่เข้าใจคือเมื่อคุณพูดว่า "สังเกตว่า S (m / 2) = T (2 ^ (m / 2))" นั่นเป็นเพียงส่วนเดียวที่ไม่ชัดเจนสำหรับฉัน ฉันคุ้นเคยกับแนวคิดในการสร้างการแทนที่ตัวแปร แต่ฉันไม่คุ้นเคยกับแนวคิดในการแทนที่การเกิดซ้ำทั้งหมด

อ่าโอเคการแก้ไขครั้งล่าสุดทำให้ฉันแล้ว ชัดเจนแล้วขอบคุณ!

1
ฉันสงสัยเล็กน้อย ถ้าผมเขียนฟังก์ชั่น S () ในแง่ของkฉันได้รับด้านล่างสม S (k) = 2S (k / 2) + m ฉันจะได้รับแทนmสำหรับk
Atinesh

4

S(m)=T(2m)STm2m

S

  1. Sm2m

  2. T

ดังนั้นช่วงการเปลี่ยนภาพคือ:

m2mT(2m)=S(m)
m22m/2T(2m/2)=S(m2).
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.