ชนิดของ edge ใน DFS tree (ค่ายวันที่ 11 มีนาคม 2551)

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

หลังจาก DFS บท directed graph เราสามารถแบ่ง edge ในกราฟออกได้เป็น 4 ประเภท ได้แก่

  • Tree edge คือ edge ที่อยู่บน DFS tree ที่ได้จากการทำ DFS
  • Back edge คือ edge ที่พุ่งออกจาก vertex ไปหาบรรพบุรุษของมันใน DFS tree
  • Forward edge คือ edge ที่พุ่งออกจาก vertex ไปหาลูกหลานของมันใน DFS tree
  • Cross edge คือ edge อื่นๆ ที่ไม่เข้าพวกทั้งสามข้างต้น

ยกตัวอย่างเช่น ในกราฟต่อไปนี้

Dfs-graph-01.JPG

ถ้าเราทำ DFS โดยเดินผ่าน vertex ตามลำดับต่อไปนี้: s, z, y, x, w, t, v, u แล้ว edge ต่างๆ ในกราฟจะมีประเภทตามรูปข้างล่างนี้

Dfs-graph-02.JPG

แล้วจะรู้ได้อย่างไรว่า edge ไหนประเภทไหน?

เราจะใช้สมบัติของ discovery time และ finish time ของ vertex ใน DFS forest มาช่วย

เวลาเราทำ DFS เรา save ค่าเวลาไว้ที่จุด ใดๆ ไว้สองค่า หนึ่งคือเวลา discovery time (เขียนแทนด้วย

Error

Too many requests (f061ab2)

) และหนึ่งคือเวลา finish time (เขียนแทนด้วน ) โดย

  • คือเวลาที่ DFS เดินมาถึง ครั้งแรก
  • คือเวลาที่ DFS สำรวจ และ vertex ที่ไปถึงจากมันได้จนหมดแล้ว กำลังจะ backtrack กลับออกไป

การบันทึกค่าเวลาทั้งสองสามารถทำได้ตาม pseudocode ต่อไปนี้: ให้มีตัวแปล global ชื่อ time แทนเวลาของระบบ

function DFS(v)
{
    time = time + 1
    d[v] = time
  
    for edge (v,w) ทุกๆ edge
        if w ยังไม่ีเคยถูก DFS เดินไปถึง
            DFS(w)
  
    time = time + 1
    f[v] = time
}

ค่า

Error

Too many requests (f061ab2)

และ มีคุณสมบัติที่สำคัญเรียกว่า คุณสมบัติวงเล็บ ดังต่อไปนี้

รายการเลือกการนำทาง