ครั้งที่ 16

Download Report

Transcript ครั้งที่ 16

887110
Introduction to discrete
structure
บทที่ 9 ตนไม
้
้
1
ภาพรวมเนื้อหา
• นิยามและตัวแบบตนไม
้
้ (Definition and tree
model)
• การประยุกตใช
์ ้ตนไม
้
้ (Tree application)
• การแวะผานต
นไม
่
้
้ (Tree traversal)
• ต้นไมแผ
้ ทั
่ ว่ (Spanning tree)
• ต้นไมแผ
้ ทั
่ ว่ น้อยสุด (Minimum spanning
tree)
2
นิยามตนไม
้
้
• นิยาม ตนไม
คื
้
้ อกราฟชนิดหนึ่งซึง่ ตอถึ
่ งกันและ
ไมมี
่ วงจรใดๆ
• ตัวอยาง
กราฟดังรูป เป็ นกราฟธรรมดา (ไม่
่
มีลป
ู ไมมี
่ มขนาน) ดังนั้น ทัง้ สองรูป
่ เส้นเชือ
คือ ตนไม
้
้
• เราเรียกจุดในตนไม
ที
่ ด
ี ก
ี รีเป็ น 1 วา่ จุด
้
้ ม
3
คุณสมบัตข
ิ องตนไม
้
้
• ทฤษฎีบทที่ 1 กราฟไมมี
ิ ทางกราฟหนึ่งจะ
่ ทศ
เป็ นตนไม
่ มีทางเดินเพียงหนึ่งทาง
้
้ ก็ตอเมื
่ อ
ระหวางคู
จุ
่
่ ดใดๆในกราฟ
• ทฤษฎีบทที่ 2 ตนไม
ซึ
้
้ ง่ มี n จุด จะมี n-1
เส้นเชือ
่ ม
4
คุณสมบัตต
ิ นไม
้
้
• กราฟ G ซึง่ มี n จุด จะเป็ นตนไม
้
้ ถา้
คุณสมบัตข
ิ อใดข
อหนึ
่งขอใดต
อไปนี
้เป็ นจริง
้
้
้
่
1. G เป็ นกราฟซึง่ ตอถึ
่ งกันและไมมี
่ วงจรใดๆ
2. มีทางเดินเพียงหนึ่งทางเทานั
จุ
่ ้นระหวางคู
่
่ ดใดๆใน
กราฟ G
3. G เป็ นกราฟซึง่ ตอถึ
่ ม
่ งกันและมี n-1 เส้นเชือ
4. G เป็ นกราฟซึง่ ตอถึ
่ จ
ี านวนเส้นเชือ
่ มทีน
่ ้ อย
่ งกันทีม
ทีส
่ ุด
5. G เป็ นกราฟซึง่ ไมมี
่ ม
่ วงจรและมี n-1 เส้นเชือ
5
กิจกรรม
• ให้วาดตนไม
่ ี
้
้ ทีม
– 4 จุด
– 5 จุด
6
วิธท
ี า
• ตนไม
้
้ 4 จุด
• ตนไม
้
้ 5 จุด
7
ตัวแบบตนไม
้
้
•
•
•
•
ต้นไมแบบมี
ราก (rooted tree)
้
ต้นไมแบบอั
นดับ (ordered tree)
้
ต้นไมแบบ
m ภาค (m-ary tree)
้
ภาค (binary tree)
ต้นไมแบบทวิ
้
8
ตนไม
แบบมี
ราก (rooted tree)
้
้
• กรณีทเี่ รากาหนดจุดๆ หนึ่งในตนไม
ให
้
้ ้เป็ นจุด
พิเศษเรียกวาราก
(root) เราจะเรียกตนไม
แบบ
่
้
้
นี้วา่ ต้นไมแบบมี
ราก (rooted tree)
้
• ตัวอยาง
ตนไม
ดั
แบบมี
่
้
้ งรูป (ข) เป็ นตนไม
้
้
ราก ทีม
่ ก
ี ารกาหนดจุด a ของตนไม
รู
้
้ ป (ก)
ให้เป็ นราก
9
ตนไม
แบบมี
ราก (rooted tree)
้
้
• การวาดตนไม
ชนิ
้
้ ดนี้ จะวางจุดทีเ่ ป็ นรากไวให
้ ้
เห็ นเดน
่ (วางไวต
้ าแหน่งบนสุด)
• จากนั้นวางจุดทีเ่ หลือเรียงไปทางดานใดด
าน
้
้
หนึ่งเป็ นระดับๆ
– กาหนดให้รากอยูในระดั
บ (level) ที่ 0
่
– จุดทัง้ หลายทีต
่ อจากรากอยู
ในระดั
บที่ 1
่
่
– จุดทีต
่ อจากจุ
ดในระดับที่ 1 อยูในระดั
บที่ 2
่
่
เป็ นเช่นนี้ไปเรือ
่ ยๆ
– เรียกเลขพวกนี้วา่ เลขระดับ (level number) ซึง่
หมายถึงความยาวของทางเดินจากรากมาถึงจุดนั้น
• ความสูงของตนไม
่ ากทีส
่ ด
ุ 10
้
้ คือ เลขระดับทีม
คาศั พทเกี
่ วกับตนไม
้
้
์ ย
• ถาจุ
่ มเส้นหนึ่ง
้ ด x ตอกั
่ บจุด y ดวยเส
้
้ นเชือ
โดยที่ x อยูใกล
รากมากกว
า่ y
่
้
– เรียก x วาเป็
่ นจุดระดับ พอ/แม
่
่ (parent) ของ
y
– เรียก y เป็ นจุดระดับลูก (child) ของ x
• สองจุดใดๆทีม
่ ี พอ/แม
่
่ เดียวกันวาเป็
่ น พี่
น้องกัน (sibling)
• เรียกจุดทีไ่ มมี
ู วา่ ใบ (leaf)
่ ลก
• เรียกจุดทีม
่ ล
ี ก
ู วา่ จุดภายใน (internal
vertex)
คาศั พทเกี
่ วกับตนไม
้
้
์ ย
รา
ก
เป็ นพีน
่ ้ อง
กัน
ใ
บ
พอแม
่
่
ของ g
ลูกของ
c
• จุด f เป็ นรากของตนไม
ย
ง่ ประกอบไปดวย
้
้ อยซึ
่
้
12
จุด f,h และ i
ตนไม
แบบอั
นดับ (ordered tree)
้
้
• ตนไม
แบบมี
รากในบางครัง้ เราจะกาหนดเลข
้
้
อันดับให้จุดในระดับลูกวา่ เป็ นลูกอันดับที่
เทาไหร
ลั
่
่ เราเรียกตนไม
้
้ กษณะนี้วา่ ตนไม
้
้
แบบอันดับ (ordered tree)
• จากรูปแสดงตนไม
แบบอั
นดับทีม
่ ี 5 จุด
้
้
จานวน 14 ตน
้
13
ตนไม
แบบ
m ภาค (m-ary tree)
้
้
• นิยาม ถา้ T คือตนไม
แบบอั
นดับซึง่ จุดภายใน
้
้
แตละจุ
ดมี m ลูก เราเรียก T วาต
แบบ
่
่ นไม
้
้
m ภาค (m-ary tree)
• ทฤษฎีบท1 ตนไม
แบบ
m ภาค ซึง่ มีจุด
้
้
ภายในจานวน i จุด จะมีจานวนจุดทัง้ สิ้ น mi
+1
• ทฤษฎีบท2 ให้ T เป็ นตนไม
แบบ
m ภาค
้
้
โดยที่ i คือ จานวนจุดภายใน e คือ
จานวนใบ และ n คือ จานวนจุดทัง้ หมด จะ
ไดความสั
มพันธดั
14
้
์ งนี้
ตนไม
แบบ
m ภาค (m-ary tree)
้
้
• ทฤษฎีบท3 ตนไม
แบบ
m ภาคซึง่ มีความสูง h
้
้
h ใบ และ
จะมีจานวนใบไดอย
างมากสุ
ด
m
้ ่
ตนไม
แบบ
m ภาค ซึง่ มี e ใบ จะมีความสูง
้
้
h logme
15
ตนไม
แบบทวิ
ภาค (binary tree)
้
้
• ตนไม
แบบทวิ
ภาค (binary tree) คือ ตนไม
ที
้
้
้
้ ่
แตละจุ
ดภายในมีลก
ู ไดเพี
่
้ ยง 2 จุด
– เราเรียกลูกอันดับทีห
่ นึ่งและสองของตนไม
ชนิ
้
้ ดนี้วา่
ลูกทางซ้ายและลูกทางขวา
• ตัวอยางต
นไม
แบบทวิ
ภาค
่
้
้
สั งเกตวาทุ
่ กจุดภายใน
จะมีลก
ู 2 จุดเสมอ
16
คุณสมบัตข
ิ องตนไม
แบบทวิ
ภาค
้
้
• กาหนดให้ e คือ จานวนใบ i คือ จานวน
จุดภายใน และ n คือ จานวนจุดทัง้ หมด
คุณสมบัตบ
ิ างประการทีน
่ ่ าสนใจคือ
– e = i + 1 , n = 2i + 1 และ n = 2e -1
– ความสูง h  log 2 (n+1)/2 = log 2 (n+1) -1
=  log 2 n
17
กิจกรรม
• ตนไม
ที
่ ี 15000 จุด จะมีจานวนเส้นเชือ
่ มกี่
้
้ ม
เส้น
ตอบ ตนไม
ที
่ ี n จุด จะมีทง้ั หมด n-1 เส้น
้
้ ม
เชือ
่ ม ดังนั้น จะมีเส้นเชือ
่ ม 14999 เส้น
• ตนไม
แบบทวิ
ภาคทีม
่ จ
ี ุดภายใน 5000 จุด
้
้
จะมีเส้นเชือ
่ มกีเ่ ส้น
ตอบ จานวนจุดทัง้ หมด
= 2 เทาของจ
านวน
่
จุดภายใน + 1
n
= (2 * 5000) + 1
= 10001
18
ตัวอยางการประยุ
กตใช
่
้
้
์ ้ตนไม
(Tree application)
• การแทนการจัดเก็บแฟ้มขอมู
้ ลเป็ นสารบบ
(directory) ในเครือ
่ งคอมพิวเตอร ์
– รากแทน ไดเรกทอรี
– จุดภายในของตนไม
แทน
ไดเรกทอรียอย
้
้
่
– ใบ แทน แฟ้มขอมู
้ ล
19
การแวะผานต
นไม
่
้
้ (Tree
traversal)
• การแวะผานต
นไม
่
้
้ คือ การเขาถึ
้ งจุดทุกๆจุด
ในตนไม
ธ ี นั่นคือ ถา้
้
้ สามารถทาไดหลายวิ
้
ตนไม
มี
่ วะจะมีทง้ั หมด
้
้ n จุด ลาดับของจุดทีแ
n! แบบ
• การแวะผานที
ใ่ ช้กันแพรหลาย
คือ
่
่
– การแวะผานแบบก
อนล
าดับ (preorder)
่
่
– การแวะผานแบบตามล
าดับ (inorder)
่
– การแวะผานแบบหลั
งลาดับ (postorder)
่
20
การแวะผานจุ
ดแบบกอนล
าดับ
่
่
(preorder)
• จากตนไม
ที
่ าหนด ลาดับของการแวะผานจุ
ด
้
้ ก
่
แบบกอนล
าดับทา ดังนี้
่
Pa = a Pb PC
Pb = b Pd e = b d i j e
Pc = c f g h
Pd = d i j
Pa = a b d i j e c f g h
21
การแวะผานแบบตามล
าดับ
่
(inorder)
• จากตนไม
ที
่ าหนด ลาดับของการแวะผานจุ
ด
้
้ ก
่
แบบตามลาดับทา ดังนี้
Ia = Ib a IC
Ib = Id b e = i d j b e
Ic = f c g h
Id = i d j
Ia = i d j b e a f c g h
22
การแวะผานแบบหลั
งลาดับ
่
(postorder)
• จากตนไม
ที
่ าหนด ลาดับของการแวะผานจุ
ด
้
้ ก
่
แบบหลังลาดับทา ดังนี้
O a = Ob O C a
Ob = Od e b = i j d e b
Oc = f g h c
Od = i j d
Oa = i j d e b f g h c a
23
การแวะผานต
นไม
่
้
้
• จากรูปแบบการแวะผานต
นไม
ทั
่
้
้ ง้ 3 รูปแบบ
มีขอสั
้ งเกต ดังนี้
– การแวะผานแบบก
อนล
าดับ เหมือนกับการค้นหา
่
่
ตามแนวลึกในตนไม
้
้
– การแวะผานแบบตามล
าดับ หากใช้กับตนไม
แบบ
่
้
้
ทวิภาค ขอมู
ที
่ ก
ู แวะผานจะเรี
ยง
้ ลในจุดของตนไม
้
้ ถ
่
จากน้อยไปมาก
24
ตัวอยาง
่
• จงหาลาดับของการแวะผานจุ
ดในตนไม
ต
้
่
้
้ อไปนี
่
แบบกอนล
าดับ ตามลาดับ และ หลังลาดับ
่
25
วิธท
ี า
26
วิธท
ี า
27
วิธท
ี า
28
กิจกรรม
• จงหาลาดับของการแวะผานจุ
ดในตนไม
ต
้
่
้
้ อไปนี
่
แบบกอนล
าดับ ตามลาดับ และ หลังลาดับ
่
29
วิธท
ี า
• การแวะผานแบบก
อน
่
่
ลาดับ
Pa = a Pb Pc
Pb = b Pd e = b d i j m
noe
Pd = d i Pj = d i j m n
o
Pj = j m n o
Pc = c Pf g h = c f k l
gh
30
วิธท
ี า
• การแวะผานแบบ
่
ตามลาดับ
Ia = Ib a Ic
Ib = Id b e = I d m j n o
be
Id = i d Ij = i d m j n o
Ij = m j n o
Ic = If c g h = k f l c g
h
If = k f l
31
วิธท
ี า
• การแวะผานแบบหลั
ง
่
ลาดับ
Oa = Ob Oc a
Ob = Od e b = i m n o
jdeb
Od = i Oj d = i m n o j
d
Oj = m n o j
O c = Of g h c = k l f g
hc
32
ตนไม
แผ
้
้ ทั
่ ว่ (Spanning Tree)
• สมมุตใิ ห้กราฟดังรูป(ก) แทนเส้นทางการเดินรถ
ของบริษท
ั ขนส่งสิ นคาแห
งหนึ
่ง โดยจุดแทนสาขา
้
่
ตามเมืองตางๆ
และ เส้นเชือ
่ มแทนเส้นทางการ
่
เดินรถ
• บริษท
ั ตองการลดเส
่ ด
ุ
้
้ นทางการเดินรถให้มากทีส
เหลือไวแต
่ ะทาให้สามารถส่งสิ นคา้
้ เส
่ ้ นทางทีจ
ระหวางเมื
องตาง
ๆ ได้
่
่
33
ตนไม
แผ
้
้ ทั
่ ว่ (spanning tree)
• นิยาม1 ตนไม
แผ
้
้ ทั
่ ว่ ของกราฟ G คือ กราฟ
ยอยของ
G ซึง่ เป็ นตนไม
ที
่ ท
ี ก
ุ ๆ จุดของ G
่
้
้ ม
จากตัวอยางกราฟจ
าลองเส้นทางการเดินรถ เส้นทึบ
่
แทนตนไม
แบบแผ
ทั
้
้
่ ว่
• นิยาม2 กาหนดให้ T คือ ตนไม
แผ
้
้ ทั
่ ว่ ของ
กราฟ G เราเรียกเส้นเชือ
่ มทีอ
่ ยูใน
G แตไม
่
่ อยู
่ ่
ใน T วาคอร
ด
่
์ (chord)
– ถากราฟ
G มี v จุดและเส้นเชือ
่ ม e เส้น ตนไม
้
้
้
แผทั
เส้นเชือ
่ ม v-1 เส้น ดังนั้34
น
่ ว่ ของ G จะตองมี
้
การหาตนไม
แผ
้
้ ทั
่ ว่
• วิธท
ี ม
ี่ ป
ี ระสิ ทธิภาพในการหาตนไม
แผ
้
้ ทั
่ ว่ ทา
ไดโดย
การคอยๆ
เพิม
่ เส้นเชือ
่ มดวยวิ
ธี
้
่
้
– การค้นตามแนวลึก (depth-first search)
– การค้นตามแนวกวาง
(breadth-first-search)
้
35
การหาตนไม
แผ
นหา
้
้ ทั
่ ว่ ดวยการค
้
้
ตามแนวลึก
• เริม
่ จากการเลือกจุดใดจุดหนึ่งในกราฟมาเป็ นราก
(root)
• เริม
่ สรางทางเดิ
นตามเส้นเชือ
่ มในกราฟจากราก
้
– เส้นเชือ
่ มเส้นใหมจะถู
กเลือกเป็ นส่วนหนึ่งของต้นไม้
่
ไปจนกวาจะไม
สามารถหาเส
่ มใดๆเพิม
่ เติม
่
่
้ นเชือ
– จุดสุดทายของทางเดิ
นทีห
่ าไดจะเป็
นใบ
้
้
• กลับไปทีจ
่ ุดระดับพอ/แม
่
่ ของใบนั้น แลวหา
้
ทางเดินใหม่
– ถาทางเดิ
นใหมยั
อเชื
อ
่ มทุกจุดได้ ก็กลับ
้
่ งไมสามารถต
่
่
ขึน
้ ไปอีกระดับ แลวหาทางเดิ
นใหมเช
่ ยๆ
้
่ ่ นนี้ไปเรือ
• ถาได
เส
่ มทีเ่ ชือ
่ มทุกจุดครบ แสดงวา่ ได้
้
้ ้ นเชือ
36
ตนไม
แผ
ได
้
้ ทั
่ ว่ แลว
้ แตถ
่ าไม
้
่ ้ แสดงวากราฟ
่
ตัวอยาง
่
• ให้ใช้วิธก
ี ารค้นตามแนวลึก ในการหาตนไม
แผ
้
้ ่
ทัว่ ของกราฟดังรูป
วิธท
ี า
- สมมุตเิ ลือกจุด f เป็ นราก จากนั้นหาทางเดินไป
เรือ
่ ยๆ (f-d-c-a)
- เมือ
่ ไมสามารถหาเส
่ มไดแล
ด a
่
้ นเชือ
้ วจากจุ
้
ยอนกลั
บมาที่ c แลวหาทางเดิ
นตอ
้
้
่ ไดเป็
้ น (c-be)
- จากจุด e เราไมสามารถไปยั
งจุดอืน
่ ๆทีเ่ หลือไดอี
ก
่
้ 37
กิจกรรม
• จงหาตนไม
แผ
น
้
้ ทั
่ ว่ ของกราฟดังรูป ดวยการค
้
้
ตามแนวลึก
a
d
j
i
b
c
e
k
h
g
f
38
วิธท
ี า
• ตัวอยางต
นไม
แผ
่ กาหนดจุด a เป็ นราก
่
้
้ ทั
่ ว่ เมือ
แสดงดังรูป
a
d
j
i
b
c
e
k
h
g
f
39
การหาตนไม
แผ
นหา
้
้ ทั
่ ว่ ดวยการค
้
้
ตามแนวกวาง
้
• เริม
่ ตนจากการเลื
อกจุดหนึ่งของกราฟ เพือ
่ เป็ น
้
รากของตนไม
้
้
• กาหนดให้ทุกๆเส้นเชือ
่ มทีต
่ อกั
ป)
่ บราก(ไมรวมลู
่
เป็ นส่วนของตนไม
้
้
– จุดปลายของเส้นเชือ
่ มเหลานี
่ ้ เป็ นจุดระดับที่ 1
ของตนไม
้
้
• เพิม
่ เส้นเชือ
่ มทีต
่ อกั
่ บจุดเหลานี
่ ้เขาเป็
้ นส่วนหนึ่ง
ของตนไม
่ ุดปลายของเส้นเชือ
่ มไม่
้
้ ตราบใดทีจ
เป็ นจุดทีม
่ อ
ี ยูแล
นไม
่ วในต
้
้
้
• ทาแบบนี้ไปเรือ
่ ยๆ จนกวาทุ
ก
่ กๆจุดของกราฟถู40
ตัวอยาง
่
• ให้ใช้วิธก
ี ารคนตามแนวกว
าง
ในการหาตนไม
แผ
้
้
้
้ ่
ทัว่ ของกราฟดังรูป
วิธท
ี า
- สมมุตเิ ลือกจุด f เป็ นราก จากนั้นเพิม
่ เส้นเชือ
่ มที่
ตอกั
่ บ f : {f,d} ,{f,c} ,{f,e} , {f,g}
- เลือกจุด เพือ
่ เพิม
่ เส้นเชือ
่ ม พิจารณาจุด c
สามารถเพิม
่ เส้นเชือ
่ มได้ คือ {c,a} , {c,b}
- เมือ
่ ครบทุกจุดแลว
แผ
้ จะไดต
้ นไม
้
้ ทั
่ ว่ ดังรูป 41
กิจกรรม
• จงหาตนไม
แผ
น
้
้ ทั
่ ว่ ของกราฟดังรูป ดวยการค
้
้
ตามแนวกวาง
้
a
d
j
i
b
c
e
k
h
g
f
42
วิธท
ี า
• ตัวอยางต
นไม
แผ
่ กาหนดจุด a เป็ นราก
่
้
้ ทั
่ ว่ เมือ
แสดงดังรูป
a
d
j
i
b
c
e
k
h
g
f
43
ตนไม
แผ
้
้ ทั
่ ว่ น้อยสุด (Minimum
spanning tree)
• ในกรณีทเี่ ราหาการเชือ
่ มตอที
่ ้ั นทีส
่ ด
ุ โดยมี
่ ส
ลักษณะเป็ นตนไม
แผ
ที
้
้ ทั
่ ว่ เราจะเรียกตนไม
้
้ ไ่ ด้
วา่ ต้นไมแผ
้ ทั
่ ว่ น้อยสุด
• จากตัวอยาง
จากการตอจุ
่ ี
่
่ ด 4 จุด ทีม
ตาแหน่งการวาง ดังรูป (ก) สามารถเขียน
ตนไม
แผ
้
้ ทั
่ ว่ ไดดั
้ งรูป (ข) และ (ค)
44
คาถาม ???
45