data structure lesson14

24
!"# แผนการสอนประจําบทเรียน รายชื ่ออาจารยผู จัดทํา อนงคนาฏ ศรีวิหค ตอนที่ 14.1 การคํานวณระดับขั ้นและระยะทางของกราฟ (1 คาบ) เรื ่องที 14.1.1 กราฟระบุทิศทางและกราฟไมระบุทิศทาง เรื ่องที 14.1.2 การคํานวณระดับขั ้นของกราฟ เรื ่องที 14.1.3 การคํานวณระยะทางของกราฟ ตอนที่ 14.2 เมทริกซของกราฟ (1 คาบ) เรื ่องที 14.2.1 เมทริกซวิถี เรื ่องที 14.2.2 เมทริกซประชิด เรื ่องที 14.2.3 การคํานวณหาเมทริกซ ตอนที่ 14.3 ทรานซิทีฟโคลสเชอร (1 คาบ) เรื ่องที 14.3.1 ทรานซิทีฟโคลสเชอร เรื ่องที 14.3.2 อัลกอริทึมของวอรแชล แนวคิด 1. แสดงคุณสมบัติกราฟที่มีทิศทางและไมมีทิศทางโดยการยกตัวอยางของการสื่อสารระหวางเมือง ตางๆ 2. การหาระดับขั ้นกราฟทําไดจาการคํานวณจากเสนเชื ่อมที ่ประชิดกับบัพ 3. การคํานวณระยะทางของกราฟทําไดจาการคํานวณการเชื่อมโยงระหวางบัพในกราฟ 4. การแทนกราฟในหนวยความจําสามารถทําไดในรูปของแถวลําดับ 2 มิติหรือเมทริกซโดยใหแต ละบัพของกราฟแทนดวยดัชนีของแถวลําดับ 5. เมทริกซประชิดใชแทนการเชื่อมโยงระหวางบัพ 2 บัพในกราฟแบบมีทิศทางและไมมีทิศทาง โดยการเดินทางระหวาง 2 บัพนั้นไมผานบัพใด 6. เมทริกซวิถีใชแทนการเชื่อมโยงระหวางบัพในกราฟแบบมีทิศทางและไมมีทิศทาง 7. การแทนกราฟในหนวยความจําสามารถทําไดในรูปของแถวลําดับ 2 มิติหรือเมทริกซโดยการ คํานวณหาทรานซิทีฟโคลสเชอรของกราฟทําไดโดยหลักการของ OR เมทริกซ

description

ตอนที่ 14.1 การคํานวณระดับขั้นและระยะทางของกราฟ (1 คาบ) เรื่องที่ 14.1.1 กราฟระบุทิศทางและกราฟไมระบุทิศทาง เรื่องที่ 14.1.2 การคํานวณระดับขั้นของกราฟ เรื่องที่ 14.1.3 การคํานวณระยะทางของกราฟ ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน เอกสารประกอบการสอน 1. เอกสารชุดวิชา หัวเรื่อง เรื่องที่ 14.1.1 กราฟระบุทิศทางและกราฟไมระบุทิศทาง เรื่องที่ 14.1.2 การคํานวณ

Transcript of data structure lesson14

Page 1: data structure lesson14

!"#

แผนการสอนประจําบทเรียน

รายช่ืออาจารยผูจัดทํา อนงคนาฏ ศรีวิหค

ตอนที ่14.1 การคาํนวณระดบัขัน้และระยะทางของกราฟ (1 คาบ) เร่ืองท่ี 14.1.1 กราฟระบุทิศทางและกราฟไมระบุทิศทาง เร่ืองท่ี 14.1.2 การคํานวณระดับข้ันของกราฟ เร่ืองท่ี 14.1.3 การคํานวณระยะทางของกราฟ

ตอนที ่14.2 เมทริกซของกราฟ (1 คาบ) เร่ืองท่ี 14.2.1 เมทริกซวิถี เร่ืองท่ี 14.2.2 เมทริกซประชิด เร่ืองท่ี 14.2.3 การคํานวณหาเมทริกซ

ตอนที ่14.3 ทรานซิทีฟโคลสเชอร (1 คาบ) เร่ืองท่ี 14.3.1 ทรานซิทีฟโคลสเชอร เร่ืองท่ี 14.3.2 อัลกอริทึมของวอรแชล

แนวคดิ 1. แสดงคุณสมบัติกราฟที่มีทิศทางและไมมีทิศทางโดยการยกตัวอยางของการสื่อสารระหวางเมืองตางๆ

2. การหาระดับข้ันกราฟทําไดจาการคํานวณจากเสนเช่ือมท่ีประชิดกับบัพ 3. การคํานวณระยะทางของกราฟทําไดจาการคํานวณการเชื่อมโยงระหวางบัพในกราฟ 4. การแทนกราฟในหนวยความจําสามารถทําไดในรูปของแถวลําดับ 2 มิติหรือเมทริกซโดยใหแตละบัพของกราฟแทนดวยดัชนีของแถวลําดับ

5. เมทริกซประชิดใชแทนการเชื่อมโยงระหวางบัพ 2 บัพในกราฟแบบมีทิศทางและไมมีทิศทางโดยการเดินทางระหวาง 2 บัพนั้นไมผานบัพใด ๆ

6. เมทริกซวิถีใชแทนการเชื่อมโยงระหวางบัพในกราฟแบบมีทิศทางและไมมีทิศทาง 7. การแทนกราฟในหนวยความจําสามารถทําไดในรูปของแถวลําดับ 2 มิติหรือเมทริกซโดยการคํานวณหาทรานซิทีฟโคลสเชอรของกราฟทําไดโดยหลักการของ OR เมทริกซ

Page 2: data structure lesson14

!"!

