โครงสร้างข้อมูลและอัลกอริทึม: ชุดสรุปเร่งรัด

สรุปสูตร ขั้นตอนวิธีทำที่สำคัญของทุกหัวข้อ และโจทย์ฝึก 6 ข้อ พร้อมเฉลยละเอียดไว้ท้ายเล่ม

โจทย์ใหม่กลับไปที่รายวิชา

ในหน้าต่างพิมพ์ ให้เลือก “บันทึกเป็น PDF” เพื่อเก็บสำเนาไว้ในอุปกรณ์ของคุณ

1สูตรและวิธีทำ

ทฤษฎีกราฟ

เล็มมาการจับมือ
Σ deg(v) = 2|E|
กราฟบริบูรณ์
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
กราฟปรกติ
|E| = n·k/2
ต้นไม้และป่า
|E| = n − 1, |E| = n − c
ใบของต้นไม้
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
ออยเลอร์
วงจร: ดีกรีเป็นคู่ทุกจุดยอด; ทางเดิน: มีดีกรีคี่พอดี 2 จุดยอด
วงจรแฮมิลตันใน Kn
(n − 1)!/2
การปรับค่าของไดก์สตรา
d(v) = min(d(v), d(u) + w(u, v))
วอล์กความยาว L
(Mᴸ)ij

วิธีการ

  1. เขียนดีกรีของทุกจุดยอด ผลบวกของดีกรีเท่ากับสองเท่าของจำนวนเส้นเชื่อม
  2. สำหรับโจทย์ออยเลอร์ ให้ตรวจว่ากราฟเชื่อมโยงกัน และนับจุดยอดที่มีดีกรีคี่
  3. สำหรับต้นไม้ ให้ใช้ว่ามี n − 1 เส้นเชื่อม และเล็มมาการจับมือ
  4. สำหรับไดก์สตรา ให้เก็บตารางระยะทางชั่วคราว และยืนยันจุดยอดที่ยังไม่ยืนยันซึ่งมีค่าน้อยที่สุดในแต่ละรอบ
  5. สำหรับต้นไม้ทอดข้ามค่าน้อยที่สุด ให้เรียงเส้นเชื่อมตามน้ำหนักและข้ามทุกเส้นที่ทำให้เกิดวัฏจักร (ครัสคัล) หรือขยายต้นไม้ต้นเดียวจากจุดยอดเริ่มต้น (พริม)

2โจทย์ฝึก

1.อัลกอริทึมและความซับซ้อนปานกลาง

การเรียกซ้ำของ merge sort สำหรับอาร์เรย์ n สมาชิกมีกี่ระดับ

  1. Aประมาณ log₂ n
  2. Bประมาณ n
  3. Cประมาณ √n
  4. Dประมาณ n / 2
2.อัลกอริทึมและความซับซ้อนยาก

เหตุใดอัลกอริทึมของ Dijkstra จึงอาจให้ผลผิดเมื่อน้ำหนักเส้นเชื่อมบางเส้นติดลบ

  1. Aจุดยอดถูกตรึงค่าเมื่อถูกดึงออก แต่เส้นเชื่อมติดลบที่มาทีหลังอาจให้เส้นทางที่สั้นกว่าแก่มัน
  2. Bตัวเลขติดลบเก็บในคิวลำดับความสำคัญไม่ได้
  3. Cใช้ได้กับกราฟไม่มีทิศทางเท่านั้น
  4. Dเข้าสู่ลูปไม่สิ้นสุดทุกครั้งที่พบเส้นเชื่อมติดลบ
3.โครงสร้างข้อมูลปานกลาง

แทรกคีย์ 50, 30, 70, 20, 40 ตามลำดับนี้ลงใน binary search tree ว่าง ลูกซ้ายของ 30 คืออะไร

  1. A70
  2. B50
  3. C20
  4. D40
4.โครงสร้างข้อมูลยาก

โครงสร้าง union-find (เซตไม่เชื่อมกัน) ที่ใช้ union by rank และ path compression มีต้นทุนกระจายต่อการดำเนินการเป็น

  1. AO(n)
  2. BO(n²)
  3. CO(α(n)) ซึ่งเป็นฟังก์ชันผกผันของอัคเคอร์มันน์ ที่แทบเป็นค่าคงที่ในทางปฏิบัติ
  4. DO(log n) พอดี
5.ทฤษฎีกราฟปานกลาง

กราฟเชื่อมโยงมี 6 จุดยอดและ 8 เส้นเชื่อม ต้องเอาเส้นเชื่อมออกกี่เส้น k เพื่อให้เหลือต้นไม้ทอดข้าม

|V| = 6|E| = 8
k =
6.ทฤษฎีกราฟยาก
51010813294ABCDEF

ใช้ขั้นตอนวิธีของไดก์สตราเพื่อหาความยาว d(F) ของเส้นทางที่สั้นที่สุดจาก A ไป F ในกราฟถ่วงน้ำหนัก

เริ่มต้น: Aสิ้นสุด: F
d(F) =

3สารละลาย

1.อัลกอริทึมและความซับซ้อน

