!"#
แผนการสอนประจําบทเรียน รายชือ่ อาจารยผจู ดั ทํา อนงคนาฏ ศรีวหิ ค ตอนที่ 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 เมทริกซ
!"! 8. สามารถใชโปรแกรมคํานวณหาทรานซิทีฟโคลสเชอร 9. การคํานวณหาทรานซิทีฟโคลสเชอรของกราฟทําไดโดยอัลกอริทึมของวอรแชล วัตถุประสงค 1. เพื่อใหผูเรียนสามารถบอกความแตกตางระหวางกราฟมีทิศทางและกราฟไมมี่ทิศทาง 2. เพื่อใหผูเรียนเขาใจถึงหลักการคํานวณหาเมทริกซของกราฟ 3. เพื่อใหผเู รียนเขาใจถึงหลักการคํานวณหาทรานซิทีฟโคลสเชอร กิจกรรมการเรียนการสอน กิจกรรมทีน่ กั ศึกษาตองทําสําหรับการเรียนการสอน ไดแก 1. ศึกษาเอกสารชุดวิชา/โฮมเพจชุดวิชา ตอนที่ 14.1 ตอนที่ 14.2 และตอนที่ 14.3 2. ทํากิจกรรมของบทเรียนที่ 14 3. ทําแบบประเมินผลของบทเรียนที่ 14 เอกสารประกอบการสอน 1. เอกสารชุดวิชา สื่อการสอน 1. โฮมเพจชุดวิชา 2. สไลดประกอบการบรรยาย (Powerpoint) 3. โปรแกรมคอมพิวเตอร ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน
!"$ ตอนที่ 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
!"% อยุธยา ปทุมธานี กรุงเทพฯ ชลบุรี เพชรบุรี ภาพประกอบ 14.1 การสือ่ สารระหวางเมืองแบบไมระบุทศิ ทาง จากรูปที่ 14-1 เห็นไดวาระหวางเครื่องคอมพิวเตอร 2 เครือ่ ง ประกอบดวยสายโทรศัพท 1 สาย และสายโทรศัพทแตละสายมีการทํางานสําหรับรับสงขาวสารได 2 ทาง ระบบการเชื่อมโยงแบบนี้เรียกวา กราฟแบบไมระบุทิศทาง (Undirected Graph) ซึง่ ประกอบดวยบัพ (node) แทนเครื่องคอมพิวเตอร และ อารกไมระบุทิศทางแทนสายโทรศัพท ซึง่ อารกแตละเสนเชือ่ มระหวางบัพ 2 บัพ กรณีของสายโทรศัพทที่เชื่อมโยงในการสื่อสารที่ไมสามารถทํางานได 2 ทิศทาง เชน เครือ่ ง คอมพิวเตอรในนครเชียงใหมสามารถรับขอมูลจากคอมพิวเตอรอื่นเขียนแทนดวยอารกระบุทิศทาง ทีป่ ระกอบ ดวยหัวลูกศรชี้เขาสูบัพเชียงใหม แตบัพนี้ไมสามารถสงขอมูลออก นอกจากนีส้ ายโทรศัพทเสนอืน่ สามารถ ดําเนินงานไดทง้ั 2 ทิศทาง และเขียนแทนดวยคูของอารก เขียนในทิศทางตรงกันขาม เราใชกราฟแบบระบุทิศทางแทนโมเดลทางการสื่อสาร อันดับและในกราฟนัน้ อาจจะประกอบดวยรูป 14-2
ซึ่งอารกของกราฟระบุทิศทางแทนดวยคู
เชียงใหม ลําปาง กรุงเทพฯ สุราษฎรธานี ภูเก็ต
ภาพประกอบ 14.2 การสือ่ สารผานสายโทรศัพทระหวางเมืองแบบระบุทศิ ทาง
!"& กราฟเปนโครงสรางขอมูลชนิดหนึง่ ทีป่ ระกอบดวย 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 กราฟระบุทศิ ทาง
!"" ลูกศรที่เชื่อมระหวางบัพ 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
a
f
c
d
e
a
g
e
กราฟ G
c
d กราฟ H
ในกราฟ G : deg(a) = 2, deg(b) = deg(c) = deg(f) = 4, deg(d) = 1, deg(e) = 3 และ
b
deg(g) = 0
ในกราฟ H : deg(a) = 3, deg(b) = 6, deg(e) = 5, deg(c) = 1
!"/ deg(d) = 5 ในกราฟทีป่ ระกอบดวยอารกทีร่ ะบุทศิ ทาง ระดับขั้นในของบัพ v ซึ่งเขียนแทนดวย deg- (v) คือ จํานวนของอารกที่ระบุทิศทางชี้ไปยังบัพนั้น ระดับขัน้ นอกของ v เขียนแทนดวย deg+ (v) คือ จํานวนของอารกที่มีจุดเริ่มตนมาจากบัพ v
a
b
e
d
c
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) กราฟประกอบดวยบวง
!"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 นั้นไมมีทางเชื่อม
!"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
!/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
!/# "
!
$
#
&
%
ภาพประกอบ 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
!/! A=
1 0 1 1 1 0 0 1 0 0 1 0
หมายเหตุ : จํานวนของเลข 1 ใน เมทริกซ A เทากับจํานวนของ อารก ใน G X
W
Y
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 ดังนี้
!/$ 0 0 1 0 2
A =
1 0 0 1 3
1 0 1 2
A =
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 เปนกราฟมีทิศทางหรือไมมีทิศทาง
!/% เรื่องที่ 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 B4 =
5 0 6 8
1 0 1 1 และ
P=
1 0 1 1
3 0 3 5
1 0 1 1
2 0 3 3
1 0 1 1
!/& พิจารณาเมทริกซ P จะเห็นวา ทุกบัพไมสามารถไปถึงบัพ v2 กิจกรรม 14.5 กําหนดกราฟ G (ก) จงหาวิถีทั้งหมดจากบัพ X ไปยังบัพ W (ข) จงหาวิถีทั้งหมดจากบัพ X ไปบัพ Z (ค) หาระดับขั้นใน และระดับขัน้ นอกของ Y 7
8
9
:
กราฟ G
!/" ตอนที่ 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 เปน จํานวนเต็มบวก
!// ความสัมพันธ 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
0
1
0
∨ 0
1
0
∨ 0
1
0
1
1
0
1
1
1
1
1
1
1
1
1
0
1
0
AR* =
=
!/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 ใชเก็บขอมูลที่กําหนดให
!/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;
ในกรณีนก้ี ราฟอธิบายไดโดยเมทริกซประชิด
!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 เพือ่ หาผลคูณของเมทริกซไดดงั นี้
!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 0 0
Adj =
1 1 0 1 0
0 1 0 0 0
1 0 0 0 0
0 0 1 1 0
Data =
A B C D E
(ข)
Adj =
0 0 0 0
1 0 0 0
1 1 0 0
1 1 1 0
CAT RAT Data = BAT DOG
เรื่องที่ 14.3.2 อัลกอริทึมของวอรแชล วิธีการหาทรานซิทีฟ โคลสเซอร โดยวิธีที่ไดกลาวไปแลวนั้นเปนวิธีที่ยังไมมีประสิทธิภาพดีเทาที่ควร ดังนั้นมีผูคิดอัลกอริทึมขึ้นมาใหมเรียกวา วอรแชลอัลกอริทมึ (Warshall’s Algorithm) เพือ่ ใชสรางทรานซิ ทีฟโคลสเชอร
!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
!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) กําหนดใหจงคํานวณหาทรานซิทฟี โคลส เชอรของกราฟโดยอัลกอริทมึ สของ วอรแชล (ก)
Adj =
0 1 0 0 0
1 1 0 1 0
0 1 0 0 0
1 0 0 0 0
0 0 1 1 0
Data =
A B C D E
!4% (ข)
Adj =
0 0 0 0
1 0 0 0
1 1 0 0
1 1 1 0
CAT RAT Data = BAT DOG