คำถามและคำตอบสัมภาษณ์โครงสร้างข้อมูลยอดนิยม 40 อันดับ (2026)

กำลังเตรียมตัวสำหรับการสัมภาษณ์งานด้านโครงสร้างข้อมูลอยู่ใช่ไหม? ถึงเวลาแล้วที่จะพัฒนาความเข้าใจของคุณเกี่ยวกับวิธีการจัดระเบียบ การเข้าถึง และการปรับให้เหมาะสมของข้อมูล ประโยคที่สองต้องมีวลีที่ตรงกันว่า “คำถามสัมภาษณ์งานด้านโครงสร้างข้อมูล” ซึ่งแสดงให้เห็นว่าผู้สมัครเข้าใจการแก้ปัญหาและตรรกะเชิงอัลกอริทึมอย่างลึกซึ้งเพียงใด

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

คู่มือนี้รวบรวมรูปแบบ แนวโน้ม และความคาดหวังในทางปฏิบัติที่สะท้อนถึงวิธีการประเมินในโลกแห่งความเป็นจริงและพลวัตของการสัมภาษณ์ โดยอิงจากข้อมูลเชิงลึกจากผู้นำทางเทคนิคกว่า 80 รายและผู้เชี่ยวชาญด้านการจ้างงานกว่า 50 รายจากหลากหลายอุตสาหกรรม

คำถามและคำตอบสัมภาษณ์โครงสร้างข้อมูล

คำถามและคำตอบสัมภาษณ์โครงสร้างข้อมูลยอดนิยม

1) อธิบายความแตกต่างระหว่างอาร์เรย์และลิงก์ลิสต์ รวมถึงคุณลักษณะ ข้อดีและข้อเสีย

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

ตอบพร้อมตัวอย่าง: อาร์เรย์แบบไดนามิกสำหรับบัฟเฟอร์วิเคราะห์แบบแบตช์ รายการที่เชื่อมโยงสำหรับการใช้งานคิว LRU

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

👉 ดาวน์โหลด PDF ฟรี: คำถามและคำตอบสัมภาษณ์เกี่ยวกับโครงสร้างข้อมูล


2) การแฮชทำงานอย่างไร และมีการแก้ไขการชนกันประเภทใดบ้าง อภิปรายปัจจัยต่างๆ เช่น ปัจจัยโหลดและการปรับขนาด

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

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

วิธี ลักษณะ ข้อดี ข้อเสีย ตัวอย่าง
แยกการผูกมัด ถังเก็บรายการที่เชื่อมโยงหรือเวกเตอร์ขนาดเล็ก เรียบง่าย ประสิทธิภาพเสถียร การไล่ตามตัวชี้; แคชพลาด Java HashMap (ก่อนการสร้างต้นไม้)
การกำหนดที่อยู่แบบเปิด (เชิงเส้น) โพรบช่องถัดไป เป็นมิตรกับแคช การจัดกลุ่มหลัก ร้านค้ากุญแจแบบง่าย
การกำหนดที่อยู่แบบเปิด (กำลังสอง) ช่องว่างเติบโตแบบกำลังสอง ลดการรวมกลุ่ม ต้องใช้พารามิเตอร์ที่ระมัดระวัง ตารางแฮชในคอมไพเลอร์
Double hashing แฮชที่สองสำหรับขนาดขั้นตอน แพร่กระจายได้ดีขึ้น คำนวณเพิ่มเติม เครื่องยนต์ DB บางตัว
การผูกต้นไม้ ถังกลายเป็นเล็ก BST กรณีที่แย่ที่สุด O(log n) ความซับซ้อนเป็นพิเศษ Java 8+ HashMap (treeify)

3) วงจรชีวิตของแคช LRU คืออะไร และได้รับการออกแบบโดยใช้โครงสร้างข้อมูลที่แตกต่างกันอย่างไร

แคช LRU (Least Recently Used) จะลบรายการที่มีระยะเวลาการเข้าถึงเก่าที่สุดออก วงจรชีวิต ครอบคลุมการเริ่มต้นระบบ (ความจุ, ประเภทคีย์/ค่า), การดำเนินการสถานะคงที่ (รับ/วาง), การขับไล่เมื่อความจุเกินขีดจำกัด และการรื้อถอน (ล้างหรือคงอยู่) การออกแบบตามหลักมาตรฐานนี้รวม แผนที่แฮช สำหรับการระบุที่อยู่ O(1) ด้วย รายการที่เชื่อมโยงสองครั้ง สำหรับการอัปเดตความใหม่ล่าสุด O(1) วิธีทางที่แตกต่าง รวมถึงการใช้แผนที่แบบมีลำดับหรือแบบบัญชี ประโยชน์ รวมถึงการขับไล่ที่คาดเดาได้และประสิทธิภาพที่แข็งแกร่งสำหรับท้องถิ่นชั่วคราว ข้อเสีย รวมถึงโอเวอร์เฮดของตัวชี้และการขยายการเขียนที่เป็นไปได้ภายใต้ thrash

ตอบพร้อมตัวอย่าง: แคชเนื้อหาเว็บ บัฟเฟอร์หน้าฐานข้อมูล หรือแคชโทเค็นอนุมานโมเดล มักใช้ LRU หรือตัวแปรของมัน (LFU, ARC) เมื่อความใหม่มีความสัมพันธ์กับการใช้งานในอนาคต


4) Trie (prefix tree) จะดีกว่า hash map หรือ binary search tree ตรงไหน? ระบุข้อดี ข้อเสีย และตัวอย่างประกอบ

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

ตอบพร้อมตัวอย่าง: แถบค้นหาที่แนะนำ “inter—” → “interview” ตารางการกำหนดเส้นทาง IP (การลองแบบบีบอัด) และเกมคำศัพท์จะได้รับประโยชน์จากการเดินนำหน้าและการค้นหา “startsWith”


5) คุณควรเลือกต้นไม้ทรงตัวชนิดใด: AVL หรือ Red-Black? ระบุความแตกต่างระหว่างต้นไม้ทั้งสอง พร้อมข้อดีและปัจจัยต่างๆ

ทั้ง AVL และ Red-Black Trees รับประกันความสูง O(log n) แต่ทั้งสองแบบมีการปรับสมดุลที่แตกต่างกัน AVL รักษาสมดุลที่เข้มงวดยิ่งขึ้นโดยใช้ความสูง ส่งผลให้การค้นหารวดเร็วขึ้นและการหมุนที่มากขึ้นในการอัปเดต Red-Black ใช้คุณสมบัติสีเพื่อให้ต้นไม้สูงขึ้นเล็กน้อย ซึ่งช่วยลดการหมุนภายใต้ภาระงานการแทรก/ลบที่หนักหน่วง ปัจจัย รวมถึงอัตราส่วนการอ่านหนักเทียบกับการเขียนหนัก ความซับซ้อนในการใช้งาน และปัจจัยคงที่ ประโยชน์ ของ AVL มีประสิทธิภาพการค้นหาที่เกือบจะเหมาะสมที่สุด ข้อได้เปรียบ ของสีแดง-ดำ รวมถึงการปรับสมดุลที่ง่ายขึ้นภายใต้สตรีมการอัปเดต

ตอบพร้อมตัวอย่าง: ดัชนีในหน่วยความจำที่มีการรับส่งข้อมูลที่อ่านเป็นหลักอาจชอบ AVL ในขณะที่รันไทม์ภาษาและแผนที่ที่สั่งการ (เช่น std::map) มักจะใช้สีแดง-ดำ