8. สามารถใชโปรแกรมคํานวณหาทรานซิทีฟโคลสเชอร 9. การคํานวณหาทรานซิทีฟโคลสเชอรของกราฟทําไดโดยอัลกอริทึมของวอรแชล

วัตถุประสงค 1. เพื่อใหผูเรียนสามารถบอกความแตกตางระหวางกราฟมีทิศทางและกราฟไมมี่ทิศทาง 2. เพื่อใหผูเรียนเขาใจถึงหลักการคํานวณหาเมทริกซของกราฟ 3. เพื่อใหผูเรียนเขาใจถึงหลักการคํานวณหาทรานซิทีฟโคลสเชอร

กิจกรรมการเรียนการสอน กิจกรรมท่ีนักศึกษาตองทําสําหรับการเรียนการสอน ไดแก 1. ศึกษาเอกสารชดุวิชา/โฮมเพจชุดวิชา ตอนที่ 14.1 ตอนที่ 14.2 และตอนที ่14.3 2. ทํากิจกรรมของบทเรียนที่ 14 3. ทําแบบประเมินผลของบทเรียนที่ 14

เอกสารประกอบการสอน 1. เอกสารชดุวิชา

สื่อการสอน 1. โฮมเพจชุดวิชา 2. สไลดประกอบการบรรยาย (Powerpoint) 3. โปรแกรมคอมพิวเตอร

ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน

Page 3: data structure lesson14

!"$

ตอนท่ี 14.1 การคํานวณระดับข้ันและระยะทางของกราฟ

หัวเรื่อง เร่ืองท่ี 14.1.1 กราฟระบุทิศทางและกราฟไมระบุทิศทาง เร่ืองท่ี 14.1.2 การคํานวณระดับข้ันของกราฟ เร่ืองท่ี 14.1.3 การคํานวณระยะทางของกราฟ

แนวคดิ 1. แนะนําคุณสมบัติกราฟที่มีทิศทางและไมมีทิศทางโดยการยกตัวอยางของการสื่อสารระหวางเมืองตาง ๆ

2. การหาระดับข้ันกราฟทําไดจาการคํานวณจากเสนเช่ือมท่ีประชิดกับบัพ 3. การคํานวณระยะทางของกราฟทําไดจาการคํานวณการเชื่อมโยงระหวางบัพในกราฟ

วัตถุประสงค หลังจากที่ศึกษาตอนที่ 14.1 แลวนักศึกษา

1. สามารถบอกความแตกตางระหวางกราฟมีทิศทางและกราฟไมมีทิศทาง 2. สามารถคํานวณหาระดับข้ันของกราฟ 3. สามารถคํานวณหาระยะทางจากบัพหนึ่งไปยังอีกบัพหนึ่ง

เรื่องที่ 14.1.1 กราฟระบุทิศทางและกราฟไมระบุทิศทาง

ตามที่ไดกลาวมาแลวตนไมเปนโครงสรางของลิสหลายมิติ อีกกรณีหน่ึงตนไมเปนโครงสรางชนิดหนึ่งของกราฟระบุทิศทาง (directed graph หรือ digraph) กราฟมีคุณสมบัติแตกตางจากตนไมในกรณีที่ กราฟไมมีราก และมีวิถีหลายวิถีเชื่อมระหวาง 2 บัพ กราฟเปนโครงสรางขอมูลที่มีประโยชน เพราะสามารถนํามาใชแกปญหาในการทํางานหลายดาน เชน สามารถใชกราฟ พิจารณาวาวงจรหนึ่งสามารถนําไปใชกับแผงวงจรไฟฟาแบบระนาบ ในกรณีของวิชาเคมีการใชกราฟทําใหเขาสามารถแยกระหวางสารเคมี 2 ชนิดที่มีสูตรโมเลกุลเหมือนกันแตมีโครงสรางตางกัน กรณีของเครือขายคอมพิวเตอรสามารถพิจารณาวาเคร่ืองคอมพวิเตอร 2 เคร่ือง ตอเชื่อมกัน ในกรณีของการส่ือสารใชโมเดลของเครือขายซ่ึงแทนดวยกราฟท่ีประกอบดวยอารกนํ้าหนัก สามารถใชหาระยะทางสั้นที่สุดในการเดินทางระหวางเมือง 2 เมือง ในการส่ือสารระหวางเมือง 2 เมือง ซ่ึงประกอบดวยอุปกรณคอมพิวเตอรและสายโทรศัพทท่ีเช่ือมระหวางเคร่ืองคอมพิวเตอรเม่ือนํามาเขียนเปนกราฟ สามารถแทนตําแหนงของคอมพิวเตอรโดยจุด และสายโทรศัพทโดยอารก ดังภาพประกอบ 14.1

Page 4: data structure lesson14

!"%

อยุธยา ปทุมธานี กรุงเทพฯ ชลบุรี เพชรบุรี

ภาพประกอบ 14.1 การส่ือสารระหวางเมืองแบบไมระบุทิศทาง

จากรูปที่ 14-1 เห็นไดวาระหวางเครื่องคอมพิวเตอร 2 เคร่ือง ประกอบดวยสายโทรศัพท 1 สาย และสายโทรศัพทแตละสายมีการทํางานสําหรับรับสงขาวสารได 2 ทาง ระบบการเชื่อมโยงแบบนี้เรียกวา กราฟแบบไมระบุทิศทาง (Undirected Graph) ซ่ึงประกอบดวยบัพ (node) แทนเครื่องคอมพิวเตอร และอารกไมระบุทิศทางแทนสายโทรศัพท ซ่ึงอารกแตละเสนเช่ือมระหวางบัพ 2 บัพ กรณีของสายโทรศัพทที่เชื่อมโยงในการสื่อสารที่ไมสามารถทํางานได 2 ทิศทาง เชน เคร่ืองคอมพิวเตอรในนครเชียงใหมสามารถรับขอมูลจากคอมพิวเตอรอื่นเขียนแทนดวยอารกระบุทิศทาง ท่ีประกอบดวยหัวลูกศรชี้เขาสูบัพเชียงใหม แตบัพนี้ไมสามารถสงขอมูลออก นอกจากน้ีสายโทรศัพทเสนอ่ืนสามารถดําเนินงานไดท้ัง 2 ทิศทาง และเขียนแทนดวยคูของอารก เขียนในทิศทางตรงกันขาม เราใชกราฟแบบระบุทิศทางแทนโมเดลทางการสื่อสาร ซึ่งอารกของกราฟระบุทิศทางแทนดวยคูอันดับและในกราฟน้ันอาจจะประกอบดวยรูป 14-2 เชียงใหม ลําปาง กรุงเทพฯ สุราษฎรธานี ภูเก็ต

