ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมเกี่ยวกับกราฟ/เฉลยข้อ 7"
ไปยังการนำทาง
ไปยังการค้นหา
Cardcaptor (คุย | มีส่วนร่วม) |
Cardcaptor (คุย | มีส่วนร่วม) |
||
แถว 1: | แถว 1: | ||
== การ preprocess == | == การ preprocess == | ||
− | ให้ทำ <math>\mathrm{ | + | ให้ทำ <math>\mathrm{DFS}(r) \,</math> (เรียก <math>\mathrm{DFS} \,</math> จาก root) |
ขั้นตอนนี้ใช้เวลา <math>O(|V| + |E|) \,</math> | ขั้นตอนนี้ใช้เวลา <math>O(|V| + |E|) \,</math> | ||
แถว 20: | แถว 20: | ||
สมมติว่า <math>u \,</math> เป็นบรรพบุรุษของ <math>v \,</math> แล้ว path จาก <math>r \,</math> ไปยัง <math>v \,</math> จะต้องผ่าน <math>u \,</math> | สมมติว่า <math>u \,</math> เป็นบรรพบุรุษของ <math>v \,</math> แล้ว path จาก <math>r \,</math> ไปยัง <math>v \,</math> จะต้องผ่าน <math>u \,</math> | ||
− | ฉะนั้นเมื่อทำ <math>\mathrm{ | + | ฉะนั้นเมื่อทำ <math>\mathrm{DFS} \,</math> จาก <math>r \,</math> เราจะได้ว่า <math>u \,</math> จะถูกสำรวจก่อน <math>v \,</math> |
ฉะนั้น <math>\mathrm{pre}[u] < \mathrm{pre}[v] \,</math> | ฉะนั้น <math>\mathrm{pre}[u] < \mathrm{pre}[v] \,</math> | ||
− | นอกจากนี้ เนื่องจากเราสามารถเดินจาก <math>u \,</math> ไปถึง <math>v \,</math> เราจะได้ว่า <math>v \,</math> จะต้องถูกสำรวจเสร็จก่อนที่ <math>\mathrm{ | + | นอกจากนี้ เนื่องจากเราสามารถเดินจาก <math>u \,</math> ไปถึง <math>v \,</math> เราจะได้ว่า <math>v \,</math> จะต้องถูกสำรวจเสร็จก่อนที่ <math>\mathrm{DFS} \,</math> จะสำรวจ <math>u \,</math> เสร็จ กล่าวคือ <math>\mathrm{post}[v] < \mathrm{post}[u] \,</math> |
ฉะนั้นเราสรุปได้ว่า <math>\mathrm{pre}[u] < \mathrm{pre}[v] < \mathrm{post}[v] < \mathrm{post}[u] \,</math> | ฉะนั้นเราสรุปได้ว่า <math>\mathrm{pre}[u] < \mathrm{pre}[v] < \mathrm{post}[v] < \mathrm{post}[u] \,</math> |
รุ่นแก้ไขปัจจุบันเมื่อ 13:48, 16 กันยายน 2552
เนื้อหา
การ preprocess
ให้ทำ (เรียก จาก root)
ขั้นตอนนี้ใช้เวลา
การตอบคำถามว่า เป็นบรรพบุรุษของ หรือไม่
กำหนด vertex และ สอง vertex ใดๆ ในต้นไม้ มาให้ เราสามารถตรวจสอบได้ว่า เป็นบรรพบุรุษของ ได้หรือไม่ดังต่อไปนี้
- ตรวจสอบว่า หรือไม่
การตรวจสอบนี้ใช้เวลา
ที่เหลือคือเราต้องพิสูจน์ว่าการทดสอบนี้ถูกต้อง ซึ่งเท่ากับการพิูสูจน์ขอ้ความสองข้อความต่อไปนี้
- ถ้า เป็นบรรพบุรุษของ แล้ว
- ถ้า ไม่ใช่บรรพบุรุษของ แล้ว ข้อความ "" ไม่เป็นความจริง
ข้อความที่ 1
สมมติว่า เป็นบรรพบุรุษของ แล้ว path จาก ไปยัง จะต้องผ่าน
ฉะนั้นเมื่อทำ จาก เราจะได้ว่า จะถูกสำรวจก่อน ฉะนั้น
นอกจากนี้ เนื่องจากเราสามารถเดินจาก ไปถึง เราจะได้ว่า จะต้องถูกสำรวจเสร็จก่อนที่ จะสำรวจ เสร็จ กล่าวคือ
ฉะนั้นเราสรุปได้ว่า
ข้อความที่ 2
ข้อความที่ 2 สมมูลกับข้อความที่ว่า "ถ้า " แล้ว เป็นบรรพบุรุษของ
สมมติว่า เราได้ว่า เป็นบรรพบุรุษของ ใน DFS tree
แต่เนื่องจากกราฟตั้งต้น เป็นต้่นไม้อยู่แล้ว จึงเป็น DFS tree ด้วย ดังนั้น จึงเป็นบรรพบุรุษของ ใน