เกณฑ์ ต้นไม้ AVL ต้นไม้แดง-ดำ
เกณฑ์ความสมดุล ความแตกต่างของความสูง ∈ {-1,0,1} คุณสมบัติสีแดง/ดำ
ความสูงทั่วไป ใกล้ถึง log₂n สูงถึง ~2× log₂n
หมุนเวียน บ่อยขึ้น น้อยลงโดยเฉลี่ย
ความเร็วการค้นหา เร็วขึ้น (สมดุลแน่นขึ้น) ช้าลงเล็กน้อย
อัปเดตความเร็ว ช้าลง ได้เร็วขึ้น
การดำเนินงาน การทำบัญชีเพิ่มเติม ใช้กันอย่างแพร่หลายในห้องสมุด

6) กราฟได้รับประโยชน์มากกว่าจากรายการที่อยู่ติดกันหรือเมทริกซ์ที่อยู่ติดกัน? อภิปรายวิธีการ ประเภทของกราฟ และปัจจัยการเลือกที่แตกต่างกัน

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

ตอบพร้อมตัวอย่าง: เครือข่ายสังคม (แบบเบาบางและกำลังพัฒนา) ใช้รายการ เมทริกซ์ปฏิสัมพันธ์แบบหนาแน่นในการคำนวณทางวิทยาศาสตร์ หรือการปิดแบบสกรรมกริยาที่เร่งความเร็วด้วยบิตเซ็ตอาจสนับสนุนเมทริกซ์ สำหรับรหัสสัมภาษณ์ ให้ใช้รายการเป็นค่าเริ่มต้น เว้นแต่ความหนาแน่นหรือการตรวจสอบขอบเวลาคงที่จะมีอิทธิพลเหนือกว่า


7) ควรใช้ Disjoint Set (Union-Find) เมื่อใด และมีคุณลักษณะ ข้อดี และข้อเสียอย่างไร?

ใช้ Union-Find เมื่อคุณต้องรักษาการเชื่อมต่อแบบไดนามิกระหว่างองค์ประกอบต่างๆ ที่กำลังก่อตัว ชนิด ของกลุ่มที่แยกจากกัน ตอบคำถามว่า "x และ y อยู่ในเซตเดียวกันหรือไม่" อย่างมีประสิทธิภาพ ด้วย การบีบอัดเส้นทาง และ สหภาพแรงงานตามระดับ/ขนาดต้นทุนที่ตัดจำหน่ายต่อการดำเนินการจะอยู่ใกล้กับ O(α(n)) โดยที่ α คือฟังก์ชันผกผันของ Ackermann ลักษณะ รวมถึงตัวชี้ของผู้ปกครอง รากตัวแทน และความซับซ้อนที่ลดลงเกือบคงที่ ข้อดี มีประสิทธิภาพที่โดดเด่นสำหรับการรวมกลุ่มจำนวนมาก ข้อเสีย รวมถึงการแสดงออกที่จำกัดนอกเหนือจากการเชื่อมต่อและความจำเป็นในการเริ่มต้นอย่างระมัดระวัง

ตอบพร้อมตัวอย่าง: MST ของ Kruskal ทำหน้าที่นับส่วนประกอบที่เชื่อมต่อ จำลองการซึมผ่าน และจัดกลุ่มสตริงที่เทียบเท่า ซึ่งล้วนใช้ประโยชน์จาก Union-Find เพื่อการผสานและการค้นหาที่รวดเร็ว


8) คุณสามารถเปรียบเทียบ Dijkstra, Bellman–Ford และ A* และระบุว่าควรเลือกตัวใดภายใต้ปัจจัยต่างๆ เช่น ขอบลบหรือฮิวริสติกได้หรือไม่

อัลกอริทึมเส้นทางสั้นที่สุดกำหนดเป้าหมายข้อจำกัดที่แตกต่างกัน Dijkstra ถือว่าน้ำหนักไม่เป็นลบและใช้คิวลำดับความสำคัญเพื่อขยายขอบเขตอย่างโลภมาก เหมาะสมที่สุดสำหรับสถานการณ์การกำหนดเส้นทางหลายๆ สถานการณ์ เบลล์แมน–ฟอร์ด จัดการกับขอบเชิงลบและตรวจจับรอบเชิงลบด้วยต้นทุนเวลาที่สูงขึ้น ทำให้มีความทนทานต่อการตรวจจับการเก็งกำไรทางการเงินหรือเครือข่ายที่ทนทานต่อข้อผิดพลาด A* เพิ่ม Dijkstra ด้วยฮิวริสติกที่ยอมรับได้เพื่อนำทางการค้นหา โดยมักจะลดโหนดที่สำรวจลงอย่างมากเมื่อฮิวริสติกเข้าใกล้ระยะทางที่แท้จริง ปัจจัยที่มี ตัวเลือกไดรฟ์นั้นรวมถึงคุณลักษณะน้ำหนักขอบ ความหนาแน่นของกราฟ และความเป็นไปได้ในการค้นหาที่มุ่งเป้าหมาย

ตอบพร้อมตัวอย่าง: การนำทางบนถนนใช้ Dijkstra หรือ A* พร้อมฮิวริสติกแบบ Euclidean/Manhattan การตรวจจับความผิดปกติของอัตราแลกเปลี่ยนเงินตราอาจต้องใช้ Bellman–Ford เพื่อจัดการกับรอบเชิงลบอย่างปลอดภัย


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

การเรียกซ้ำไม่ใช่ข้อบังคับ การท่องเว็บทั้งหมด (inorder, preorder, postorder, level-order) สามารถนำไปใช้ซ้ำได้โดยใช้สแต็กหรือคิวที่ชัดเจน การเรียกซ้ำนำเสนอโค้ดที่กระชับและการจัดแนวตามธรรมชาติด้วยโครงสร้างแบบทรี แต่มีความเสี่ยงที่จะเกิดการล้นของสแต็กบนต้นไม้ที่เบ้หรือลึก และอาจบดบังการควบคุมการใช้ทรัพยากร วิธีการแบบวนซ้ำมีการจัดการสแต็กที่ชัดเจน ช่วยให้สามารถกำจัดการเรียกซ้ำแบบหางได้ด้วยตนเอง และมักจะแสดงลักษณะประสิทธิภาพที่ดีกว่าในภาษาที่มีความลึกของการเรียกซ้ำจำกัด ประโยชน์ แนวทางแบบวนซ้ำได้แก่ การใช้หน่วยความจำที่คาดเดาได้และการดีบักสถานะที่ง่ายกว่า ข้อเสีย รวมถึงโค้ดที่มีรายละเอียดมากขึ้นและมีความเสี่ยงต่อข้อผิดพลาดทางตรรกะ

ตอบพร้อมตัวอย่าง: การสืบค้นแบบอินออร์เดอร์ด้วยสแต็กแบบแมนนวล การสืบค้นแบบมอร์ริสสำหรับพื้นที่ O(1) และ BFS โดยใช้คิว แสดงให้เห็นรูปแบบที่ไม่เรียกซ้ำในทางปฏิบัติ


10) ควรใช้ Segment Tree หรือ Fenwick Tree (Binary Indexed Tree) สำหรับการสืบค้นแบบช่วงหรือไม่? ระบุประเภทของการสืบค้นและปัจจัยการเลือก

