อาร์เรย์ใน JavaScript สามารถแก้ไขได้ง่ายมากโดยการเพิ่มและลบรายการ ค่อนข้างปกปิดข้อเท็จจริงที่ว่าอาร์เรย์ภาษาส่วนใหญ่มีขนาดคงที่และต้องการการดำเนินการที่ซับซ้อนในการปรับขนาด ดูเหมือนว่า JavaScript ทำให้ง่ายต่อการเขียนโค้ดอาร์เรย์ที่มีประสิทธิภาพต่ำ สิ่งนี้นำไปสู่คำถาม:
ประสิทธิภาพใด (ในแง่ของความซับซ้อนของเวลา O ขนาดใหญ่) ที่ฉันสามารถคาดหวังได้จากการใช้งาน JavaScript เกี่ยวกับประสิทธิภาพของอาร์เรย์
ฉันคิดว่าการใช้งาน JavaScript ที่สมเหตุสมผลทั้งหมดมี O ขนาดใหญ่ดังต่อไปนี้
- การเข้าถึง - O (1)
- ต่อท้าย - O (n)
- ล่วงหน้า - O (n)
- การแทรก - O (n)
- การลบ - O (n)
- การแลกเปลี่ยน - O (1)
JavaScript ให้คุณเติมอาร์เรย์ล่วงหน้าตามขนาดที่กำหนดโดยใช้new Array(length)
ไวยากรณ์ (คำถามโบนัส: การสร้างอาร์เรย์ในลักษณะนี้ O (1) หรือ O (n)) นี่เป็นเหมือนอาร์เรย์ทั่วไปและหากใช้เป็นอาร์เรย์ที่มีขนาดล่วงหน้าสามารถอนุญาตให้ O (1) ต่อท้ายได้ หากมีการเพิ่มตรรกะบัฟเฟอร์แบบวงกลมคุณสามารถบรรลุ O (1) prepending หากใช้อาร์เรย์ที่ขยายแบบไดนามิก O (log n) จะเป็นกรณีเฉลี่ยสำหรับทั้งสองตัว
ฉันสามารถคาดหวังประสิทธิภาพที่ดีขึ้นสำหรับบางสิ่งมากกว่าสมมติฐานของฉันได้หรือไม่ ฉันไม่คาดหวังว่าจะมีการระบุไว้ในข้อกำหนดใด ๆ แต่ในทางปฏิบัติอาจเป็นไปได้ว่าการใช้งานที่สำคัญทั้งหมดใช้อาร์เรย์ที่ปรับให้เหมาะสมอยู่เบื้องหลัง มีการขยายอาร์เรย์แบบไดนามิกหรืออัลกอริธึมเพิ่มประสิทธิภาพอื่น ๆ ในที่ทำงานหรือไม่?
ปล
เหตุผลที่ฉันสงสัยคือฉันกำลังค้นคว้าอัลกอริทึมการเรียงลำดับซึ่งส่วนใหญ่ดูเหมือนว่าการต่อท้ายและการลบเป็นการดำเนินการ O (1) เมื่ออธิบาย O ขนาดใหญ่โดยรวมของพวกเขา
.length
แต่มันเกี่ยวกับมัน) อาร์เรย์ไม่แตกต่างจากอินสแตนซ์ Object ธรรมดามากนัก