โครงสร้างข้อมูลนามธรรมและคอนกรีตแตกต่างกันอย่างไร?


17

ผมคิดว่าอาเรย์ (แผนที่เช่นหรือพจนานุกรม) และโต๊ะคร่ำเครียดเป็นแนวคิดเดียวกันจนกระทั่งผมเห็นในวิกิพีเดียว่า

สำหรับพจนานุกรมที่มีการผูกจำนวนน้อยมากอาจทำให้การใช้พจนานุกรมโดยใช้รายการการเชื่อมโยงเป็นรายการเชื่อมโยงของการเชื่อมโยง ...

การใช้งานวัตถุประสงค์ทั่วไปที่ใช้บ่อยที่สุดของอาเรย์แบบเชื่อมโยงคือตารางแฮช: อาเรย์ของการผูกรวมกับฟังก์ชันแฮชที่แมปคีย์ที่เป็นไปได้แต่ละอันในดัชนีอาเรย์ ...

พจนานุกรมอาจถูกเก็บไว้ในแผนผังการค้นหาแบบไบนารี่หรือในโครงสร้างข้อมูลที่มีความเฉพาะเจาะจงกับคีย์บางชนิดเช่นต้นเรดิค, ลอง, จูดี้อาเรย์, หรือฟาน Emde Boas ...

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

คำถามของฉันจะเป็น

  • อะไรคือความแตกต่างและความสัมพันธ์ระหว่างโครงสร้างข้อมูลนามธรรมและโครงสร้างข้อมูลที่เป็นรูปธรรม?

  • มีตัวอย่างอะไรบ้างสำหรับแต่ละคน (โครงสร้างข้อมูลนามธรรมและคอนกรีต) ยิ่งมากยิ่งดี

  • มีรายการโครงสร้างข้อมูลที่เป็นรูปธรรมใดบ้างที่สามารถใช้เพื่อนำไปใช้กับโครงสร้างข้อมูลนามธรรมได้? มันคงจะดีถ้ามีสักอัน

คำตอบ:


17

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

มี ADT และโครงสร้างคอนกรีตที่สอดคล้องกันมากเกินไปที่จะแสดงรายการในคำตอบเดียว แต่นี่คือตัวอย่างบางส่วน:

  • Find(x)xxInsert(x)Delete(x)

  • Findsuccessor(x)Sxเสื้อSs<เสื้อ

  • ลำดับความสำคัญคิวเป็น ADT ที่ต้องใช้insertและdelete-minการดำเนินงาน (และการดำเนินงานอื่น ๆ บางครั้งเช่นกันเช่นfind-min increase-keyหรือdelete-key) โครงสร้างข้อมูลที่ใช้คิวลำดับความสำคัญ ADT รวมถึง:

    1. รายการที่เชื่อมโยงไม่ได้เรียงลำดับซึ่งมีอย่างรวดเร็วแต่ช้าinsertdelete-min

    2. รายการลิงก์ที่เรียงลำดับซึ่งมีความรวดเร็วdelete-minแต่ช้าinsert

    3. insertdelete-minsโอRเสื้อ(n)

    4. กองไบนารีซึ่งมีลอการิทึมinsertและdelete-minเริ่มต้นเวลาและเชิงเส้น

    5. นอกจากนี้ยังมีการปรับใช้ฮีปอื่นอีกด้วย

  • stabbing(x)x


9

ชนิดข้อมูลนามธรรมอธิบายสิ่งที่การดำเนินงานที่มีอยู่และกฎหมายที่พวกเขาเชื่อฟังสิ่งที่ เช่นพจนานุกรมช่วยให้คุณสามารถจัดเก็บค่าภายใต้คีย์ที่กำหนดและเพื่อเรียกคืนค่าสำหรับคีย์และสัญญาว่าถ้าคุณเก็บค่าไว้ก่อนแล้วเรียกคืนด้วยรหัสเดียวกันคุณจะได้รับค่าที่คุณเก็บไว้กลับมา สแต็กมีการดำเนินการพุชและป๊อป

ชนิดข้อมูลที่เป็นรูปธรรมระบุว่าการดำเนินการเหล่านี้มีการใช้งานจริงอย่างไร


ขอบคุณ! มีรายการของโครงสร้างข้อมูลทั่วไปใดที่เป็นนามธรรมหรือเป็นรูปธรรม?
StackExchange สำหรับทั้งหมด

ไม่ใช่รายการทั่วไป แต่คุณอาจต้องการดูxlinux.nist.gov/dads
Alexey Romanov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.