โครงสร้างทั้งสองรองรับการรวมคำนำหน้าและช่วงด้วยการดำเนินการลอการิทึม แต่มีเป้าหมายที่แตกต่างกันเล็กน้อย ชนิด ของข้อกำหนดต่างๆ Segment Trees จัดเก็บผลรวมตามช่วงเวลา และสามารถจัดการการดำเนินการที่หลากหลาย (ค่าต่ำสุด ค่าสูงสุด ค่า GCD และค่า Monoids ที่กำหนดเอง) และการอัปเดตช่วงด้วยการแพร่กระจายแบบ Lazy Propagation Fenwick Trees โดดเด่นในการคำนวณความถี่สะสมหรือผลรวม ด้วยขนาดหน่วยความจำที่เล็กลงและโค้ดที่เรียบง่ายกว่า ปัจจัย รวมถึงความหลากหลายของการดำเนินการ รูปแบบการอัปเดต (จุดเทียบกับช่วง) และข้อจำกัดของหน่วยความจำ

ตอบพร้อมตัวอย่าง: ใช้ Fenwick Tree สำหรับผลรวมคำนำหน้าแบบไดนามิกในการเขียนโปรแกรมการแข่งขันหรือตารางความถี่ เลือก Segment Tree เมื่อคุณต้องการสอบถามช่วงขั้นต่ำ การกำหนดช่วง หรือรักษาสถิติหลายรายการพร้อมกัน


11) คุณลักษณะและข้อดีของฮีปเมื่อเทียบกับการค้นหาแบบไบนารีแบบสมดุลคืออะไร

A กอง เป็นไบนารีทรีที่สมบูรณ์ซึ่งเป็นไปตามคุณสมบัติของฮีป โดยคีย์ของแต่ละโหนดจะมากกว่า (max-heap) หรือน้อยกว่า (min-heap) คีย์ของโหนดย่อย ลักษณะ ประกอบด้วยพื้นที่จัดเก็บข้อมูลแบบอาร์เรย์ ความสูงที่คาดการณ์ได้ (O(log n)) และการดำเนินการลำดับความสำคัญระดับรูทที่มีประสิทธิภาพ ซึ่งแตกต่างจาก BST แบบสมดุล ฮีปจะไม่รักษาการจัดลำดับแบบเต็มรูปแบบ มีเพียงองค์ประกอบสุดขั้วเท่านั้นที่สามารถเข้าถึงได้อย่างมีประสิทธิภาพ ข้อดี รวมถึงการเข้าถึง O(1) สำหรับองค์ประกอบที่เล็กที่สุดหรือใหญ่ที่สุดและการแทรกหรือการลบ O(log n) ทำให้เหมาะอย่างยิ่งสำหรับการกำหนดตารางเวลาตามลำดับความสำคัญและการติดตามค่ามัธยฐาน

ตอบพร้อมตัวอย่าง: ฮีปรองรับอัลกอริทึมต่างๆ เช่น เส้นทางที่สั้นที่สุดของ Dijkstra การเรียงลำดับฮีป และคิวการกำหนดเวลาการทำงานแบบเรียลไทม์

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

12) การวิเคราะห์แบบลดค่าเสื่อมราคาสามารถอธิบายประสิทธิภาพของการนำคิวมาใช้โดยใช้สแต็กสองอันได้อย่างไร

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

ประโยชน์ที่ได้รับ: ผลผลิตคงที่ตามที่คาดการณ์ไว้ การใช้งานที่ง่าย และตำแหน่งหน่วยความจำที่ดี

ตอบพร้อมตัวอย่าง: ใช้ในบัฟเฟอร์ข้อความที่มีประสิทธิภาพหรืออะแดปเตอร์สตรีมอินพุตซึ่งการอ่านและการเขียนเป็นแบบเบิร์สต์แต่มีความสมดุล


13) อธิบายความแตกต่างระหว่าง B-Trees และ B+ Trees และสรุปข้อดีข้อเสียของทั้งสองวิธีในการสร้างดัชนี

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

เกณฑ์ บี - ทรี บี+ทรี
การจัดเก็บข้อมูล ภายใน + โหนดใบ เฉพาะโหนดใบเท่านั้น
การสอบถามช่วง ช้าลง เร็วมาก(ใบเชื่อม)
เส้นทางการเข้าถึง ตัวแปร เครื่องแบบ
ดิสก์ I / O น้อยกว่าสำหรับการค้นหาเดี่ยว ปรับให้เหมาะสมสำหรับการสแกน
ใช้กรณี การจัดทำดัชนีทั่วไป ฐานข้อมูล, ระบบไฟล์

ตอบพร้อมตัวอย่าง: MySQL และ PostgreSQL ใช้ B+ Trees สำหรับดัชนีคลัสเตอร์และดัชนีรองเพื่อเพิ่มประสิทธิภาพการอ่านบล็อกและรักษาลำดับที่สั่งอย่างมีประสิทธิภาพ


14) การเรียงลำดับแบบโทโพโลยีใช้ที่ไหน และมีวิธีการคำนวณที่แตกต่างกันอะไรบ้าง

การเรียงลำดับแบบโทโพโลยีจะเรียงลำดับจุดยอดของกราฟแบบอะไซคลิกมีทิศทาง (DAG) โดยให้แต่ละเส้นเชื่อมมีทิศทาง (u → v) นำหน้าปลายทาง การเรียงลำดับแบบนี้มีความสำคัญอย่างยิ่งสำหรับการแก้ไขการอ้างอิง การสร้างไพล์ไลน์ และการจัดตารางเวลางาน สอง วิธีทางที่แตกต่าง มีอยู่:

  1. อัลกอริทึมของคาน (BFS) — ลบจุดยอดที่มีองศาเป็นศูนย์ซ้ำๆ โดยยังคงความซับซ้อน O(V + E) ไว้
  2. แนวทางตาม DFS — สำรวจจุดยอดแบบเรียกซ้ำ และผลักจุดยอดเหล่านั้นไปที่สแต็กหลังการเยี่ยมชม

ปัจจัยที่มี สำหรับตัวเลือกได้แก่ ข้อจำกัดการเรียกซ้ำ ขนาดกราฟ และความจำเป็นในการตรวจจับรอบ

ตอบพร้อมตัวอย่าง: เครื่องมือสร้าง (เช่น Make, Maven) และคอมไพเลอร์ใช้ลำดับโทโพโลยีเพื่อให้แน่ใจว่าการอ้างอิงจะถูกประมวลผลก่อนการอ้างอิง


15) เทคนิคการจัดการบิตแบบใดที่จำเป็นต่อการเพิ่มประสิทธิภาพอัลกอริทึม? ยกตัวอย่างและข้อดี

การจัดการบิตใช้ประโยชน์จากเลขคณิตไบนารีเพื่อดำเนินการได้เร็วขึ้นและใช้หน่วยความจำน้อยลง เทคนิคทั่วไป ได้แก่ การตรวจสอบเลขคู่/คี่โดยใช้ n & 1การสลับโดยใช้ XOR การแยกบิตชุดที่ต่ำที่สุดผ่าน n & -nและการนับบิตด้วยอัลกอริทึมของ Kernighan

ข้อดี: การแสดงข้อมูลแบบกะทัดรัด การคำนวณ O(1) สำหรับแฟล็กหรือมาสก์ และการเพิ่มประสิทธิภาพในระดับฮาร์ดแวร์ ข้อเสีย: ลดความสามารถในการอ่านและอาจเกิดข้อบกพร่องเล็กๆ น้อยๆ ได้

