ScholarGate
ผู้ช่วย

อาร์เรย์และรายการโยง

อาร์เรย์และรายการโยงเป็นสองวิธีพื้นฐานในการจัดเก็บลำดับขององค์ประกอบ: อาร์เรย์จะจัดเก็บองค์ประกอบในหน่วยความจำที่ต่อเนื่องกันเพื่อให้เข้าถึงด้วยดัชนีได้ในเวลาคงที่ ในขณะที่รายการโยงจะเชื่อมโยงองค์ประกอบเข้าด้วยกันผ่านพอยน์เตอร์เพื่อให้การแทรกและลบทำได้ง่าย

ค้นหาหัวข้อด้วย PaperMindเร็ว ๆ นี้Find papers & topics
Tools & resources
ดาวน์โหลดสไลด์
Learn & explore
วิดีโอเร็ว ๆ นี้

Definition

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

Scope

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

Core questions

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

Key concepts

  • หน่วยความจำต่อเนื่อง
  • การเข้าถึงด้วยดัชนี
  • การปรับขนาดอาร์เรย์แบบไดนามิก
  • รายการโยงแบบเดี่ยวและแบบคู่
  • สแตก (LIFO)
  • คิว (FIFO)
  • ต้นทุนถัวเฉลี่ย
  • ตำแหน่งแคช

Key theories

การเข้าถึงแบบสุ่มเทียบกับการเชื่อมโยงตามลำดับ
อาร์เรย์รองรับการเข้าถึงด้วยดัชนีแบบ O(1) แต่การแทรกหรือลบตรงกลางแบบ O(n) ในขณะที่รายการโยงรองรับการเชื่อมต่อแบบ O(1) เมื่อมีโหนด แต่การเข้าถึงตามตำแหน่งแบบ O(n) การเลือกที่เหมาะสมขึ้นอยู่กับการผสมผสานของการดำเนินการ
การเติบโตแบบถัวเฉลี่ยของอาร์เรย์แบบไดนามิก
อาร์เรย์แบบไดนามิกที่เพิ่มความจุเป็นสองเท่าเมื่อเต็มจะมีการคัดลอกแบบ O(n) เป็นครั้งคราว แต่จะถัวเฉลี่ยเป็น O(1) ต่อการผนวกตลอดลำดับของการดำเนินการใดๆ โดยใช้วิธีรวมหรือวิธีศักยภาพ

Clinical relevance

อาร์เรย์และรายการเป็นพื้นฐานของโปรแกรมเกือบทุกโปรแกรม: อาร์เรย์แบบไดนามิกใช้ในการสร้างชนิดรายการ/เวกเตอร์เริ่มต้นในภาษาโปรแกรมส่วนใหญ่ คิวเป็นพื้นฐานของการจัดตารางเวลาและการค้นหาแบบกว้าง สแตกเป็นพื้นฐานของการจัดการการเรียกใช้ฟังก์ชันและการประเมินนิพจน์ และการแลกเปลี่ยนระหว่างอาร์เรย์กับรายการเป็นการตัดสินใจออกแบบเชิงปฏิบัติทั่วไปที่ส่งผลต่อประสิทธิภาพ

History

อาร์เรย์เป็นหนึ่งในโครงสร้างข้อมูลแรกๆ ที่มีอยู่ในภาษาโปรแกรมแรกๆ และรายการโยงถูกนำมาใช้สำหรับการประมวลผลเชิงสัญลักษณ์และรายการ (โดยเฉพาะใน IPL ของ Newell, Shaw และ Simon และต่อมาคือ Lisp) ในช่วงปลายทศวรรษ 1950 การวิเคราะห์อย่างเป็นระบบของ Knuth ใน The Art of Computer Programming ได้สร้างการวิเคราะห์ที่เป็นมาตรฐานขึ้นมา

Key figures

  • Donald Knuth
  • Robert Sedgewick

Related topics

Seminal works

  • knuth1997vol1
  • cormen2009

Frequently asked questions

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

Methods for this concept

Related concepts