ภาพประกอบ 14.2 การส่ือสารผานสายโทรศัพทระหวางเมืองแบบระบุทิศทาง

Page 5: data structure lesson14

!"&

กราฟเปนโครงสรางขอมูลชนิดหน่ึงท่ีประกอบดวย 2 สวนคือ เซตของสมาชิกที่เรียกวา บัพ (node หรือ vertices) เซตของอารกซ่ึงอารกแตละเสน ในเซตนั้นมีคุณสมบัติเฉพาะตัว กราฟ G ประกอบดวยเซตของบัพคือ {A, B, C, D, E, F, G, H} และ ประกอบดวยเซตของอารกคือ {(A,B),(A,D),(A,C),(C,D),(C,F),(E,G),(A,A)} เมื่อเขียนไดกราฟไมระบุทิศทาง ดังรูปท่ี 14-3 กราฟประกอบดวยเซตของบัพและเซตของอารก หรือ เอจ สําหรับอารกแตละเสนน้ันกําหนดโดยบัพ 1 คู

'

(

)

*

+

, -

ภาพประกอบ 14.3 กราฟไมระบุทิศทาง

กราฟระบุทิศทางประกอบดวยสมาชิกที่มีจํานวนจํากัด เรียกวา บัพ (node) รวมกับสมาชิกของเซตของอารกระบุทิศทางที่เชื่อมระหวาง 2 บัพ เชน กราฟระบุทิศทางประกอบดวย 8 บัพ คือ A B C D E F G H และประกอบดวยอารกระบุทิศทาง 7 เสน คือ AA AB AC AD CD EG FC สามารถเขียนกราฟได คือ

'

(

)

*

+

, -

.

ภาพประกอบ 14.4 กราฟระบุทิศทาง

Page 6: data structure lesson14

!""

ลูกศรที่เชื่อมระหวางบัพ v1 และ v2 ใชเขียนแทนอารก (v1,v2) หัวลูกศรชี้ไปที่บัพ v2ซ่ึงเปนบัพคูอันดับท่ีประกอบเปนอารก สวนปลายของลูกศรน้ันอยูท่ีบัพ v1 จากรูปที่ 14-4 สามารถเขียนอารกไดดังน้ี คือ {(A,A), (A,B), (A,C), (A,D), (C,D), (F,C), (E,G)}

กิจกรรม 14.1 1. ใหนักศึกษายกตัวอยางกราฟระบุทิศทางจากรูปที่ 14-1 2. ใหนักศึกษายกตัวอยางกราฟไมระบุทิศทางจากรูปที่ 14-2

เรื่องที่ 14.1.2 การคํานวณระดับขั้นของกราฟ

บัพ u และ v ในกราฟไมระบุทิศทาง G เรียกวา ประชิด (หรือเปนเพ่ือนบาน) ใน G ถา (v1,v2) เปนอารกของ G ถา e = (v1,v2) อารก e เรียกวา การตกกระทบกับบัพ v1 และ v2 ดังน้ัน อารก e เรียกไดวาเชื่อมโยงบัพ v1 และ v2 นอกจากน้ีบัพ v1 และ v2 เรียกวาจุดปลายของอารก (v1,v2) ระดับขั้นของบัพ 1 บัพในกราฟแบบไมระบุทิศทาง คือ จํานวนของอารกที่เกี่ยวของ ยกเวนบัพที่มีรูปบวงจะมีระดับขั้นเปน 2 ระดับขั้นของบัพ v เขียนแทนดวย deg(v)

ตัวอยาง 14.1

จงหาระดับขั้นของบัพในกราฟ G และ H ที่แสดงในรูป b c d a b c a f e g e d กราฟ G กราฟ H ในกราฟ G : deg(a) = 2, deg(b) = deg(c) = deg(f) = 4, deg(d) = 1, deg(e) = 3 และ deg(g) = 0 ในกราฟ H : deg(a) = 3, deg(b) = 6, deg(e) = 5, deg(c) = 1

Page 7: data structure lesson14

!"/

deg(d) = 5 ในกราฟท่ีประกอบดวยอารกท่ีระบุทิศทาง ระดับขั้นในของบัพ v ซึ่งเขียนแทนดวย deg- (v) คือ จํานวนของอารกที่ระบุทิศทางชี้ไปยังบัพนั้น ระดับข้ันนอกของ v เขียนแทนดวย deg+ (v) คือ จํานวนของอารกที่มีจุดเริ่มตนมาจากบัพ v a b c e d f ระดับข้ันในของกราฟ G มีดังน้ี deg- (a) = 2, deg- (b) = 2, deg- (c) = 3, deg - (d) = 2, deg - (e) = 3, deg- (f) = 0, ระดับข้ันนอกของกราฟ G คือ deg + (a) = 4, deg+ (b) = 1, deg + (c) = 2, deg + (d) = 2, deg + (e) = 3, deg + (f) = 0,