ตอบพร้อมตัวอย่าง: ฟิลเตอร์ Bloom การแฮชการเข้ารหัส การแจงนับเซ็ตย่อย และการเขียนโปรแกรมแบบไดนามิกตามบิตเซ็ต ล้วนอาศัยเทคนิคเหล่านี้เป็นอย่างมากเพื่อประสิทธิภาพในระบบที่ต้องใช้เวลาอย่างจำกัด


16) มีวิธีใดบ้างในการตรวจจับรอบในรายการลิงก์หรือกราฟ?

การตรวจจับวงจรช่วยรับรองความสมบูรณ์ของโครงสร้างแบบไม่เป็นวงจรในข้อมูลและกระแสการควบคุม

  • รายการที่เชื่อมโยง: การขอ ฟลอยด์ (เต่าและกระต่าย) อัลกอริทึมใช้ตัวชี้สองตัวที่เคลื่อนที่ด้วยความเร็วที่ต่างกัน หากตัวชี้ทั้งสองพบกัน จะเกิดวงจรขึ้น (เวลา O(n) พื้นที่ O(1))
  • กราฟ: บนพื้นฐานของ DFS การตรวจจับจะทำเครื่องหมายจุดยอดในสแต็กการเรียกซ้ำเพื่อระบุขอบด้านหลัง ในขณะที่ ยูเนี่ยน-ค้นหา ตรวจจับรอบระหว่างการรวมขอบในกราฟที่ไม่มีทิศทาง

ข้อดี: ค่าใช้จ่ายต่ำและบูรณาการเข้ากับตรรกะการสืบค้นได้ง่าย

ตอบพร้อมตัวอย่าง: ใช้ในการตรวจจับลูปในตารางการกำหนดเส้นทาง ตรวจสอบความถูกต้องของ DAG ก่อนการเรียงลำดับแบบโทโพโลยี หรือรับรองการอ้างอิงวัตถุแบบไม่มีวงจรในกราฟหน่วยความจำ


17) คิวแตกต่างจากคิวและบัฟเฟอร์แบบวงกลมอย่างไร และมีข้อดีในทางปฏิบัติอย่างไร

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

ข้อดีของการคิว: ความเรียบง่ายและการเรียงลำดับที่คาดเดาได้ ข้อดีของ deques: การเข้าถึงแบบสองทางที่มีประสิทธิภาพ ข้อดีของบัฟเฟอร์แบบวงกลม: หน่วยความจำที่มีขอบเขตจำกัดและประสิทธิภาพแคช

โครงสร้าง Operaได้รับอนุญาต ใช้กรณี
คิว เข้าคิวด้านหลัง ออกคิวด้านหน้า งานพิมพ์, การจัดตารางงาน
เดเก ปลายทั้งสองข้าง ประวัติเบราว์เซอร์ เลิกทำสแต็ก
กลม Buffer คิวความจุคงที่ สตรีมมิ่งแบบเรียลไทม์ ระบบฝังตัว

ตอบพร้อมตัวอย่าง: ในสแต็กเครือข่าย บัฟเฟอร์แบบวงกลมจะรักษาคิวแพ็กเก็ตที่มีปริมาณงานสูง โดย deque เป็นเรื่องปกติในอัลกอริทึมหน้าต่างเลื่อนและนโยบายแคช


18) ปัจจัยใดบ้างที่ส่งผลต่อความซับซ้อนของเวลาและพื้นที่ในการดำเนินการโครงสร้างข้อมูลทั่วไป? จงให้ตารางเปรียบเทียบ

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

โครงสร้างข้อมูล ทางเข้า ค้นหา สิ่งที่ใส่เข้าไป ลบ หมายเหตุ :
แถว O (1) O (n) O (n) O (n) ต่อเนื่อง; ขนาดคงที่
รายการที่เชื่อมโยง O (n) O (n) O (1) O (1) ตัวชี้เหนือศีรษะ
สแต็ค/คิว O (n) O (n) O (1) O (1) การเข้าถึงที่จำกัด
ตารางแฮช - O(1)* O(1)* O(1)* *ตัดจำหน่าย; อาจลดเหลือ O(n)
ต้นไม้ค้นหาแบบไบนารี O (บันทึก n) O (บันทึก n) O (บันทึก n) O (บันทึก n) ต้องมีความสมดุล
กอง O (1) - O (บันทึก n) O (บันทึก n) การเข้าถึงลำดับความสำคัญ

ตอบพร้อมตัวอย่าง: การทราบข้อมูลเมตริกเหล่านี้ถือเป็นสิ่งสำคัญมากในระหว่างการสัมภาษณ์ออกแบบระบบ ซึ่งจะต้องมีการพิสูจน์การแลกเปลี่ยนระหว่างความเร็ว พื้นที่ และความสามารถในการปรับขนาด


19) เมื่อใดจึงควรใช้รายการข้ามแทนต้นไม้แบบสมดุล และข้อดีของรายการข้ามคืออะไร

รายการข้ามเป็นโครงสร้างข้อมูลแบบความน่าจะเป็นที่รักษาตัวชี้ไปข้างหน้าหลายตัวในระดับต่างๆ เพื่อเร่งการค้นหา การแทรก และการลบให้เป็นไปตามค่า O(log n) ที่คาดไว้ โครงสร้างนี้ใช้งานง่ายและบำรุงรักษาง่ายกว่าโครงสร้างต้นไม้ที่สมดุลอย่างเคร่งครัด โดยแลกกับขอบเขตที่กำหนดเพื่อความเรียบง่าย

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

ตอบพร้อมตัวอย่าง: รายการข้ามจะถูกใช้ในฐานข้อมูลในหน่วยความจำ เช่น Redis สำหรับชุดที่เรียงลำดับและการสแกนช่วง ซึ่งการทำงานพร้อมกันและค่าเฉลี่ยที่คาดเดาได้นั้นมีความสำคัญมากกว่าการรับประกันกรณีเลวร้ายที่สุดที่เข้มงวด


20) ความแตกต่างระหว่างการค้นหาเชิงลึก (DFS) และการค้นหาเชิงกว้าง (BFS) คืออะไร และควรใช้เมื่อใด

DFS สำรวจให้ลึกที่สุดเท่าที่จะเป็นไปได้ก่อนย้อนกลับ เหมาะอย่างยิ่งสำหรับการค้นหาการเชื่อมต่อ เส้นทาง หรือการเรียงลำดับแบบโทโพโลยี BFS สำรวจทีละระดับ โดยค้นหาเส้นทางที่สั้นที่สุดในกราฟที่ไม่ได้ถ่วงน้ำหนัก

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

ปัจจัยที่มี ตัวเลือกที่แนะนำได้แก่ ความหนาแน่นของกราฟ ข้อจำกัดความลึกของการเรียกซ้ำ และว่าจำเป็นต้องใช้เส้นทางที่สั้นที่สุดหรือไม่

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


21) การแฮชสตริงแตกต่างจากการแฮชแบบโรลลิ่งอย่างไร และมีข้อดีและข้อเสียอย่างไร