คำตอบ: A · ประมาณ log₂ n

เหตุผลที่เป็นคำตอบนี้

การแบ่งครึ่งจาก n ลงถึง 1 ใช้ประมาณ log₂ n ระดับ และแต่ละระดับทำงานผสาน O(n) ได้ O(n log n)

คำตอบ

A · ประมาณ log₂ n
2.อัลกอริทึมและความซับซ้อน

คำตอบ: A · จุดยอดถูกตรึงค่าเมื่อถูกดึงออก แต่เส้นเชื่อมติดลบที่มาทีหลังอาจให้เส้นทางที่สั้นกว่าแก่มัน

เหตุผลที่เป็นคำตอบนี้

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

คำตอบ

A · จุดยอดถูกตรึงค่าเมื่อถูกดึงออก แต่เส้นเชื่อมติดลบที่มาทีหลังอาจให้เส้นทางที่สั้นกว่าแก่มัน
3.โครงสร้างข้อมูล

คำตอบ: C · 20

เหตุผลที่เป็นคำตอบนี้

20 น้อยกว่า 50 และน้อยกว่า 30 จึงเป็นลูกซ้ายของ 30 ส่วน 40 เป็นลูกขวา

คำตอบ

C · 20
4.โครงสร้างข้อมูล

คำตอบ: C · O(α(n)) ซึ่งเป็นฟังก์ชันผกผันของอัคเคอร์มันน์ ที่แทบเป็นค่าคงที่ในทางปฏิบัติ

เหตุผลที่เป็นคำตอบนี้

เมื่อใช้ทั้งสองการปรับปรุง การดำเนินการใช้เวลา O(α(n)) แบบกระจายต้นทุน และ α(n) ≤ 4 สำหรับ n ที่เป็นจริงทุกขนาด

คำตอบ

C · O(α(n)) ซึ่งเป็นฟังก์ชันผกผันของอัคเคอร์มันน์ ที่แทบเป็นค่าคงที่ในทางปฏิบัติ
5.ทฤษฎีกราฟ

คำตอบ: k = 3

ออยเลอร์ แฮมิลตัน และต้นไม้: กราฟเชื่อมโยงมีวงจรออยเลอร์ (ผ่านทุกเส้นเชื่อมครั้งเดียวและกลับจุดเริ่มต้น) เมื่อทุกจุดยอดมีดีกรีคู่ และมีทางเดินออยเลอร์ที่ไม่ใช่วงจรเมื่อมีจุดยอดดีกรีคี่พอดีสองจุด ทางเดินนั้นไปจากจุดยอดคี่จุดหนึ่งถึงอีกจุดหนึ่ง วงจรแฮมิลตันผ่านทุกจุดยอดครั้งเดียว Kn มีวงจรแบบนี้ (n − 1)!/2 วงจร ต้นไม้ที่มี n จุดยอดมี n − 1 เส้นเชื่อม และกราฟเชื่อมโยงที่มี m เส้นเชื่อมจะเหลือต้นไม้ทอดข้ามหลังเอาเส้นเชื่อมออก m − n + 1 เส้น

เส้นเชื่อมของต้นไม้ทอดข้าม

6 − 1 = 5

เส้นเชื่อมที่ต้องเอาออก

k = 8 − 5 = 3

คำตอบ

k = 3
6.ทฤษฎีกราฟ

คำตอบ: d(F) = 22

เส้นทางที่สั้นที่สุดและต้นไม้ทอดข้าม: ขั้นตอนวิธีของไดก์สตรายืนยันหนึ่งจุดยอดต่อรอบ: จุดยอดที่ยังไม่ยืนยันซึ่งมีระยะทางชั่วคราวน้อยที่สุด ระยะทางของมันเป็นค่าสุดท้ายแล้ว และเพื่อนบ้าน v ทุกจุดได้ d(v) = min(d(v), d(u) + w(u, v)) ขั้นตอนวิธีของครัสคัลสร้างต้นไม้ทอดข้ามค่าน้อยที่สุดโดยเลือกเส้นเชื่อมจากเบาไปหนักและข้ามเส้นที่ทำให้เกิดวัฏจักร ขั้นตอนวิธีของพริมขยายต้นไม้หนึ่งต้นจากจุดยอดเริ่มต้นโดยเพิ่มเส้นเชื่อมที่เบาที่สุดที่ออกจากต้นไม้เสมอ ต้นไม้ทอดข้ามที่มี n จุดยอดมี n − 1 เส้นเชื่อม

ไดก์สตราทีละรอบ

แต่ละบรรทัด: จุดยอดที่ยืนยัน ระยะทางสุดท้ายของมัน และเพื่อนบ้านที่ระยะทางดีขึ้น

A (0): C: 5
C (5): B: 15, E: 13
E (13): D: 26, F: 22
B (15): D: 25
F (22): D: 24
D (24)

เส้นทางที่สั้นที่สุด

A → C → E → F
d(F) = 22

คำตอบ

d(F) = 22

ExamProblems · examproblems.com/courses/data-structures-and-algorithms