1.ง่าย
deque (double-ended queue) คืออะไร
- Aคิวสองคิวที่ใช้อาร์เรย์ร่วมกัน
- Bคิวที่เรียงตามลำดับความสำคัญ
- Cโครงสร้างที่อนุญาตให้แทรกและเอาออกที่ทั้งสองปลาย
- Dคิวที่อนุญาตให้เอาออกจากด้านหลังเท่านั้น
2.ง่าย
การดำเนินการใดช้าในอาร์เรย์แต่เร็วที่ส่วนหัวของลิงก์ลิสต์
- Aการแทรกที่จุดเริ่มต้น
- Bการเข้าถึงสมาชิกตัวที่ 5
- Cการหาความยาวของอาร์เรย์ขนาดคงที่
- Dการอ่านสมาชิกตัวสุดท้ายด้วยดัชนี
3.ง่าย
แมป (map หรือ dictionary) เก็บอะไร
- Aคู่ของคีย์ที่เท่ากัน
- Bค่าที่เรียงตามขนาด
- Cค่าตามลำดับการแทรกเท่านั้น
- Dคู่คีย์–ค่าที่คีย์ไม่ซ้ำกัน
4.ปานกลาง
อัลกอริทึมของ Dijkstra ใช้ชนิดข้อมูลนามธรรมใดเลือกจุดยอดถัดไปที่จะประมวลผล
- Aสแตก
- Bคิว FIFO
- Cคิวลำดับความสำคัญแบบค่าต่ำสุด (min-priority queue)
- Dเซตที่ไม่มีลำดับ
5.ปานกลาง
เหตุใดการท่องอาร์เรย์จึงเร็วกว่าการท่องลิงก์ลิสต์ที่ยาวเท่ากันมากในทางปฏิบัติ
- Aอาร์เรย์ใช้คำสั่งน้อยกว่าในการเปรียบเทียบค่า
- Bสมาชิกของอาร์เรย์ต่อเนื่องกัน จึงใช้แคชของ CPU ได้ดี
- Cลิงก์ลิสต์เก็บสมาชิกบนดิสก์เสมอ
- Dการท่องอาร์เรย์เป็น O(1) โดยรวม ส่วนการท่องลิงก์ลิสต์เป็น O(n)
6.ปานกลาง
วิธีแก้การชนกันแบบใดเก็บคีย์ที่ชนกันไว้ในลิสต์ที่ถังเดียวกัน
- Aการเชื่อมโซ่แยก (separate chaining)
- Bการแฮชซ้อน (double hashing)
- Cการตรวจสอบเชิงเส้น (linear probing)
- Dการตรวจสอบกำลังสอง (quadratic probing)
7.ยาก
การแทรกคีย์ในต้นไม้ AVL ทำให้ต้นไม้ย่อยซ้ายของโหนดสูงเกินไป และคีย์ใหม่อยู่ในต้นไม้ย่อยซ้ายของลูกซ้าย (กรณีซ้าย–ซ้าย) ใช้วิธีแก้ใด
- Aหมุนซ้ายหนึ่งครั้งที่โหนดที่ไม่สมดุล
- Bหมุนขวาหนึ่งครั้งที่โหนดที่ไม่สมดุล
- Cหมุนซ้ายที่ลูก แล้วหมุนขวาที่โหนด
- Dเปลี่ยนสีโหนดและลูกของมัน
8.ยาก
อาร์เรย์พลวัตเพิ่มเป็นสองเท่าเมื่อเต็ม เหตุใดหลายการสร้างจึงหดมันเมื่อเหลือเพียงหนึ่งในสี่เท่านั้น ไม่ใช่ครึ่งหนึ่ง
- Aเพื่อให้อาร์เรย์เรียงลำดับ
- Bเพื่อหลีกเลี่ยงการปรับขนาดซ้ำเมื่อ push และ pop สลับกันใกล้ขอบเขต
- Cเพราะการหดที่ครึ่งหนึ่งทำให้สมาชิกหาย
- Dเพราะตัวจัดสรรหน่วยความจำคืนหน่วยความจำได้เฉพาะเป็นหนึ่งในสี่ของบล็อกเท่านั้น