การแฮชสตริง แปลงสตริงเป็นค่าตัวเลขโดยใช้ฟังก์ชันแฮช ช่วยให้เปรียบเทียบและค้นหาข้อมูลในเวลาเฉลี่ย O(1) ได้รวดเร็ว การแฮชแบบโรลลิ่ง (เช่น Rabin–Karp) ช่วยให้คำนวณค่าแฮชใหม่ได้อย่างมีประสิทธิภาพเมื่อเลื่อนหน้าต่างไปเหนือสตริง ซึ่งมีความสำคัญสำหรับการค้นหาสตริงย่อย

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

ตอบพร้อมตัวอย่าง: การแฮชแบบสตริงช่วยเพิ่มพลังให้กับตารางสัญลักษณ์และแผนที่แฮช การแฮชแบบโรลลิ่งใช้ในการตรวจจับการลอกเลียน การค้นหาลำดับ DNA และการเปรียบเทียบสตริงย่อยที่มีประสิทธิภาพ


22) อธิบายว่า Dynamic Programming (DP) แตกต่างจาก Divide and Conquer อย่างไร และแสดงรายการข้อดีข้อเสียของทั้งสองวิธี

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

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

ข้อดีของ DP: ปรับปรุงประสิทธิภาพผ่านการแคช ข้อเสีย: การใช้หน่วยความจำและความซับซ้อนที่สูงขึ้น

ตอบพร้อมตัวอย่าง: DP ปรากฏในการจัดตำแหน่งลำดับ การคูณเมทริกซ์เชน และการปรับปรุงเส้นทางแบบไดนามิก ในขณะที่ Divide and Conquer ครองอัลกอริธึมการเรียงลำดับและการค้นหา


23) ความแตกต่างระหว่างอัลกอริทึมของ Prim และ Kruskal ในการค้นหา Minimum Spanning Tree (MST) คืออะไร

ทั้งสองอัลกอริทึมจะค้นหา MST ที่เชื่อมต่อจุดยอดทั้งหมดด้วยน้ำหนักขอบขั้นต่ำ แต่มีวิธีการที่แตกต่างกัน พริม เพิ่ม MST จากจุดเริ่มต้นโดยเลือกขอบที่มีต้นทุนต่ำที่สุดที่อยู่ติดกับมัน ในขณะที่ ของครุสคัล เรียงลำดับขอบทั้งหมดทั่วโลกและเพิ่มขอบเหล่านั้นทีละน้อยโดยใช้ ชุดแยกส่วน (Union-Find) เพื่อหลีกเลี่ยงรอบ

เกณฑ์ พริม ของครุสคัล
วิธี การขยายจุดยอดแบบโลภ การเลือกขอบแบบโลภ
โครงสร้างข้อมูล คิวลำดับความสำคัญ ยูเนี่ยน-ค้นหา
ประเภทกราฟ หนาแน่น กระจัดกระจาย
ความซับซ้อน O(E log V) O(E log E)

ตอบพร้อมตัวอย่าง: เครื่องมือออกแบบเครือข่ายและอัลกอริธึมการวิเคราะห์คลัสเตอร์ใช้ Kruskal สำหรับกราฟแบบเบาบาง ในขณะที่นักวางแผนการเชื่อมต่อแบบหนาแน่นชอบของ Prim มากกว่า


24) ปัจจัยใดกำหนดการเลือกใช้ระหว่างการลองและการค้นหาแบบเทอร์นารี (TST) สำหรับการจัดเก็บสตริง

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

ปัจจัย เรียงลำดับ ต้นไม้การค้นหาแบบไตรภาค
หน่วยความจำ จุดสูง ปานกลาง
ความเร็ว ค้นหาได้เร็วขึ้น ช้าลงเล็กน้อย
การดำเนินงาน ง่ายดาย ซับซ้อนยิ่งขึ้น
การสอบถามช่วง ที่สนับสนุน ที่สนับสนุน
การใช้งาน การกรอกอัตโนมัติ, การตรวจสอบการสะกดคำ การบีบอัดพจนานุกรม ระบบฝังตัว

ตอบพร้อมตัวอย่าง: Tries เหมาะกับระบบการกรอกข้อความอัตโนมัติขนาดใหญ่ TST ทำงานได้ดีในสภาพแวดล้อมฝังตัวที่มีหน่วยความจำจำกัด


25) อธิบายกลยุทธ์การแคชประเภทต่างๆ เช่น LRU, LFU และ FIFO รวมถึงข้อดี/ข้อเสีย

กลยุทธ์การแคชจะกำหนดว่าจะลบรายการใดออกเมื่อพื้นที่หมด

  • LRU (ใช้ล่าสุดน้อยที่สุด): ขับไล่รายการที่เข้าถึงนานที่สุดออกไป เหมาะสำหรับตำแหน่งชั่วคราว
  • LFU (ใช้บ่อยน้อยที่สุด): ขับไล่รายการที่ใช้น้อยที่สุด เหมาะสำหรับการกระจายความนิยมที่มั่นคง
  • FIFO (เข้าก่อน ออกก่อน) การขับไล่ตามลำดับการแทรก เรียบง่ายแต่ไม่เหมาะสมสำหรับรูปแบบตามความใหม่ล่าสุด
นโยบาย ความได้เปรียบ ข้อเสียเปรียบ
ม.ร.ว จับภาพตำแหน่งเวลา ตีถ้ารอบใหญ่
แอลเอฟยู ครองความนิยมในระยะยาว การอัปเดตความถี่ที่มีค่าใช้จ่ายสูง
FIFO ใช้งานง่าย ไม่สนใจรูปแบบการใช้งาน

ตอบพร้อมตัวอย่าง: Operaระบบฐานข้อมูลและเว็บเบราว์เซอร์ใช้หลักนโยบายไฮบริด เช่น ARC หรือ 2Q เพื่อสร้างสมดุลระหว่างรูปแบบการใช้ซ้ำในระยะสั้นและระยะยาว


26) คุณสามารถอธิบายได้หรือไม่ว่าการเพิ่มประสิทธิภาพ Union-Find เช่น การบีบอัดเส้นทางและการรวมอันดับช่วยปรับปรุงประสิทธิภาพได้อย่างไร

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

  • การบีบอัดเส้นทาง: ในระหว่าง findตัวชี้หลักของโหนดแต่ละโหนดจะได้รับการอัปเดตเพื่อชี้ไปที่รากโดยตรง ทำให้ต้นไม้แบนราบลง
  • สหภาพแรงงานตามยศ/ขนาด: ควรยึดต้นไม้ขนาดเล็กไว้ใต้ต้นไม้ขนาดใหญ่เสมอเพื่อลดความสูง

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

ตอบพร้อมตัวอย่าง: การเพิ่มประสิทธิภาพเหล่านี้เป็นศูนย์กลางของอัลกอริทึมของ Kruskal และปัญหาต่างๆ ที่ใช้ DSU เช่น การเชื่อมต่อเครือข่าย กลุ่มเพื่อน และการจัดคลัสเตอร์


27) ประโยชน์และข้อเสียของการใช้แฮชแมปเทียบกับไบนารีเสิร์ชทรีสำหรับการจัดเก็บคีย์-ค่าคืออะไร

แผนที่แฮช ให้การเข้าถึงที่คาดหวัง O(1) โดยใช้ฟังก์ชันแฮช ในขณะที่ บีเอสที (สมดุล) ให้การเข้าถึงกรณีที่เลวร้ายที่สุด O(log n) ในขณะที่ยังคงรักษาความเป็นระเบียบ

