ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมเกี่ยวกับกราฟ/เฉลยข้อ 4.5"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 3 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 7: แถว 7:
 
ดังนั้นเราสมมติว่า <math>\{u,v\} \,</math> ไม่เป็น tree edge
 
ดังนั้นเราสมมติว่า <math>\{u,v\} \,</math> ไม่เป็น tree edge
  
สมมติเพิ่มเพื่อไม่ให้เสียนัยทั่วไปว่า <math>\mathrm{DFSALL}(u) \,</math> ถูกเรียกก่อน <math>\mathrm{DFSALL}(v) \,</math>  
+
สมมติเพิ่มเพื่อไม่ให้เสียนัยทั่วไปว่า <math>\mathrm{DFS}(u) \,</math> ถูกเรียกก่อน <math>\mathrm{DFS}(v) \,</math>  
(ถ้า <math>\mathrm{DFSALL}(v) \,</math> ถูกเรียกก่อนเราก็แค่สลับ <math>u \,</math> กับ <math>v \,</math>)
+
(ถ้า <math>\mathrm{DFS}(v) \,</math> ถูกเรียกก่อนเราก็แค่สลับ <math>u \,</math> กับ <math>v \,</math>)
  
เมื่อ <math>\mathrm{DFSALL}(u) \,</math> ถูกเรียกให้ทำงาน มันจะจบการทำงานก็ต่อเมื่อ <math>DFSALL \,</math> ได้เข้าไปสำรวจ vertex ทุก vertex  
+
'''ข้อสังเกต:''' เมื่อ <math>\mathrm{DFS}(u) \,</math> ถูกเรียกให้ทำงาน มันจะจบการทำงานก็ต่อเมื่อ <math>\mathrm{DFS} \,</math> ได้เข้าไปสำรวจ vertex ทุก vertex  
 
ที่ยังไม่เคยถูกสำรวจซึ่งเราสามารถเดินไปถึงจาก <math>u \,</math> ได้
 
ที่ยังไม่เคยถูกสำรวจซึ่งเราสามารถเดินไปถึงจาก <math>u \,</math> ได้
  
เนื้่องจากมี edge <math>\{u,v\} \,</math> เราได้ว่าเราสามารถเดินจาก <math>u \,</math> ไปถึง <math>v \,</math> ได้
+
เนื่องจากมี edge <math>\{u,v\} \,</math> ดังนั้นเราสามารถเดินจาก <math>u \,</math> ไปถึง <math>v \,</math> ได้
  
แต่ ณ เวลาที่ <math>\mathrm{DFSALL}(u) \,</math> ถูกเรียก <math>\mathrm{DFSALL}(v) \,</math> ยังไม่ถูกเรียก เพราะฉะนั้น ณ เวลานั้น <math>v \,</math>
+
แต่ ณ เวลาที่ <math>\mathrm{DFS}(u) \,</math> ถูกเรียก <math>\mathrm{DFS}(v) \,</math> ยังไม่ถูกเรียก เพราะฉะนั้น ณ เวลานั้น <math>v \,</math>
 
ยังไม่ถูกสำรวจ
 
ยังไม่ถูกสำรวจ
  
 
ฉะนั้นจึงสามารถสรุปได้ว่า <math>v \,</math> เป็นลูกหลานของ <math>u \,</math> ใน DFS tree
 
ฉะนั้นจึงสามารถสรุปได้ว่า <math>v \,</math> เป็นลูกหลานของ <math>u \,</math> ใน DFS tree
  
เนื่องจาก edge <math>\{u,v\} \,</math> ไม่ใช่ tree edge มันจึงต้องเป็น back edge เนื่องจากมันเชื่อมลูกหลานตัวหนึ่งของ <math>u \,</math> เข้ากับ <math>u \,</math>
+
edge <math>\{u,v\} \,</math> ไม่ใช่ tree edge มันจึงต้องเป็น back edge เนื่องจากมันเชื่อมลูกหลานตัวหนึ่งของ <math>u \,</math> เข้ากับตัว <math>u \,</math> เอง

รุ่นแก้ไขปัจจุบันเมื่อ 13:45, 16 กันยายน 2552

ให้่ เป็น edge ใดๆ ใน undirected graph

โจทย์ต้องการให้เราพิสูจน์ว่า edge เป็น tree edge หรือไม่ก็ back edge

นั่นคือเท่ากับพิสูจน์ว่า "ถ้า ไม่เป็น tree edge แล้วมันต้องเป็น back edge"

ดังนั้นเราสมมติว่า ไม่เป็น tree edge

สมมติเพิ่มเพื่อไม่ให้เสียนัยทั่วไปว่า ถูกเรียกก่อน (ถ้า ถูกเรียกก่อนเราก็แค่สลับ กับ )

ข้อสังเกต: เมื่อ ถูกเรียกให้ทำงาน มันจะจบการทำงานก็ต่อเมื่อ ได้เข้าไปสำรวจ vertex ทุก vertex ที่ยังไม่เคยถูกสำรวจซึ่งเราสามารถเดินไปถึงจาก ได้

เนื่องจากมี edge ดังนั้นเราสามารถเดินจาก ไปถึง ได้

แต่ ณ เวลาที่ ถูกเรียก ยังไม่ถูกเรียก เพราะฉะนั้น ณ เวลานั้น ยังไม่ถูกสำรวจ

ฉะนั้นจึงสามารถสรุปได้ว่า เป็นลูกหลานของ ใน DFS tree

edge ไม่ใช่ tree edge มันจึงต้องเป็น back edge เนื่องจากมันเชื่อมลูกหลานตัวหนึ่งของ เข้ากับตัว เอง