'

) (

+* ,

-

012

'

) (

*

032 ภาพประกอบ 14.5 (a) ตนไมหรือกราฟที่ปราศจากบวง (b) กราฟประกอบดวยบวง

Page 8: data structure lesson14

!"4

ระดับขั้น ของบัพ คือจํานวนของอารกที่ประชิดกับบัพ ในกรณีของกราฟแบบระบุทิศทางระดับขั้นคือผลรวมของ ระดับขั้นใน และระดับข้ันนอก เชน รูปที่ 14-5 (b) น้ัน บัพ A มีระดับขั้นใน 1 ระดับข้ันนอก 2 ฉะน้ัน ระดับขั้น 3

กิจกรรม 14.2 1. ใหนักศึกษาคํานวณหาระดับขั้นของกราฟในรูปที่ 14-3 2. ใหนักศึกษาคํานวณหาระดับขั้นนอกและระดับขั้นในของกราฟในรูปที่ 14-4

เรื่องที่ 14.1.3 การคาํนวณระยะทางของกราฟ

ระยะทาง k จากบัพ a ไปยังบัพ b ไดรับการกําหนดเปนแบบลําดับ ของ k+1 บัพ เมื่อ n1, n2, .........,nk+1 และ n1=a, nk+1=b adjacent (ni, ni+1) เปนจริง สําหรับ i อยูระหวาง 1 ถึง k ถาระยะทางของ k มีอยูจริงระหวาง a และ b แลว มีทางเชื่อมจาก a ไปยัง b วัฎจักร เปนวิถีจากบัพถึงตัวเอง กราฟวัฎจักร คือกราฟที่ประกอบดวยวัฎจักร กราฟอวัฎจักร คือกราฟที่ไมมีวัฎจักร

.

)

,

-

+