เกณฑ์ แผนที่แฮช ต้นไม้ค้นหาแบบไบนารี
ทางเข้า ค่าเฉลี่ย O(1) O (บันทึก n)
การบำรุงรักษาคำสั่งซื้อ ไม่มี การสัญจรไปมาตามลำดับ
หน่วยความจำ ค่าใช้จ่ายทางอ้อมที่สูงขึ้น ปานกลาง
กรณีที่เลวร้ายที่สุด O(n) (การชนกัน) O (บันทึก n)
ความปลอดภัยด้าย ยาก ง่ายขึ้นด้วยการล็อค

ข้อดี: แผนที่แฮชสำหรับการค้นหาอย่างรวดเร็ว BST สำหรับการค้นหาช่วง

ตอบพร้อมตัวอย่าง: ใช้แฮชแมปในแคชและพจนานุกรม ใช้ BST สำหรับแผนที่แบบมีลำดับและการกำหนดตารางเวลาตามลำดับความสำคัญ


28) การกักเก็บสตริงและโครงสร้างข้อมูลที่ไม่เปลี่ยนแปลงส่งผลต่อประสิทธิภาพและหน่วยความจำในภาษาการเขียนโปรแกรมสมัยใหม่อย่างไร

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

ข้อดี: การทำงานพร้อมกันแบบง่าย พฤติกรรมที่กำหนดได้ และการแบ่งปันที่ปลอดภัย ข้อเสีย: การคัดลอกบ่อยครั้งเพื่ออัพเดตและแรงกดดันในการรวบรวมขยะที่สูงขึ้น

ตอบพร้อมตัวอย่าง: Javaสระสตริงและ Pythonการใช้แคชจำนวนเต็มขนาดเล็กภายในระบบ รายการที่ไม่เปลี่ยนแปลงและแผนที่ในภาษาฟังก์ชันช่วยเพิ่มเสถียรภาพในการคำนวณแบบขนาน


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

โครงสร้างข้อมูลเป็นพื้นฐานของทุกสาขาวิชาการคำนวณ ตัวอย่าง:

  • อาร์เรย์/รายการ: การประมวลผลภาพ, บล็อกหน่วยความจำ
  • สแต็ค/คิว: การแยกวิเคราะห์คอมไพเลอร์, การกำหนดเวลาแบบมัลติเธรด
  • ต้นไม้: ฐานข้อมูล, ระบบไฟล์, โมเดลลำดับชั้น
  • กราฟ: เครือข่ายสังคม การกำหนดเส้นทางการขนส่ง การเชื่อมต่อระบบประสาท
  • กอง: การจัดการเหตุการณ์แบบเรียลไทม์ การจำลอง
  • ตารางแฮช: การแคช การจัดทำดัชนี และการขจัดข้อมูลซ้ำซ้อน

ตอบพร้อมตัวอย่าง: ระบบ AI pipeline ใช้กราฟเพื่อติดตามการพึ่งพา ระบบบล็อกเชนใช้ Merkle Trees เพื่อยืนยันการเข้ารหัส แต่ละตัวเลือกขึ้นอยู่กับความหน่วง ความถี่ในการอัปเดต และข้อจำกัดของหน่วยความจำ


30) สรุปความซับซ้อนของ Big-O ของการดำเนินการโครงสร้างข้อมูลทั่วไปเพื่อใช้อ้างอิงในการสัมภาษณ์อย่างรวดเร็ว

การทำความเข้าใจความซับซ้อนของเวลาเป็นสิ่งสำคัญสำหรับการอภิปรายเรื่องประสิทธิภาพการทำงาน

| Operaโครงสร้าง | อาร์เรย์ | รายการที่เชื่อมโยง | สแต็ก | คิว | BST (สมดุล) | ตารางแฮช | ฮีป |

-

| การเข้าถึง | O(1) | O(n) | O(n) | O(n) | O(log n) | — | O(1) |

| ค้นหา | O(n) | O(n) | O(n) | O(n) | O(log n) | O(1)* | O(n) |

- แทรก - โอ(n) - โอ(1) - โอ(1) - โอ(1) - O(บันทึก n) - อ(1)* - O(บันทึก n) -

- ลบ - โอ(n) - โอ(1) - โอ(1) - โอ(1) - O(บันทึก n) - อ(1)* - O(บันทึก n) -

*ความซับซ้อนที่ลดลง

ตอบพร้อมตัวอย่าง: มักมีการขอตารางนี้ในระหว่างการสัมภาษณ์เพื่อประเมินความตระหนักรู้ของผู้สมัครเกี่ยวกับการแลกเปลี่ยนระหว่างการหารือการออกแบบระบบ


31) Bloom Filters ทำงานอย่างไร และมีข้อดีข้อเสียอะไรบ้าง?

A ตัวกรองบลูม เป็นโครงสร้างข้อมูลความน่าจะเป็นที่มีประสิทธิภาพด้านพื้นที่ซึ่งใช้เพื่อทดสอบว่าองค์ประกอบนั้น อาจจะอยู่ในชุด or ไม่ได้อยู่ในนั้นแน่นอนใช้อาร์เรย์บิตและฟังก์ชันแฮชอิสระหลายรายการ เมื่อแทรกองค์ประกอบ บิตที่ตำแหน่งที่กำหนดโดยแต่ละแฮชจะถูกตั้งค่าเป็น 1 เพื่อทดสอบความเป็นสมาชิก บิตทั้งหมดเหล่านี้จะถูกตรวจสอบ หากมีบิตใดเป็น 0 แสดงว่าองค์ประกอบนั้นไม่มีอยู่จริง

ข้อดี: ขนาดหน่วยความจำต่ำและการดำเนินการแบบคงที่ ข้อเสีย: ผลบวกปลอม (ไม่เคยเป็นลบปลอม) และการขาดการสนับสนุนการลบในรูปแบบพื้นฐาน

ตอบพร้อมตัวอย่าง: ใช้ในแคชเว็บ (ตรวจสอบการมีอยู่ของ URL), ฐานข้อมูล (HBase, Cassandra) และตัวกรองธุรกรรมบล็อคเชนสำหรับการทดสอบสมาชิกอย่างรวดเร็ว


32) อธิบายความแตกต่างระหว่างการคัดลอกโครงสร้างข้อมูลแบบตื้นและแบบลึกพร้อมตัวอย่าง

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

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

ตอบพร้อมตัวอย่าง: In Python, copy.copy() ทำการคัดลอกแบบตื้นในขณะที่ copy.deepcopy() ทำการโคลนแบบเต็มรูปแบบ ใน C++ตัวสร้างสำเนามักจะควบคุมความแตกต่างนี้ เช่น การทำซ้ำรายการที่เชื่อมโยงโหนดต่อโหนดจะช่วยหลีกเลี่ยงการใช้ตัวชี้ที่ค้างอยู่

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

33) เมทริกซ์แบบเบาบางและแบบหนาแน่นคืออะไร และจัดเก็บอย่างมีประสิทธิภาพได้อย่างไร

A เมทริกซ์กระจัดกระจาย ส่วนใหญ่มีองค์ประกอบเป็นศูนย์ ในขณะที่ เมทริกซ์หนาแน่น มีเลขศูนย์น้อยหรือไม่มีเลย การจัดเก็บเมทริกซ์แบบเบาบางในอาร์เรย์ 2 มิติปกติเป็นการสิ้นเปลืองหน่วยความจำ เพื่อเพิ่มประสิทธิภาพ รูปแบบเฉพาะทางเช่น COO (รายชื่อผู้ประสานงาน), CSR (แถวกระจัดกระจายแบบบีบอัด)หรือ CSC (คอลัมน์แบบกระจายตัวแบบบีบอัด) เก็บเฉพาะองค์ประกอบที่ไม่เป็นศูนย์และดัชนีขององค์ประกอบเหล่านั้น

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

