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

การเพิ่มขนาดอาร์เรย์แบบสองเท่า (Array Doubling) ในโครงสร้างข้อมูล


แนวคิดการเพิ่มขนาดอาร์เรย์แบบไดนามิก

เมื่อสร้างอาร์เรย์ด้วยการจัดสรรหน่วยความจำแบบไดนามิก (Dynamic Memory Allocation) สามารถเพิ่มขนาดอาร์เรย์เป็นสองเท่าได้โดยทำตามขั้นตอนบางขั้นตอน

ตัวอย่าง

อาร์เรย์เริ่มต้นขนาด 5:

01234
Element 1Element 2Element 3Element 4Element 5

หลังเพิ่มขนาดเป็นสองเท่า (ขนาด 10):

0123456789
Element 1Element 2Element 3Element 4Element 5Element 6Element 7Element 8Element 9Element 10

ขั้นตอนการทำงาน

  1. สร้างอาร์เรย์ใหม่ขนาด m
  2. คัดลอก n องค์ประกอบจากอาร์เรย์เก่าไปอาร์เรย์ใหม่
  3. เปลี่ยนตัวชี้อาร์เรย์เดิมให้ชี้ไปอาร์เรย์ใหม่

การวิเคราะห์ความซับซ้อน (Complexity Analysis)

  • การสร้างอาร์เรย์ขนาด m ใช้เวลา θ(m) เนื่องจากต้อง initialize ค่าเริ่มต้น
  • การคัดลอก n องค์ประกอบใช้เวลา θ(n)
  • รวมเป็น θ(m + n) โดยปกติ m = 2n ดังนั้น θ(3n) ≈ θ(n)

แม้การดำเนินการนี้จะ "มีค่าใช้จ่ายสูง" (Expensive) แต่ถ้ากระจายค่าใช้จ่าย (Amortized) ตลอด n การดำเนินการต่อเนื่อง จะเพิ่มเพียง θ(1) ต่อการดำเนินการหนึ่งครั้ง สรุปคือ การเพิ่มขนาดอาร์เรย์ด้วยตัวคูณคงที่ ไม่ส่งผลเสียต่อความซับซ้อนเชิง渐近 (Asymptotic Complexity)