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

Array Doubling ในโครงสร้างข้อมูล


บางครั้งเราสร้างอาร์เรย์โดยใช้การจัดสรรหน่วยความจำแบบไดนามิก หากอาร์เรย์ได้รับการจัดสรรโดยใช้เทคนิคการจัดสรรหน่วยความจำแบบไดนามิก เราสามารถเพิ่มขนาดของอาร์เรย์เป็นสองเท่าโดยดำเนินการบางอย่าง

สมมติว่าขนาดอาร์เรย์เริ่มต้นคือ 5

อาร์เรย์

0
1
2
3
4
องค์ประกอบ 1
องค์ประกอบ 2
องค์ประกอบ 3
องค์ประกอบ 4
องค์ประกอบ 5

หลังจากเพิ่มอาร์เรย์เป็นสองเท่า ขนาดจะเป็น −

0
1
2
3
4
5
6
7
8
9
องค์ประกอบ 1
องค์ประกอบ 2
องค์ประกอบ 3
องค์ประกอบ 4
องค์ประกอบ 5
องค์ประกอบ 6
องค์ประกอบ 7
องค์ประกอบ 8
องค์ประกอบ 9
องค์ประกอบ 10

หากต้องการเพิ่มขนาดของอาร์เรย์ arr ขนาด n เป็นสองเท่า arr[0…n-1] ขั้นแรกเราต้องสร้างอาร์เรย์ขนาดใหม่ขึ้นมาหนึ่งชุด นั่นคือ ม. จากนั้นคัดลอกองค์ประกอบ n จาก arr ไปยังอาร์เรย์ใหม่ สุดท้ายเปลี่ยนค่าของ arr ให้ชี้ไปที่อาร์เรย์ใหม่

ในการสร้างอาร์เรย์ขนาด m จะใช้เวลา θ(m) เนื่องจากจะมีการเริ่มต้นด้วยค่าดีฟอลต์บางค่า จากนั้นจะต้องใช้เวลา θ(n) เพิ่มเติมในการคัดลอกจากอาร์เรย์เก่าไปยังอาร์เรย์ใหม่ ดังนั้นการดำเนินการจะใช้เวลา θ(m + n) การดำเนินการนี้จะเกิดขึ้นเมื่ออาร์เรย์เต็ม และโดยปกติค่า m จะเหมือนกับ 2n ความซับซ้อนคือ θ(2n + n) =θ(3n) เทียบเท่ากับ θ(n) แต่การดำเนินการนี้ถือว่ามีราคาแพง อย่างไรก็ตาม การดำเนินการนี้จะถูกตัดจำหน่ายในการทำซ้ำในลำดับถัดไป n ครั้ง จากนั้นจึงเพิ่มเวลา θ(1) ต่อการวนซ้ำเท่านั้น ดังนั้นเราจึงสามารถเข้าใจได้ว่าขนาดอาร์เรย์ที่เพิ่มขึ้นในปัจจัยคงที่ไม่ได้ส่งผลเสียต่อความซับซ้อนเชิงซีมโทติก