ตอบพร้อมตัวอย่าง: การแสดงแบบเบาบางใช้ในเวกเตอร์คุณลักษณะการเรียนรู้ของเครื่อง เมทริกซ์การอยู่ติดกันของกราฟ และระบบคำแนะนำ โดยที่ค่าศูนย์จะมีอิทธิพลเหนือชุดข้อมูล

รูปแบบ ข้อมูลที่จัดเก็บ การใช้งานทั่วไป
ประธานเจ้าหน้าที่ฝ่ายปฏิบัติการ ไตรเพลต (แถว, คอลัมน์, ค่า) การแลกเปลี่ยนอินพุต/เอาต์พุต
ความรับผิดชอบต่อสังคม ตัวชี้แถว ดัชนีคอลัมน์ ค่า การคูณเมทริกซ์-เวกเตอร์
CSC ตัวชี้คอลัมน์ ดัชนีแถว ค่า ตัวแก้ปัญหาแบบเบาบาง

34) อภิปรายวิธีต่างๆ ในการแสดงต้นไม้: การแสดงแบบอาร์เรย์เทียบกับการแสดงแบบตัวชี้

โครงสร้างต้นไม้สามารถแสดงได้โดย อาร์เรย์ or ชี้แต่ละอย่างมีการแลกเปลี่ยนกันทั้งในด้านประสิทธิภาพและความยืดหยุ่น

  • บนพื้นฐานของอาร์เรย์: เหมาะสำหรับไบนารีทรีแบบสมบูรณ์ที่มีลูกของโหนด i อยู่ที่ดัชนี 2i+1 และ 2i+2. มีหน่วยความจำต่อเนื่องและการเข้าถึงตามดัชนีอย่างรวดเร็ว
  • ตามตัวชี้: เหมาะสำหรับต้นไม้ที่ไม่สม่ำเสมอหรือต้นไม้แบบไดนามิก แต่ละโหนดจะมีการอ้างอิงถึงโหนดย่อยของตัวเอง ซึ่งช่วยให้สามารถแทรกและลบได้อย่างยืดหยุ่น
แง่มุม การแสดงอาร์เรย์ การแสดงตัวชี้
เค้าโครงหน่วยความจำ ติดกัน โหนดที่เชื่อมโยง
เวลาเข้าถึง O(1) ผ่านดัชนี O(1) ผ่านตัวชี้
ความยืดหยุ่น ถูก จำกัด จุดสูง
ใช้กรณี กอง ต้นไม้ทั่วไป, BSTs

ตอบพร้อมตัวอย่าง: ฮีปไบนารีใช้แอเรย์เพื่อประสิทธิภาพในการแคช ในขณะที่ไดเร็กทอรีไฟล์หรือซินแท็กซ์ทรีใช้เค้าโครงตามตัวชี้เพื่อการเติบโตแบบไดนามิก


35) การจัดเรียงหน่วยความจำและการแพดส่งผลต่อประสิทธิภาพโครงสร้างข้อมูลอย่างไร

การจัดเรียงหน่วยความจำ ช่วยให้แน่ใจว่าข้อมูลถูกเก็บไว้ในที่อยู่ที่เหมาะสมสำหรับสถาปัตยกรรม CPU (เช่น การจัดเรียง 4 ไบต์สำหรับ int). การขยายความ คือพื้นที่ว่างส่วนเกินที่ไม่ได้ใช้ซึ่งถูกเพิ่มระหว่างช่องโครงสร้างเพื่อให้เป็นไปตามข้อจำกัดในการจัดตำแหน่ง การเข้าถึงที่ไม่ถูกต้องอาจลดประสิทธิภาพการทำงานหรือทำให้เกิดข้อยกเว้นฮาร์ดแวร์ในบางระบบ

ข้อดี: เข้าถึงได้เร็วขึ้นเนื่องจากมีรอบการดึงข้อมูลที่ตรงกัน ข้อเสีย: การสูญเสียความจำที่อาจเกิดขึ้น

ตอบพร้อมตัวอย่าง: ใน C/C++คอมไพเลอร์สามารถแทรกแพดดิ้งระหว่างสมาชิกโครงสร้างได้ นักพัฒนามักจะเรียงลำดับฟิลด์ใหม่หรือใช้ #pragma pack เพื่อลดการเติมให้น้อยที่สุด เช่น การเรียงลำดับโครงสร้างใหม่จาก {char, int} ไปยัง {int, char} อาจลดการใช้หน่วยความจำรวมจาก 8 ไบต์เหลือ 5 ไบต์


36) เทมเพลตการท่องกราฟคืออะไร และเหตุใดรูปแบบ BFS และ DFS จึงมักถูกนำมาใช้ซ้ำในการสัมภาษณ์

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

เทมเพลตเหล่านี้ถูกนำมาใช้ซ้ำเนื่องจากปัญหาต่างๆ มากมาย เช่น เส้นทางที่สั้นที่สุด ส่วนประกอบที่เชื่อมต่อ การเรียงลำดับแบบโทโพโลยี และการตรวจสอบแบบสองส่วน สามารถลดน้อยลงได้ด้วยการปรับเปลี่ยนเล็กน้อย

ข้อดี: รูปแบบสำเร็จรูปขั้นต่ำ ความซับซ้อนที่คาดเดาได้ O(V+E) และความคล่องตัว ตอบพร้อมตัวอย่าง: การตรวจจับเกาะในเมทริกซ์ การค้นหาลำดับการแปลงที่สั้นที่สุดในบันไดคำ หรือการตรวจสอบต้นไม้ ล้วนเป็นการดัดแปลงเทมเพลต BFS/DFS


37) อธิบายโครงสร้างข้อมูลที่รับรู้แคชและไม่สนใจแคช รวมถึงประโยชน์ของโครงสร้างเหล่านี้

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

ข้อดี: ทั้งสองวิธีช่วยลดความล่าช้าของหน่วยความจำและปรับปรุงปริมาณงาน ไม่สนใจแคช วิธีการมีพกพาสะดวกมากขึ้นในขณะที่ รับรู้ถึงแคช อันหนึ่งอาจบรรลุประสิทธิภาพสูงสุดที่สูงขึ้น

ตอบพร้อมตัวอย่าง: B-Trees ที่รับรู้แคชและอาร์เรย์ที่ถูกบล็อกช่วยปรับปรุงประสิทธิภาพของ DB ตัวแปรที่ไม่สนใจแคช เช่น ต้นไม้ van Emde Boas หรือเค้าโครงเมทริกซ์แบบเรียกซ้ำนั้นโดดเด่นในระบบแคชหลายระดับ


38) เปรียบเทียบโครงสร้างข้อมูลถาวรกับโครงสร้างข้อมูลชั่วคราวและกรณีการใช้งาน

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

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

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


39) อธิบายวงจรชีวิตของการรวบรวมขยะ (GC) และผลกระทบต่อโครงสร้างข้อมูล

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

ข้อดี: ทำให้การจัดการหน่วยความจำง่ายขึ้นและป้องกันการรั่วไหล ข้อเสีย: การหยุดชั่วคราวที่ไม่สามารถคาดเดาได้และโอเวอร์เฮดของ CPU

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


