ผลต่างระหว่างรุ่นของ "Biconnectedness (ค่ายวันที่ 11 มีนาคม 2551)"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 39: แถว 39:
  
 
=== ข้อมูลเสริม <math>low[v]\,</math> ===
 
=== ข้อมูลเสริม <math>low[v]\,</math> ===
 +
ปัญหาสำคัญคือเราจะรู้ได้อย่างไรว่า subtree ที่มี root ที่ลูกของ <math>v\,</math> จะมีหรือไม่มี back edge ที่ต่อขึ้นไปสูงกว่า <math>v\,</math>?

รุ่นแก้ไขเมื่อ 14:10, 12 มีนาคม 2551

กำหนด undirected graph ซึ่งเป็นกราฟต่อเนื่อง ใดๆ

  • เราเรียก vertex ว่าเป็น articulation point ถ้่าเราตัด และ edge ที่ต่อกับมันทั้งหมดออกไปออกจากกราฟแล้วจะทำให้กราฟเป็นกราฟไม่ต่อเนื่อง
  • เราเรียก edge ว่าเป็น bridge ถ้าเราตัด ออกจากกราฟแล้วจะทำให้กราฟเป็นกราฟไม่ต่อเนื่อง
  • เรากล่าวว่า edge สอง edge ใดๆ อยู่ใน biconnected component เดียวกันก็ต่อเมื่อมี simple cycle ที่มี edge ทั้งสองนั้นอยู่ภายใน

จะเห็นได้ว่าความสัมพันธ์ "อยู่ใน biconnected component เดียวกัน" จะแบ่ง edge ออกเป็นกลุ่มๆ ซึ่งเราเรียกกลุ่มเหล่านั้นว่า biconnected component (นั่นแหละ)

ภาพต่อไปนี้แสดง articulation point (vertex สีแดง), bridge (edge เล็กบางสีแดง), และ biconnected component (edge ที่ไม่ใช่ bridge ที่อยู่ใน biconnected component เดียวกัน จะมีสีเดียวกัน) ของกราฟต่อเนื่องกราฟหนึ่ง

Biconnectedness-01.JPG

การหา articulation point

เราสามารถหา articulation point ทั้งหมดของกราฟที่กำหนดให้ได้ในเวลา โดยการทำ DFS เพื่อคำนวณข้อมูลเสริมบางอย่างของ vertex ทุก vertex ในกราฟ หลังจากนั้น เราจะนำข้อมูลนี้ไปประกอบการตัดสินใจว่า vertex ที่กำหนดให้เป็น articulation point หรือเปล่า

ก่อนจะมาพูดถึงนิยามของข้อมูลเสริมนี้ เรามาสังเกตกันก่อนว่าการที่ vertex ใด ในกราฟจะเป็น articulation point หรือไม่มันจะต้องมีสมบัติอย่างไร ในที่นี้ เราจะสมมติว่าเราได้ทำ DFS บนกราฟนี้ครั้งหนึ่งแล้ว และเราจะแยกการพิจารณาเป็นสองกรณี

1. เป็น root ของ DFS tree

สังเกตว่าถ้า root มีลูกมากกว่าหนึ่งตัว หมายความว่าถ้าเราจะเริ่มเดินจาก vertex ใน subtree ของลูกตัวหนึ่ง ไปยัง vertex ใน subtree ของลูกอีกตัวหนึ่ง เราต้องเดินผ่าน root เสมอ ดังนั้นถ้าตัด root ออกกราฟก็จะขาดออกจากกันเป็นสองส่วน (เพราะไม่มีเส้นทางเชื่อมระหว่าง vertex ใน subtree 2 ต้นใดๆ อีกต่อไป)

แต่ถ้า root มีลูกแค่ตัวเดียว แสดงว่าการเดินทางระหว่าง vertex คู่ใดๆ ในกราฟไม่มีความจำเป็นต้องผ่าน root อีกต่อไป ดังนั้นถ้าตัด root ออกก็จะไม่กระทบกระเทือนต่อความต่อเนื่องกันของกราฟ

ด้วยเหตุนี้ root ของ DFS tree จะเป็น articulation point ก็ต่อเมื่อมันมีลูกอย่างน้อยสองตัวเท่านั้น

2. เป็น internal vertex ของ DFS tree

พิจารณารูปข้างล่างนี้

Biconnectedness-02.JPG

เราสามารถแบ่งลูกของ ใน DFS ออกได้เป็น 3 กรณี

  1. กรณีแรกคือกรณีเหมือน กล่าวคือใน subtree ที่มี root อยู่ที่ มี back edge พุ่งออกมาขึ้นไปต่อกับบรรพบุรุษของ บางตัว
  2. กรณีที่สองคือกรณีเหมือน กล่าวคือใน subtree ที่มี root อยู่ที่ มี back edge พุ่งขึ้นออกมาต่อกับ เอง
  3. กรณีที่สองคือกรณีเหมือน กล่าวคือใน subtree ที่มี root อยู่ที่ ไม่มี back edge พุ่งขึ้นมาเหนือหรืออยู่ในระดับเดียวกับ เลย

ถ้าเราตัด ออกแล้วจะเกิดอะไรขึ้น?

  • ในกรณี , subtree ที่มี root อยู่ที่ จะยังไม่ขาดออกจากกราฟเนื่องจากมันยังมี back edge ไปเชื่อมกับส่วนบนของกราฟอยู่
  • แต่ในกรณี กับ , subtree ที่มี root อยู่ที่ vertex ทั้่งสองจะขาดออกจากกราฟทันที

ดังนั้น จะเป็น articulation point ก็ต่อเมื่อมันมีลูกสักตัวที่มีลักษณะเหมือน หรือ กล่าวคือ ใน subtree ของลูกของลูกตัวนั้นจะไม่มี back edge พุ่งขึ้นไปต่อกับ หรือบรรพบุรุษของ

ข้อมูลเสริม

ปัญหาสำคัญคือเราจะรู้ได้อย่างไรว่า subtree ที่มี root ที่ลูกของ จะมีหรือไม่มี back edge ที่ต่อขึ้นไปสูงกว่า ?