(

' *

ภาพประกอบ 14.6 กราฟระบุทิศทางประกอบดวยวัฎจักร

เม่ือพิจารณารูปท่ี 14-6 เห็นไดวา จาก A ถึง C นั้นม ี1 ระยะทาง จาก B ถึง G นั้นม ี2 ระยะทาง จาก B ถึง C นั้นไมมีทางเชื่อม

Page 9: data structure lesson14

!"5

จาก B ถึง B นั้นม ี2 วัฎจักร จาก F ถึง F นั้นม ี2 วัฎจักร จาก H ถึง H นั้นม ี2 วัฎจักร

กิจกรรม 14.3 ใหนักศึกษาหาระยะทางระหวางบัพตาง ๆ ในกราฟรูปที่ 14-5 (a) และ (b)

ตอนท่ี 14.2 เมทริกซของกราฟ

หัวเรื่อง เร่ืองท่ี 14.2.1 เมทริกซประชิด เร่ืองท่ี 14.2.2 เมทริกซวิถี

แนวคดิ 1. การแทนกราฟในหนวยความจําสามารถทําไดในรูปของแถวลําดับ 2 มิติหรือเมทริกซโดยใหแตละบัพของกราฟแทนดวยดัชนีของแถวลําดับ

2. เมทริกซประชิดใชแทนการเชื่อมโยงระหวางบัพ 2 บัพในกราฟแบบมีทิศทางและไมมีทิศทาง โดยการเดินทางระหวาง 2 บัพนั้นไมผานบัพใด ๆ

3. เมทริกซวิถีใชแทนการเชื่อมโยงระหวางบัพในกราฟแบบมีทิศทางและไมมีทิศทาง

วัตถุประสงค หลังจากที่ศึกษาตอนที่ 14.2 แลวนักศึกษา 1. สามารถเขียนเมทริกซประชิดของกราฟจากรูปที่กําหนดให 2. สามารถคํานวณหาเมทริกซวิถีของกราฟจากรูปที่กําหนดให

เรื่องที่ 14.2.1 เมทริกซประชิด

การแทนกราฟในหนวยความจํานั้นสามารถทําไดโดยการนําขอมูลของกราฟเก็บไวในแถวลําดับ 2 มิติ หรือ เมทริกซ โดยใหบัพของกราฟแทนดวยดรรชนีของแถวลําดับ

กําหนดใหกราฟ G ประกอบดวยเซตของบัพ VG และเซตของอารก EG ซ่ึง |VG| = n สมมติใหกราฟอยูในลําดับของ n เมื่อ n >= 1 การแทนกราฟสามารถทําไดโดยเมทริกซประชิด ซึ่งแทนไดโดย แถวลําดับ A ที่มีขนาด n × n ซ่ึง

Page 10: data structure lesson14

!/6

A(i, j) = 1 ถา vi ประชิดกับ vj = 0 กรณีอ่ืนๆ ถามีอารกเชื่อมระหวางบัพ i และ j ดังน้ัน A(i, j) = 1 เมทริกซ A ประกอบดวยคาภายใน 0 และ 1 เรียกวา บิต เมทริกซ หรือ บูลีน เมทริกซ เมทริกซประชิด A ของกราฟ G ข้ึนกับการเรียงลําดับของบัพในกราฟ G ดังนั้นการเรียงลําดับของบัพที่แตกตางกันจะใหเมทริกซประชิดที่ตางกัน อยางไรก็ตามสมมติวาบัพของกราฟ G มีการเรียงลําดับคงท่ี กําหนดให G เปนกราฟไมระบุทิศทาง ดังน้ันเมทริกซประชิด A ของกราฟ G เปนเมทริกซสมมาตร ซ่ึง aij = aji ทุก i และ j

!

#

$

"

% & ภาพประกอบ 14.7 กราฟไมระบุทิศทาง

เมทริกซประชิด สําหรับกราฟ รูปที่ 14-7 คือ

i j 1 2 3 4 5 6 1 0 1 0 0 0 0 2 1 1 1 0 0 0 3 0 1 0 1 1 1 4 0 0 1 0 0 0 5 0 0 1 0 0 0 6 0 0 1 0 0 0

อารกของกราฟระบุทิศทางมีแหลงกําเนิดในบัพหนึ่ง และจบที่อีกบัพหนึ่ง arc(vi, vj) แทนทิศทางจากบัพ vi ไปยังบัพ vj

Page 11: data structure lesson14

!/#

!

#

$

"

%&

ภาพประกอบ 14.8 กราฟระบุทิศทาง

เมทริกซประชิดรูปที่ 14-8 สามารถเขยีนไดดังน้ี

i j 1 2 3 4 5 6 1 0 1 0 0 0 0 2 0 1 1 0 0 0 3 0 0 0 0 1 1 4 0 0 1 0 0 0 5 0 0 0 0 0 0 6 0 0 0 0 0 0

กราฟขนาด n นั้นม ีเมทริกซประชิด ขนาด n x n ในกรณีของกราฟไมระบุทิศทางมีคุณสมบัต ิคือ สมมาตร อารก (i, j) มีคา 1 ถามีอารกระหวางบัพ i และ j ถาไมมีอารกระหวางบัพ i และบัพ j arc(i, j) มีคาเปน 0 กําหนดกราฟ G ใหบัพนั้นเก็บในหนวยความจํา ในแถวลําดับ 1 มิติ DATA DATA : X, Y, Z, W และ อารกเก็บในเมทริกซ สมมติใหการเรียงลําดับของบัพใน G มีดังน้ี v1 = X, v2 = Y, v3 = Z และ v4 = W

เมทริกซประชิด A ของกราฟ G 0 0 0 1

Page 12: data structure lesson14

!/!

A = 1 0 1 1 1 0 0 1 0 0 1 0

หมายเหตุ : จํานวนของเลข 1 ใน เมทริกซ A เทากับจํานวนของ อารก ใน G

X Y

W Z

ภาพประกอบ 14.9 กราฟระบุทิศทางของเมทริกซประชิด A

เม่ือพิจารณากําลัง A, A2, A3 ของเมทริกซประชิด A ของกราฟ G โดยให ak (i,j) = การเขาใน เมทริกซ Ak ครั้งที่ ij ขอสังเกต a1(i,j) = aij แทนจํานวนวิถี ที่มีความยาว 1 จากบัพ vi ถึงบัพ vj

a2(i,j) บอกจํานวนวิถี ความยาว 2 จาก vi ถึง vj

ขอสมมติ 1. ให A เปนเมทริกซประชิดของกราฟ G ดังน้ันเม่ือการเขาเมทริกซ A ใน ak(i,j) โดย Ak ที ่ij จะมีจํานวนวิถี ที่มีความยาว k จาก vi ถึง vj

v1 = X, v2 = Y, v3 = Z และ v4 = W

เม่ือพิจารณาถึงกราฟ G ในรูปที ่14-9 ซึ่งมีเมทริกซประชิด A ที่กําหนดใหในตัวอยางที่ 14-1 เม่ือคํานวณผลคูณของเมทริกซ A ได A2 A3 และ A4 ดังน้ี

Page 13: data structure lesson14

!/$

0 0 1 0 1 0 0 1

A2 = 1 0 1 2 A3 = 1 0 2 2 0 0 1 1 1 0 1 1 1 0 0 1 0 0 1 1

0 0 1 1 A4= 2 0 2 3

1 0 1 2 1 0 1 1

จากเมทริกซ A2 จะเห็นวามี 1 วิถี ที่มีความยาว 2 จาก v4 ไปยัง v1 เชนวิถี v4ไป v3 และ วิถี v3 ไป v1

ใน A3 มีวิถีความยาว 3 จํานวน 2 วิถี จาก v2 ไป v3 ใน A4 มีวิถีความยาว 4 จํานวน 3 วิถี จาก v2 ไป

v4 ในที่นี้

กําหนดใหเมทริกซ Br = A+A2+A3+...+Ar

ดังน้ัน การเขาไปท่ีเมทริกซ Br ที ่ij จะใหจํานวนวิถีที่มีความยาว r หรือนอยกวาจาก บัพ vi ถึง vj

กิจกรรม 14.4

จงหาเมทริกซประชิดของกราฟ

7 8

9 :

จงตอบวากราฟในขอ 1 เปนกราฟมีทิศทางหรือไมมีทิศทาง

Page 14: data structure lesson14

!/%

เรื่องที่ 14.2.2 เมทริกซวิถี

ให G เปนกราฟระบุทิศทางประกอบดวย บัพ v1, v2, ..., vm จํานวนทั้งสิ้น m บัพ

เมทริกซวิถี (Path Matrix) หรือ เมทริกซที่เชื่อมไดของ G คือ เมทริกซ P ขนาด m × m ซ่ึง P = (pij) สามารถกําหนดไดดังตอไปน้ี

Pij = 1 ถามีวิถีจาก vi ไป vj

0 กรณีอ่ืนๆ

สมมติวามีวิถี จาก vi ไปยัง vj กลาวไดวามีวิถีเชิงเดียวจาก ไปi ไปยัง vj เมื่อ vi < > vj หรืออีกกรณีหน่ึงมีวัฎจักร (cycle) จาก vi ไปยัง v j เมื่อ vi = vj

เน่ืองจากกราฟ G ประกอบดวย m บัพ และมีวิถีเชิงเดียวมีความยาวนอยกวาหรือเทากับ m-1 หรือวัฏจักรของกราฟ G มีความยาวนอยกวาหรือเทากับ m

สิ่งนี้หมายความวามีการเขาถึงของวิถี ij ในเมทริกซ Bm อยางนอยหนึ่งครั้งโดยกําหนดจากสวนของเมทริกซที่มากอนหนา ดังนั้นจึงสามารถกําหนดความสัมพันธระหวาง วิถีของเมทริกซ P และเมทริกซประชิด A ขอสมมติ 2 ให A เปนเมทริกซประชิดและให P = (pij) เปนเมทริกซวิถีของกราฟที่ระบุทิศทาง G ดังน้ัน

Pij = 1 ก็ตอเมือ่ มีการเขาถึงเมทริกซที่ตําแหนง ij อยางนอย 1 คร้ัง

เมทริกซ Bm = A+A2+A3+...+Am

พิจารณากราฟ G ประกอบดวย 4 บัพ สําหรับ การบวกเมทริกซ A A2 A3 และ A4 เขาดวยกันเปน เมทริกซ B4 และแทนการเขาถึงบัพใน B4 ดวย 1 ดังน้ันจึงไดเมทริกซ วิถี P ของกราฟ G :

1 0 2 3 1 0 1 1 B4 = 5 0 6 8 และ P = 1 0 1 1

3 0 3 5 1 0 1 1 2 0 3 3 1 0 1 1

Page 15: data structure lesson14

!/&

พิจารณาเมทริกซ P จะเห็นวา ทุกบัพไมสามารถไปถึงบัพ v2

กิจกรรม 14.5

กําหนดกราฟ G (ก) จงหาวิถีทั้งหมดจากบัพ X ไปยังบัพ W (ข) จงหาวิถีทั้งหมดจากบัพ X ไปบัพ Z (ค) หาระดับขั้นใน และระดับข้ันนอกของ Y

7 8

9 :

กราฟ G

Page 16: data structure lesson14

!/"

ตอนท่ี 14.3 ทรานซิทีฟโคลสเชอร

หัวเรื่อง เร่ืองท่ี 14.3.1 ทรานซิทีฟโคลสเชอร เร่ืองท่ี 14.3.2 อัลกอริทึมของวอรแชล

แนวคดิ 1. การคํานวณหาทรานซิทีฟโคลสเชอรของกราฟทําไดโดยหลักการของ OR เมทริกซ 2. สามารถใชโปรแกรมคํานวณหาทรานซิทีฟโคลสเชอร 3. การคํานวณหาทรานซิทีฟโคลสเชอรของกราฟทําไดโดยอัลกอริทึมของวอรแชล

วัตถุประสงค หลังจากที่ศึกษาตอนที่ 14.3 แลวนักศึกษา 1. สามารถคํานวณหาทรานซิทีฟโคลสเชอรของกราฟโดยหลักการของ OR เมทริกซ 2. สามารถคํานวณหาหาทรานซิทีฟโคลสเชอรของกราฟทําไดโดยหลักการของ วอรแชล 3. สามารถเขียนโปรแกรมในการหาทรานซิทีฟโคลสเชอร

เรื่องที่ 14.3.1 ทรานซิทีพโคลสเชอร

ทรานซิทีฟโคลสเชอร ของความสัมพันธ R เปนความสัมพันธแบบถายทอดที่เกิดขึ้นใน R เมื่อ R เปนความสัมพันธในเซต A ที่มีวิถีระหวาง a และ b ใน R เน่ืองจาก R n ประกอบดวยคูอันดับ (a,b) ดังน้ัน มีวิถีความยาว n จาก a ไปยัง b

ความสัมพันธใน R * ประกอบดวยคูอันดับของ (a,b) ซ่ึง R * เปนผลผนวกของเซตทั้งหมดใน R n R *= n=1∪

∝ R n = R ∪ R 2 ∪ R 3 ∪ R 4 …∪ R n

ตัวอยาง 14.2

ให R เปนความสัมพันธในเซตของปายหยุดรถประจําทางใน กทม.ท่ีประกอบดวยคูอันดับ (a,b) ถาตองการเดินทางจากจดุ a ไปยังจุด b โดยไมมีการเปล่ียนรถประจําทาง จงหา R * และ Rn เมื่อ n เปนจํานวนเต็มบวก

Page 17: data structure lesson14

!//

ความสัมพันธ R n ประกอบดวยคูอันดับ (a,b) ถามีการเดินทางจากจุด a ไปยังจุด b โดยเปล่ียนรถประจําทาง จํานวน n-1 คร้ัง ความสัมพันธ R * ประกอบดวยคูอันดับ (a,b) ซึ่งเดินทางจากจุด a ไปยังจุด b โดยเปลี่ยนรถประจําทางไดตามจํานวนครั้งที่ตองการ

ฉะน้ัน ทรานซิทีฟโคลสเชอรของความสัมพันธ R เทากับความสัมพันธ R * ให A เปนเมทริกซของความสัมพันธ R ในเซตที่มีสมาชิกเปน 0 หรือ 1 ทั้งหมด n ตัว ดังน้ันเมทริกซ ของ ทรานซิทีฟโคลสเชอร R * คือ

AR*= A ∨ A2 ∨ A3 ∨ … ∨ An จงหาเมทริกซของทรานซิทีฟโคลสเชอรของความสัมพันธ R เมื่อ 1 0 1 A = 0 1 0 1 1 0 เมทริกซของ R* คือ AR* = A ∨ A2 ∨ A3

เพราะวา 1 1 1 A2 = 0 1 0 1 1 1 1 1 1 A3 = 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 AR* = 0 1 0 ∨ 0 1 0 ∨ 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 = 0 1 0

Page 18: data structure lesson14

!/4

1 1 1

ทรานซิทีพโคลสเชอร ของกราฟ Gไดรับการกําหนดใหเปนกราฟ G' ซ่ึง G' ประกอบดวยบัพเดียวกับ G และอารก (vi,vj) ใน G' ซึ่งมีวิถีจาก vi ไปยัง vj เชนเดียวกับใน G ดังน้ัน วิถีเมทริกซ P ของกราฟ G น้ันเปนเมทริกซประชิดของ ทรานซิทีพโคลสเชอร

เมทริกซประชิด A และเมทริกซวิถี P ของกราฟ G สามารถเขียนดวยเมทริกซตรรกวิทยา ซ่ึงคาภายในเมทริกซ 0 แทน "เท็จ" และ 1 แทน "จริง" ดังน้ันการดําเนินการทางตรรกวิทยา ของ ∧ (AND) และ ∨ (OR) สามารถนําไปใชในเมทริกซ A และ P คาของ ∧ และ ∨ ปรากฏใน รูปที่ 14-10

∧ 0 1 ∨ 0 1 0 0 0 0 0 1 1 0 1 1 1 1

(a) AND (b) OR

ภาพประกอบ 14.10 ตารางคาของตัวดําเนินการทางตรรกวิทยา and และ or

การเขียนโปรแกรมกราฟดวยภาษาปาสกาล

การใชภาษาปาสกาลเขียนกราฟน้ัน สามารถทําไดโดยกําหนดใหใชโครงสรางแบบแถวลําดับ สมมติใหจํานวนบัพของกราฟมีคาคงที่โดยสามารถกําหนดไดดังนี้

const maxnodes = 50;

type nodeptr = 1..maxnodes;

edge = record

adj : boolean;

(*information associated with each edge*)

end;

node = record

(*information associated with each node*)

graph = record

nodes : array[nodeptr] of node;

arcs : array[nodeptr, nodeptr] of edge

end;

var

g : graph;

แตละบัพของกราฟ แทนดวยตัวเลขระหวาง 1 ตัว ถึง maxnodes สําหรับเขตของแถวลําดับชื่อ nodes ใชเก็บขอมูลที่กําหนดให

Page 19: data structure lesson14

!/5

เขต arcs คือ แถวลําดับ 2 มิติ ที่ใชแทนบัพแตละคู โดยคาภายในของ g.arcs [i,j].adj เปนคาทางตรรกซึ่งจะมีคาเปนจริงหรือเท็จขึ้นอยูกับเงื่อนไขที่บัพ j เชื่อมตอบัพ i หรือไม กรณีของแถวลําดับ 2 มิติ g.arcs[nodeptr, nodeptr].adj น้ันเรียกวา เมทริกซประชิด เมื่อใชกราฟน้ําหนักที่ประกอบบัพจํานวนคงที่ สามารถกําหนดไดโดย

type

edge = record

adj : boolean;

weight : integer

end;

arc = array[nodeptr, nodeptr] of edge;

var g : arcs;

สามารถเขียนกระบวนงาน joinwt ซึ่งเพิ่มอารกจากบัพ 1 ไปยังบัพ 2 โดยอารกน้ันมีนํ้าหนัก wt

procedure joinwt (var g:arcs;nodel,node2:nodeptr;wt:integer);

begin

g[node1, node2].adj := true;

g[node1, node2].weight := wt

end (*procedure joinwt*);

ในบางโอกาสไมไดใสขอมูลในบัพ ดังนั้นจึงไมมีน้ําหนัก หรือขอมูลอ่ืนท่ีอารก จึงสามารถกําหนดกราฟไดดังน้ี

const maxnodes = 50:

type nodeptr = 1..maxnodes;

adjmatrix = array[nodeptr,nodeptr] of boolean;

var adj : adjmatrix;

ในกรณีน้ีกราฟอธิบายไดโดยเมทริกซประชิด

Page 20: data structure lesson14

!46

procedure join (var adj : adjmatrix; node1,node2:nodeptr);

begin (*เพ่ิมอารกจาก node1 ไปที่ node*) adj [node1,node2] := true

end ; (*procedure join*)

procedure remv (var adj : adjmatrix; node1,node2:nodeptr);

begin (*ลบอารกจาก node1 ไปที่ node2*) adj [node1,node2] := false

end ; (*procedure remv*)

function adjacent (adj : adjmatrix; node1,node2:nodeptr) :boolean;

begin (*ทดสอบวามีอารกจาก node l ไปยัง node2*) if adj [node1,node2] = true then

adjacent := true

else

adjacent := false

end;

procedure transclose (adj : adjmatrix ; var P : adjmatrix);

var i, j, k : nodeptr;

newprod, adjprod : adjmatrix;

begin

adjprod := adj;

P : = adj;

for i : = 1 to maxnodes-1

(* i represents the number of times adj has*)

(*been multiplied by itseft to obtain*)

(*adjprod. At this Point path represent*)

(*all paths of length i or less*)

do begin

prod(adjprod, adj, newprod);

for j : = 1 to maxnodes

for k:= 1 to maxnodes do

do P[j, k] : = P[j, k] or newprod[j, k];

adjprod : = newprod

end (*for..i begin*)

end (*procedure transclose*);

เขียนรูทีน prod เพ่ือหาผลคูณของเมทริกซไดดังน้ี

Page 21: data structure lesson14

!4#

procedure prod(a, b : adjmatrix; var c:adjmatrix);

var

val : boolean;

i,j,k : integer;

begin

for i := 1 to maxnodes (*pass thru rows*)

do for j := 1 to maxnodes

(*pass thru columns*)

do begin (*compute C[i,j]*)

val := false;

for k := 1 to maxnodes

do val := val or (a[i,k] and b[k,j]);

C[i,j] := val

end (*for..do begin*)

end (*procedure prod*);

กิจกรรม 14.6

จากเมทริกซประชิด Adj และเมทริกซ ของ ขอมูล (data) กําหนดใหจงคํานวณหาทรานซิทีฟโคลสเชอรของกราฟโดยหลักการของ OR เมทริกซ (ก)

0 1 0 1 01 1 1 0 00 0 0 0 10 1 0 0 10 0 0 0 0

Adj = Data =

ABCDE

(ข)

0 1 1 10 0 1 10 0 0 10 0 0 0

Adj = Data =

CATRATBATDOG

เรื่องที่ 14.3.2 อัลกอริทึมของวอรแชล

วิธีการหาทรานซิทีฟ โคลสเซอร โดยวิธีที่ไดกลาวไปแลวนั้นเปนวิธีที่ยังไมมีประสิทธิภาพดีเทาที่ควร ดังนั้นมีผูคิดอัลกอริทึมขึ้นมาใหมเรียกวา วอรแชลอัลกอริทึม (Warshall’s Algorithm) เพ่ือใชสรางทรานซิทีฟโคลสเชอร

Page 22: data structure lesson14

!4!

ให G เปนกราฟระบุทิศทางประกอบดวย m บัพ ดังนี้คือเริ่มจากบัพ v1, v2, ..., vm สมมติวาตองการหาเมทริกซวิถี P ของกราฟ G วอรแชลใหอักลอริทึมสําหรับจุดประสงคนี้ซึ่งมีประสิทธิภาพมากวาการคูณของเมทริกซประชิด A

การอธิบายอัลกอริทึมของวอรแชลจะกลาวในตอนตอไป และนําอัลกอริทึมของวอรแชลไปใชในการหาระยะทางท่ีส้ันท่ีสุด (shortest path) ใน G เมื่อ G เปนกราฟมีนํ้าหนัก และระบุทิศทาง โดยทั่วไปวิถีเชิงเดียว ของกราฟคือ วิถีที่ประกอบดวยอารกซึ่งไมซ้ํากัน เร่ิมแรกกําหนด เมทริกซทางตรรกวิทยาขนาด mxm ไดแก P0, P1, ..., Pm ตามลําดับ โดยให Pk[i,j] แทนการเขาถึงของวิถี ij ในเมทริกซ Pk สามารถกําหนดไดวา

Pk[i,j] = 1 ถามีวิถีเชิงเดียว 1 เสนทางจาก vi ไปยัง vj ซึ่งไมใชวิถีผานบัพอื่นๆ ยกเวน v1, v2,..., vk Pk[i,j] = 0 กรณีอ่ืนๆ

P0[i,j] = 1 ถามีอารก 1 เสนจาก vi ไปยัง vj

P1[i,j] = 1 ถามีวิถีเชิงเดียว 1 เสนทางจาก vi ไปยัง vj ซึ่งไมใชวิถีผานบัพอื่นๆ ยกเวน v1

P2[i,j] = 1 ถามีวิถีเชิงเดียว 1 เสนทางจาก viไปยัง vj ซึ่งไมใชวิถีผานบัพอื่นๆยกเวน v1 และv2

เริ่มสังเกตวา เมทริกซ P0 = A (เมทริกซประชิดของ G) เพราะวา G ประกอบดวย m บัพ และ เมทริกซสุดทาย Pm = เมทริกซ P ซึ่งเปนวิถี เมทริกซของ G

วอรแชลสังเกตวา Pk[i,j] = 1 เกิดข้ึนเม่ือเหตุการณใดเหตุการณหน่ึง ใน 2 กรณีท่ีเกิดข้ึน

(1) มีวิถีเชิงเดียวจาก vi ไปยัง vj ซึ่งไมใชบัพอื่นๆ ยกเวน v1, v2, ..., vk-1

ดังน้ัน Pk-1[i,j] = 1

(2) มีวิถีเชิงเดียวจาก vi ไปยัง vk และวิถีเชิงเดียวจาก vk ไปยัง vj ซึ่งแตละวิถีไมผานบัพอื่นๆ ยกเวน v1, v2, ..., vk-1 ดังน้ัน

Pk-1[i,k] = 1 และ Pk-1[k,j] = 1

จาก 2 กรณีน้ีสามารถเขียนแทนไดดวยรูป ดังน้ี vi ---> ... ---> vj vi ---> ... ---> vk ---> ... --->vj

Page 23: data structure lesson14

!4$

(a) กรณีท่ี 1 วิถีเชิงเดียวจาก vi ไปยัง vj (b) กรณีท่ี 2 บัพ v i เชื่อมกับ vj โดยผาน vk

ฉะนั้นสมาชิกของเมทริกซ Pk สามารถคํานวณไดจาก

Pk [i,j] = Pk-1[i,j] ∨ (Pk-1[i,k] ∧ Pk-1[k,j] )

การคาํนวณอลักอริทึมของวอรแชล

อัลกอริทึมของกราฟระบุทิศทาง G ซ่ึงประกอบดวย m บัพ กราฟน้ีเก็บในหนวยความจํา โดยใชเมทริกซประชิด A อัลกอริทึมนี้หาเมทริกซวิถี P (แบบตรรกวิทยา) ของกราฟ G 1. ทําซํ้า for I, J = 1, 2, ..., M : [กําหนดคาเริ่มตน P] If A[I, J] = 0, then ให P[I, J] = 0 Else : ให P[I, J]: = 1 [end of loop] 2. ทําซํ้า ขั้นตอน 3 และ 4 for K = 1, 2, ..., M: [เปล่ียนแปลงคาในเมทริกซ P] 3. ทําซํ้า ขั้นตอน 4 for I = 1, 2, ..., M: 4. ทําซํ้า for J = 1, 2, ..., M: ให P[I,J]:= P[I,J]∨ (P[I,K]∧ P[K,J]) [จบการวนซ้ํา] [จบการวนซ้ําของขั้นตอน 3] [จบการวนซ้ําของขั้นตอน 2] จบการทํางาน

กิจกรรม 14.7

จากเมทริกซประชิดที่ Adj และเมทริกซ ของ ขอมูล (data) กําหนดใหจงคํานวณหาทรานซิทีฟโคลสเชอรของกราฟโดยอัลกอริทึมสของ วอรแชล (ก)

0 1 0 1 01 1 1 0 00 0 0 0 10 1 0 0 10 0 0 0 0

Adj = Data =

ABCDE

Page 24: data structure lesson14

!4%

(ข)

0 1 1 10 0 1 10 0 0 10 0 0 0

Adj = Data =

CATRATBATDOG