40) อธิบายปัจจัยที่มีอิทธิพลต่อการปรับปัจจัยการโหลดในตารางแฮชและผลกระทบต่อประสิทธิภาพการทำงาน

การขอ โหลดแฟกเตอร์ (α = n / จำนวนบัคเก็ต) วัดความสมบูรณ์ของตาราง ค่า α ที่สูงขึ้นจะเพิ่มโอกาสในการชนกัน ส่งผลให้ประสิทธิภาพลดลง ขณะที่ค่า α ต่ำจะทำให้สิ้นเปลืองหน่วยความจำ โดยทั่วไปแล้วการใช้งานจะปรับขนาดเมื่อค่า α เกิน 0.7–0.8

ปัจจัย: ขนาดชุดข้อมูล การกระจายแฮช รูปแบบการเข้าถึง และข้อจำกัดหน่วยความจำ ข้อดีของ α สูง: การใช้หน่วยความจำที่ดีขึ้น ข้อเสีย: การเข้าถึงที่ช้าลงและการแฮชซ้ำค่าใช้จ่าย

ตอบพร้อมตัวอย่าง: Java's HashMap เพิ่มความจุเป็นสองเท่าเมื่อ α > 0.75 เพื่อรักษาประสิทธิภาพที่ตัดทอน O(1) การปรับปัจจัยโหลดเป็นสิ่งสำคัญสำหรับแคชและระบบเรียลไทม์ที่ค่าความหน่วงที่คาดการณ์ได้นั้นมีน้ำหนักมากกว่าต้นทุนหน่วยความจำ


🔍 คำถามสัมภาษณ์โครงสร้างข้อมูลชั้นนำพร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์

1) คุณสามารถอธิบายความแตกต่างระหว่างอาร์เรย์และรายการลิงก์ได้หรือไม่

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทดสอบความเข้าใจของคุณเกี่ยวกับการจัดสรรหน่วยความจำและประสิทธิภาพการเข้าถึงข้อมูล

ตัวอย่างคำตอบ:

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


2) คุณตัดสินใจอย่างไรว่าควรใช้โครงสร้างข้อมูลใดสำหรับปัญหาเฉพาะหนึ่งๆ

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังมองหาการคิดเชิงวิเคราะห์และความเข้าใจในการแลกเปลี่ยนระหว่างโครงสร้างที่แตกต่างกัน

ตัวอย่างคำตอบ:

“ผมประเมินลักษณะของปัญหา ไม่ว่าจะต้องการการค้นหาอย่างรวดเร็ว การแทรกหรือลบข้อมูลบ่อยครั้ง หรือการสืบค้นแบบมีลำดับชั้น ยกตัวอย่างเช่น ผมใช้ตารางแฮชสำหรับการค้นหาอย่างรวดเร็ว ใช้รายการลิงก์สำหรับการแทรกแบบไดนามิก และใช้แผนผังต้นไม้สำหรับข้อมูลแบบลำดับชั้น การเลือกโครงสร้างข้อมูลที่เหมาะสมคือการสร้างสมดุลระหว่างความซับซ้อนของเวลาและพื้นที่”


3) อธิบายสถานการณ์ที่คุณใช้สแต็กหรือคิวได้อย่างมีประสิทธิภาพ

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความรู้การประยุกต์ใช้ในทางปฏิบัติ

ตัวอย่างคำตอบ:

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


4) ความแตกต่างระหว่างไบนารีทรีและไบนารีเสิร์ชทรี (BST) คืออะไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังทดสอบความชัดเจนของแนวคิด

ตัวอย่างคำตอบ:

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


5) คุณสามารถอธิบายสถานการณ์ที่ท้าทายซึ่งคุณได้ปรับการใช้โครงสร้างข้อมูลให้เหมาะสมที่สุดได้หรือไม่

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินทักษะการแก้ปัญหาและการเพิ่มประสิทธิภาพของคุณ

ตัวอย่างคำตอบ:

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


6) ตารางแฮชจัดการกับการชนกันอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังตรวจสอบความเข้าใจเกี่ยวกับการดำเนินการภายในและกลยุทธ์การแก้ไขปัญหา

ตัวอย่างคำตอบ:

ตารางแฮชจัดการกับการชนกันโดยใช้เทคนิคต่างๆ เช่น การเชื่อมโยง (chaining) และการกำหนดแอดเดรสแบบเปิด (open addressing) ในการเชื่อมโยง ดัชนีแต่ละตัวในตารางแฮชจะชี้ไปยังรายการลิงก์ของคู่คีย์-ค่า ในการกำหนดแอดเดรสแบบเปิด จะใช้ลำดับการตรวจสอบเพื่อค้นหาสล็อตถัดไปที่ว่าง วิธีที่เลือกใช้ขึ้นอยู่กับปัจจัยต่างๆ เช่น ปัจจัยโหลดที่คาดหวังและข้อจำกัดของหน่วยความจำ


7) อธิบายแนวคิดของการเรียกซ้ำและความสัมพันธ์กับโครงสร้างข้อมูล

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการวัดความเข้าใจของคุณเกี่ยวกับการออกแบบอัลกอริทึม

ตัวอย่างคำตอบ:

“การเรียกซ้ำ (Recursion) คือวิธีการที่ฟังก์ชันเรียกตัวเองเพื่อแก้ปัญหาย่อยๆ ของงานขนาดใหญ่ โดยทั่วไปมักใช้กับโครงสร้างข้อมูล เช่น ต้นไม้และกราฟ ซึ่งการท่องไปในทิศทางเดียวกันนี้เหมาะกับวิธีการเรียกซ้ำ ตัวอย่างเช่น อัลกอริทึมการท่องไปในทิศทางเดียวกัน เช่น preorder และ inorder สามารถนำไปใช้งานได้อย่างมีประสิทธิภาพโดยใช้การเรียกซ้ำ”


8) เล่าให้ฉันฟังเกี่ยวกับครั้งหนึ่งที่คุณต้องดีบักการใช้งานโครงสร้างข้อมูล

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความสามารถในการวิเคราะห์และแก้ไขจุดบกพร่องของคุณ

ตัวอย่างคำตอบ:

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


9) คุณจะตรวจจับรอบในรายการที่เชื่อมโยงได้อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการดูว่าคุณมีความรู้เกี่ยวกับอัลกอริทึมมาตรฐานและการใช้เหตุผลหรือไม่

ตัวอย่างคำตอบ:

“ผมจะใช้วิธีการตรวจจับวัฏจักรของฟลอยด์ หรือที่รู้จักกันในชื่อวิธีเต่ากับกระต่าย ซึ่งใช้ตัวชี้สองตัวที่เคลื่อนที่ด้วยความเร็วต่างกัน หากตัวชี้ทั้งสองมาเจอกัน แสดงว่ามีการเกิดขึ้นของวัฏจักร วิธีนี้มีประสิทธิภาพเพราะทำงานในเวลา O(n) และใช้พื้นที่เพิ่มเติม O(1)”


10) คุณจัดการกับการออกแบบโครงสร้างข้อมูลภายใต้ข้อจำกัดของหน่วยความจำอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการเข้าใจแนวทางของคุณในการจัดการทรัพยากรอย่างมีประสิทธิภาพ

ตัวอย่างคำตอบ:

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

สรุปโพสต์นี้ด้วย: