Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

วิธีการทดแทนในโครงสร้างข้อมูล


ที่นี่เราจะมาดูวิธีการใช้วิธีการทดแทนเพื่อแก้ไขความสัมพันธ์ที่เกิดซ้ำ เราจะยกตัวอย่าง 2 ตัวอย่างเพื่อทำความเข้าใจให้ดีขึ้น

สมมติว่าเราใช้เทคนิคการค้นหาแบบไบนารี ในเทคนิคนี้ เราจะตรวจสอบว่ามีองค์ประกอบอยู่ที่ส่วนท้ายหรือไม่ หากมีอยู่ตรงกลาง อัลกอริทึมจะยุติลง มิฉะนั้น เราจะนำอาร์เรย์ย่อยด้านซ้ายและขวาออกจากอาร์เรย์จริงซ้ำแล้วซ้ำอีก ดังนั้นในแต่ละขั้นตอน ขนาดของอาร์เรย์จะลดลง n / 2 สมมติว่าอัลกอริทึมการค้นหาแบบไบนารีใช้เวลา T(n) ในการดำเนินการ เงื่อนไขพื้นฐานใช้เวลา O(1) ระยะเวลา ดังนั้นสมการการเกิดซ้ำจะเป็นดังนี้ -

$$T(n)=\begin{cases}T(1) &for\:n \leq 1\\2T(\frac{n}{2})+c &for\:n> 1\end{cases }$$

แก้ - เราจะแทนที่สูตรในแต่ละขั้นตอนเพื่อให้ได้ผลลัพธ์ -

$$T(n)=T(\frac{n}{2})+c$$

โดยการแทนที่ T(N/2) เราสามารถเขียนได้

$$T(n)=(T(\frac{n}{4})+c)+c$$

$$T(n)=T(\frac{n}{4})+2c$$

$$T(n)=T(\frac{n}{8})+3c$$

$$T(n)=T(\frac{n}{2^{k}})+kc$$

ตอนนี้ถ้า $$(\frac{n}{2^{k}})$$ ถึง 1 ก็แสดงว่า 2 k คือ น. ดังนั้นค่าของ k คือ log2 𝑛

ความซับซ้อนของ T(n) =ϴ(log n)

ในทำนองเดียวกัน หากเราเลือกตัวอย่างอื่น เช่น การเรียงลำดับการผสาน ในกรณีนั้น เราจะแบ่งรายการออกเป็นสองส่วน การแบ่งส่วนนี้จะเกิดขึ้นจนกว่ารายการจะมีขนาดเพียง 1 เท่านั้น หลังจากนั้นเราจะรวมรายการตามลำดับ อัลกอริทึมการรวมจะใช้เวลา O(n) ดังนั้น หากอัลกอริธึมการเรียงลำดับการผสานใช้เวลา T(n) จากนั้นแบ่งมันออกเป็นสองส่วน และทำภารกิจเดียวกันสำหรับแต่ละรายการ พวกเขาจะใช้ T(n/2) เป็นต้น ดังนั้นความสัมพันธ์ที่เกิดซ้ำจะเป็นดังนี้ −

$$T(n)=\begin{cases}T(1) &for\:n =1\\2T(\frac{n}{2})+cn &for\:n> 1\end{cases} $$

แก้ - เราจะแทนที่สูตรในแต่ละขั้นตอนเพื่อให้ได้ผลลัพธ์ -

$$T(n)=2T(\frac{n}{2})+cn$$

โดยการแทนที่ T(N/2) เราสามารถเขียนได้

$$T(n)=2(2T(\frac{n}{4})+\frac{cn}{2}) +cn$$

$$T(n)=4T(\frac{n}{4}) +2cn$$

$$T(n)=8T(\frac{n}{8}) +3cn$$

$$T(n)=2^{k}T(\frac{n}{2^{k}}) +kcn$$

ตอนนี้ถ้า $$(\frac{n}{2^{k}})$$ ถึง 1 ก็แสดงว่า 2 k คือ น. ดังนั้นค่าของ k คือ log2 . และ T(n) จะเป็น −

𝑇(𝑛) =𝑛𝑇(1) + 𝑐𝑛 บันทึก2 𝑛

ความซับซ้อนคือ θ(n log n)