data structure lesson14

Page 1

!"#

แผนการสอนประจําบทเรียน รายชือ่ อาจารยผจู ดั ทํา อนงคนาฏ ศรีวหิ ค ตอนที่ 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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.