The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by kittisaksoulz, 2022-03-27 12:57:27

ebook โครงสร้างข้อมูลและขั้นตอนวิธี

ilovepdf_merged (1)

97

6.4 คิวแบบวงกลม (Circular Queue)
เน่ืองจากคิวแบบเส้นตรงในหัวข้อท่ีผ่านมามีปัญหาในเรอื่ งของเน้ือที่ส่วนที่นำข้อมูลออกไปแล้ว

จะไม่สามารถนำข้อมูลเขา้ ไปเก็บไดอ้ ีกแมว้ ่าเน้ือท่นี นั้ จะว่างก็ตาม ดงั น้ันการแก้ปญั หาดงั กล่าวทำได้โดย
การแปลงคิวแบบเส้นตรงให้กลายมาเปน็ ควิ แบบวงกลมดังภาพประกอบท่ี 6.4

012345
C

FR

a) ควิ แบบเส้นตรงไมส่ ามารถใช้เนื้อทีด่ ้านหน้าได้อีก
012345
C

RF

b) จากคิวแบบเสน้ ตรงเมื่อ ค่า R= N ให้ทำการปรบั ค่า R
ใหม้ ีค่าเทา่ กับ 1 เพื่อใหส้ ามารถเพ่มิ ขอ้ มลู เข้าไปในเน้ือท่ีส่วนท่ีเหลือได้

ภาพประกอบท่ี 6.4 หลักการเปลี่ยนจากควิ แบบเสน้ ตรงเปน็ คิวแบบวงกลม
(Circular Queue)

การตรวจสอบคิวเต็มในควิ แบบวงกลม
สำหรบั การตรวจสอบว่าคิวแบบวงกลมมีข้อมูลเก็บอยู่หรือไม่นั้น จะมีวิธีการทดสอบไปจากการ
ตรวจสอบคิวเต็มในคิวแบบเสน้ ตรง เน่ืองจากคิววงกลมมีลักษณะเป็นวงกลม ดังน้ันโอกาสตำแหน่งของ
ข้อมลู มีโอกาสทีจ่ ะวนจากตำแหนง่ สงู สุดกลบั มายังตำแหน่งท่ี 1 ได้เสมอ
ดังนน้ั คา่ F และ R เม่อื เป็นคิววงกลมเตม็ จะมีอยู่ 2 แบบเท่านนั้ ดังน้ี

1) เม่อื F อยู่ตำแหน่งที่ 1 และ R อยตู่ ำแหนง่ สูงสุดของควิ ดังภาพประกอบที่ 6.5 a)
2) เมื่อ F อยู่ตำแหน่งใดๆ ภายในคิววงกลมที่ไม่ใช่ตำแหน่งที่ 1 ค่าของ R จะอยู่ตำแหน่ง

ด้านหน้าของ F ไปอกี 1 คา่ นนั่ คือ R= F-1 ดงั ภาพประกอบที่ 6.5 b)

98

12 … N-1 N

012345

FR
a) คิวเตม็ เม่ือ F อยู่ตำแหน่งท่ี 1 และ R อยตู่ ำแหน่งสงู สุดของควิ

1 2 … N-1 N
012345

RF

b) คิวเต็มเมอื่ R = F-1

ภาพประกอบที่ 6.5 ควิ แบบวงกลมเตม็

ควิ แบบวงกลมสามารถนำข้อมูลออกได้เรอ่ื ย ๆ จนเป็นภาพประกอบที่ 6.6 ไม่สามารถนำข้อมูล
ออกได้ นั่นคือ เม่อื F = R ซึง่ หมายถึงควิ ว่าง

1 …. N

012345

RF
ภาพประกอบที่ 6.6 ควิ แบบวงกลมวา่ ง

99

ALGORITHM CQINSERT ใช้ในการแทรกข้อมลู เข้าคิวแบบวงกลม โดยที่
F แทน ตัวชต้ี ้นคิว
R แทน ตัวช้ที า้ ยคิว
N แทน ขนาดของคิว
X แทน ขอ้ มลู ท่ีจะแทรก
TEMP แทน ตวั เกบ็ คา่ ชว่ั คราว

Pseudo Code 6.3 : CQINSERT(Q,N,F,R,X,TEMP) This procedure inserts an
element X into a circular queue.
Step 1 [Queue already filled?]

If F = 1 and R = N, or if F = R , then Write “ Overflow”
Return.
else If F = 0 , then F = 1.

Step 2 [Find new value of REAR]
Set TEMP = R
If R = N then Set R = 1.
else If set R = R + 1.

Step 3 Set Q[R] = X. [This inserts new element.]
Step 4 Return.
ALGORITHM CQDELETE ใชใ้ นการลบข้อมูลออกจากคิวแบบวงกลม โดยท่ี

F แทน ตวั ชต้ี น้ คิว
R แทน ตวั ชี้ทา้ ยคิว
Y แทน เก็บคา่ ขอ้ มลู ท่ีจะลบออกจากคิว
Pseudo Code 6.4 : CQDELETE(Q,N,F,R, Y) This procedure deletes an
Element from a circular queue and assigns it to the variable Y.
Step 1 [ Queue already empty?]

If F = Null, then Write “Underflow”
Return.

Step 2 Set Y = Q[F].
Step 3 If F = R then Set F = Null and R = Null

else if F = N , then Set F= 1.
else Set F= F+ 1.
Step 4 Return.

100

6.5 สรปุ
คิวเป็นโครงสร้างข้อมูลที่จัดเก็บข้อมูลต่อเนื่องกัน มีลักษณะคล้ายกับการเข้าแถวรอเพ่ือรับ

บริการต่าง ๆ การนำข้อมูลสู่คิวโดยข้อมูลท่ีใส่เข้ามาในคิวจะเข้ามาที่ปลายด้านหลังของคิวท่ีเรียกว่า
ส่วนท้าย (Rear) และเม่ือต้องการนำข้อมูลออกจากคิว ก็จะทำได้ท่ีปลายด้านหน้าของคิวท่ีเรียกว่า
ส่วนหน้า (Front) จึงทำให้หลักการของโครงสร้างข้อมูลแบบคิวมีลักษณะเป็น “เข้าก่อนออกก่อน”
(First-In , First-Out : FIFO) หมายความว่าลำดับในการนำข้อมูลออกจะเป็นไปตามลำดับในการนำ
ข้อมลู เข้า

การดำเนินการกับข้อมูลในคิวได้แก่ การสร้างคิว การเพ่ิมข้อมูลสู่คิว การนำข้อมูลออกจากคิว
ซึ่งโครงสร้างแบบคิวจะกำหนดตัวช้ีตำแหน่ง 2 ตัว ได้แก่ ตัวชี้ F (Front Pointer) เก็บตำแหน่งส่วน
ปลายด้านหน้าซ่ึงจะช้ีท่ีสมาชิกตัวแรกและสามารถเป็นตำแหน่งที่กำหนดการนำข้อมูลออกจากคิวใน
ตำแหน่งตัวชี้ F และตัวชี้ R (Rear Pointer) เก็บตำแหน่งปลายด้านหลังซึ่งจะช้ีท่ีสมาชิกตัวสุดท้ายของ
คิว และสามารถกำหนดการเพิ่มข้อมูลเข้าสู่คิวในตำแหน่งตัวชี้ R สำหรับคิวแบบเส้นตรงสามารถเพ่ิม
ข้อมูลสู่คิวได้จนกระท่ัง ค่า R = N น้ันคือ คิวเต็มและไม่สามารถนำข้อมูลเข้าสู่คิวได้อีกต่อไป ส่วนการ
นำข้อมูลออกจากคิวสามารถนำออกได้จนกระทั่งเมื่อค่า R = 0 และ ค่า F = 0 น่ันคือ คิวว่าง ไม่
สามารถนำข้อมูลออกจากคิวได้ โดยสามารถใช้คิวแบบวงกลม (Circular Queue) มาแก้ปัญหาการใช้
เนื้อท่ีดังกล่าวทำให้สามารถใช้เนื้อท่ีของโครงสร้างแบบคิวได้อย่างมีประสิทธิภาพเน่ืองจาก คิวแบบ
วงกลม คา่ F และ R สามารถวนกลับมาช้ตี ำแหน่งแรกสดุ ของคิวได้

โครงสร้างคิวสามารถนำมาประยุกตใ์ ช้ในงานด้านตา่ งๆ เช่น ในระบบปฏบิ ตั กิ าร (Operating
System) ของคอมพิวเตอร์ในการจัดคิวสำหรบั การใช้เครื่องพมิ พ์ การจำลองเหตุการณ์ (Simulation)
ของแถวคอยในการบริการลูกค้า เป็นต้น

101

คำถามท้ายบทท่ี 6

1. จงยกตัวอยา่ งการทำงานในปจั จุบนั หรอื เหตกุ ารณ์ท่ปี ระยกุ ตใ์ ช้คิว มา 5 ตวั อย่าง
2. อธิบายความแตกต่างระหวา่ งคำวา่ “Overflow Queue” และ “ Underflow Queue”
3. อธบิ ายขอ้ ดี และ ขอ้ เสีย ของโครงสร้างขอ้ มูลแบบควิ มาพอสงั เขป
4. อธิบายความหมาย และยกตัวอยา่ ง คิวแบบเสน้ ตรงและ ควิ แบบวงกลม มาพอสงั เขป
5. จงอธบิ ายความแตกต่างระหว่างโครงสร้างข้อมลู แบบควิ และโครงสรา้ งขอ้ มูลแบบสแตก
6. จงยกตวั อย่างโปรแกรมแสดงการนำขอ้ มูลเขา้ และการนำข้อมลู ออกจากคิวแบบเสน้ ตรง พรอ้ ม
อธบิ ายรายละเอยี ดของโปรแกรมดังกลา่ ว
7. จงยกตัวงอยา่ งโปรแกรมแสดงการนำข้อมูลเข้าและการนำข้อมลู ออกจากคิวแบบวงกลมพรอ้ ม
อธิบายรายละเอียด
8. กำหนดให้คิวแบบเสน้ ตรงมีขนาด 4 ชอ่ ง มีคา่ ดังนี้

Front = 1 , Rear = 3 ควิ แบบเส้นตรง : a,b,c,__
จงแสดงคา่ ในควิ แบบเสน้ ตรงและค่าของ Front และ Rear เมือ่ เกดิ เหตุการณ์ต่อไปนี้
a) เพม่ิ d ลงในควิ
b) มีการลบขอ้ มูลออกสองครั้ง
c) x,y,z ถูกเพมิ่ ลงในคิว
d) มกี ารลบอักษรออกสองครง้ั
e) s เพม่ิ ลงในควิ
9. กำหนดควิ แบบวงกลมเกบ็ อยู่ในอาเรย์จำนวน 6 ช่อง มคี ่าดังน้ี
Rear = 2 , Front = 4 คิวแบบวงกลม : __, A ,C ,D ,__ , __
จงแสดงค่าของควิ แบบวงกลมและค่าของ Front และ Rear เมอื่ เกิดเหตกุ ารณ์ต่อไปนี้
a) F ถกู เพ่ิมเข้ามาทางขวา
b) อกั ษรด้านขวาถูกลบออก
c) K , L และ M ถูกเพิ่มเข้าด้านซา้ ย
d) ตัวอักษรดา้ นซ้าย 1 ตวั ถกู ลบออก
e) R ถกู เพ่ิมเข้าทางด้านซ้าย
f) S ถูกเพิ่มเข้าทางด้านขวา
g) T ถูกเพม่ิ เข้าทางด้านขวา

102

10. จงเติมคำสั่งลงในช่องว่างและอธบิ ายให้ถูกต้องเมอ่ื กำหนดให้ตวั แปรแตล่ ะตัวมีคุณสมบัตดิ งั น้ี
Que ตัวแปรอาเรย์เกบ็ ขอ้ มูลในควิ
Front ตัวแปรชต้ี ำแหน่งนำข้อมลู ออก
Rear ตัวแปรชีต้ ำแหน่งนำข้อมูลเขา้ สอู่ าเรย์
X ตวั แปรข้อมลู ท่นี ำเขา้ สู่คิว
MAX ตัวแปรตำแหนง่ สงุ สุดของอาเรยท์ ีส่ ามารถเก็บข้อมลู ได้

enqueue ( Que, Front, Rear, X ) อธิบาย
{ อธิบาย
if ( isEmpty ( ) ) อธบิ าย
10.1
10.2 อธบิ าย
10.3
Return. อธิบาย
else if (Rear = MAX) อธบิ าย
10.4
else

10.5
10.6

Return.
}

บทท่ี 7
โครงสรา้ งข้อมลู แบบต้นไม้

โครงสร้างข้อมูลในบทต่างๆ ท่ีได้กล่าวผ่านมาเป็นโครงสร้างเชิงเส้น (Linear Structure)
แต่ละสมาชิกจะมีสมาชิกตัวถัดไปเพี ยงตัวเดียว แต่สำหรับในบทนี้จะกล่าวถึงโครงสร้าง
ข้อมูลไม่เป็นเชิงเส้น (Nonlinear Structure) ซึ่งแต่ละสมาชิกสามารถมีสมาชิกตัวถัดไปได้หลายตัว
โดยมแี นวความคิดของโครงสร้างแตกสาขา (Branching Structure) และเป็นทรี่ จู้ ักคือ โครงสรา้ งขอ้ มูล
แบบต้นไม้ (Tree) โครงสร้างข้อมูลแบบต้นไม้เป็นโครงสร้างท่ีมีระดับ (Hierarchical- Structure) เช่น
โครงสร้างแสดงองค์ประกอบของหน่วยงานต่างๆ ,รายชื่อคณะผู้บริหารภายในบริษัท ซึ่งแสดงลำดับ
ระดับของผู้บริหารในแต่ละดับไล่ลงมาเร่ือยๆ เป็นต้น ในการเรียนเร่ืองความน่าจะเป็นอาศัยโครงสร้าง
ขอ้ มูลแบบตน้ ไม้ แสดงหนทางท้งั หมดที่เปน็ ไปได้ของเหตุการณ์ทเ่ี กิดขึ้น เชน่ เหตุการณ์ท้ังหมดท่ีเกิดขึ้น
ในการโยนเหรียญสองเหรยี ญพร้อมกัน ดงั ภาพประกอบที่ 7.1

เหรียญ 1 เหรียญ 2
= หวั หวั
หวั หวั = หัวกอ้ ย
ก้อย = กอ้ ยหวั
= กอ้ ยก้อย
กอ้ ย หวั
ก้อย

ภาพประกอบท่ี 7.1 เหตุการณ์ทเ่ี กดิ ข้ึนเม่ือมีการโยนเหรียญ 2 เหรียญ

จากภาพประกอบท่ี 7.1 เมื่อมีการโยนเหรียญ 2 เหรยี ญคา่ ทเ่ี ปน็ ไปไดท้ เ่ี หรียญ 1 จะ
ออกหัว หรือ ก้อย เป็นไปได้ 4 ค่า คือ หัว ก้อย หัว ก้อย ดังนั้นถ้าโยนเหรียญ 2 เหรียญจะเป็นไปได้
ท้ังหมด 4 เหตุการณ์ คือ เหตุการณ์ท่ีเหรียญจะออก หัวหัว หัวก้อย ก้อยหัว และ ก้อยก้อย เป็นต้น
ดังน้นั หนทางเหตกุ ารณข์ องการโยนตน้ ไมท้ ี่ตน้ ไม้ทั้งหมดสามารถแสดงเปน็ โครงสร้างแบบระดบั ได้

104

7.1 นยิ ามของต้นไม้
นิยามของต้นไม้เป็นนิยามแบบรีเคอร์ซีฟว่าต้นไม้ประกอบด้วยสมาชิกท่ีเรียกว่า โหนด ที่มี

ลักษณะตอ่ ไปน้ี
1. วา่ ง (ไม่มีโหนดในต้นไม)้ หรอื
2. มีโหนดหนึ่งถือเป็นรากของต้นไม้ เรียกว่า รู้ตโหนด (Root Node) หรือ โหนดพ่อ

สว่ นโหนดท่ีเหลือแบ่งเป็นต้นไม้ยอ่ ย T1,T2,…TK (K>=0) หรอื โหนดลูก โดยต้นไม้ย่อยมคี ุณสมบัติเป็น
ตน้ ไม้เช่นกัน

ดังน้ันความสัมพันธ์ระหว่างโหนดพ่อและโหนดลูกเป็นไปในลักษณะพ่อกับลูก คือรู้ตโหนดเป็น
โหนดพอ่ และรตู้ โหนดของต้นไม้ย่อยเปน็ โหนดลูก ดงั ภาพประกอบท่ี 7.2

A

B C D

EF G HI

T1 T2 T3

ภาพประกอบท่ี 7.2 รปู ร่างของต้นไม้

จากภาพประกอบที่ 7.2 สามารถอธิบายรายละเอียดของตัวอักษรหรือตัวเลขในโหนดเป็นช่ือ
ของโหนดหรืออาจจะเปน็ คา่ ที่อยู่ในโหนดตน้ ไม้นี้ดงั น้ี

รู้ตโหนด หรือ โหนดพ่อ (Root Node) โหนด A เป็นรู้ตของต้นไม้ โดยต้นไม้ย่อยของ A มี 3
ต้นคือ ต้นไม้ T1,T2 และ T3 ที่มี B,C และ D เป็นรู้ต ต้นไม้ B มีต้นไม้ E และ F เป็นต้นไม้ย่อย ต้นไม้
C มีต้นไม้ G เป็นต้นไม้ย่อย ต้นไม้ D มี H และ I เป็นต้นไม้ย่อย หรือเรียกอีกอย่างว่า โหนด A เป็น
โหนดพ่อของ B,C และ D โหนด B เป็นโหนดของพ่อของ E และ F โหนด C เป็นโหนดพ่อของ G และ
โหนด D เป็นโหนดพ่อของ H และ I หรือในทางกลับกันโหนด B,C และ D เป็นลูกของโหนด A โหนด E
และ F เป็นลกู ของโหนด B

โหนดพ่ีน้อง (Brother Node) คือ โหนดทีม่ ีพ่อเดยี วกันจากต้นไม้โหนด B,C และ D เป็นโหนด
พ่นี อ้ งกนั โหนด E และ F เป็นพี่นอ้ งกนั H และ I เปน็ โหนดพน่ี อ้ งกนั

105

กิ่งหรือเอดจ์ (Branch) คือ เสน้ ท่ีเชอื่ มตอ่ ระหวา่ งพ่อกบั ลกู
โหนดใบ (Leaf Node) คือ โหนดทไี่ ม่มลี กู เชน่ โหนด E,F,G,H และ I
โหนดก่ิง (Branch Node) คอื โหนดทไี่ ม่ใชร้ ู้ตและไม่ใช่โหนดใบ เชน่ โหนด B,C และ D
ดีกรีของโหนด X ใดๆ (Degree) คือ จำนวนลูกของโหนดนั้น เช่น ดีกรีของโหนด A เท่ากับ 3
ดกี รขี องโหนดใบเท่ากับ 0 เป็นตน้
ไดเรกดีเซนเด้นท์ (Direct Descendant Node) คือ โหนดท่ีมาทีหลังทันทีของโหนด X ใดๆ
นนั้ คอื โหนดทีเ่ ป็นลกู ของโหนด X น้นั เชน่ B,CและD เปน็ ไดเรกดีเซนเดน้ ทข์ องโหนด A
ดีเซนเด้นท์โหนด (Descendant Node) คือ โหนดของลูก X และโหนดท่ีเป็นดีเซนเด้นท์ ของ
ลกู ของ X เช่น ดเี ซนเด้นท์ของโหนด A คือ ทกุ โหนดทีเ่ หลอื ในต้นไม้
ไดเรกแอนเซสเตอร์โหนด (Direct Ancessor Node) คือ โหนดทม่ี าก่อนทันทีของโหนด X ใดๆ
(ยกเว้นรู้ตโหนด) คือ โหนดพ่อของ X นั้น เช่น โหนด E และ F มีโหนด B เป็นไดเรกแอนเซสเตอร์ และ
โหนด B มี A เป็นไดเรกแอนเซสเตอร์
แอนเซสเตอร์ของโหนด X ใด ๆ (Ancessor Node) คือ โหนดพอ่ และโหนดท่เี ปน็ แอนเซสเตอร์
ของโหนดพ่อของ X เชน่ A, B เป็นแอนเซสเตอรข์ อง E และ F
ระดับ (Level) คือ หมายเลขแสดงระดับของโหนดในต้นไม้ โดยโหนดพ่อ ถูกกำหนดให้อยู่ใน
ระดบั 0 สว่ นไดเรกดีเซนแดน้ ท์อยูใ่ นระดบั ถัดไป คือ 1 นน้ั คอื ถา้ โหนด X (ยกเวน้ โหนดใบ) ใดๆ อยู่ใน
ระดบั i ลูกของโหนด X จะอยู่ในระดับ i+1
ความสูง (High) หรือความลึก (Deep) ของต้นไม้ คือ ระดับสูงสุดของต้นไม้น้ันจากต้นไม้
ภาพประกอบท่ี 7.3 โหนด A อยู่ระดับ 0 โหนด B,C และ D อยู่ในระดับ 1 โหนด E,F,G,H และ I อยู่
ระดับ 2 และมีความสงู เทา่ กบั 2

7.2 ตน้ ไมไ้ บนารี
ต้นไม้ไบนารี (Binary Tree) เป็นตน้ ไม้ท่มี ีความสำคัญโดยมีนิยามของต้นไมไ้ บนารเี ปน็ ดงั นี้
1. วา่ ง (คอื ไม่มโี หนด) หรอื
2. มีโหนดหนึ่งเป็นรู้ตและส่วนที่เหลือแยกเป็นต้นไม้ย่อย 2 ต้นเรียกว่าต้นไม้ย่อยซ้าย

และตน้ ไม้ยอ่ ยขวาโดยตน้ ไม้ยอ่ ยท้งั 2 น้ันมคี ณุ สมบัตเิ ปน็ ต้นไมไ้ บนารีเชน่ กัน
จุดเด่นของต้นไม้ไบนารี คือ ต้นไม้ที่แต่ละโหนดมีตน้ ไม้ย่อยได้สูงสุดไม่เกิน 2 น่ันเอง และการท่ี

ต้นไม้จะเป็นต้นไม้ไบนารีน้ันไม่จำเป็นว่าทุกๆ โหนดจะต้องมี 2 โหนดเสมอสามารถมีหน่ึงโหนดหรือจะ
สองโหนดกไ็ ด้ หรอื จะไมม่ ีเลยสกั โหนดกไ็ ด้ดังตวั อย่างภาพประกอบท่ี 7.3

106

AA A

B BB C

a) b) c)

ภาพประกอบที่ 7.3 ตน้ ไม้ไบนารี

ภาพประกอบท่ี 7.3 a) เป็นต้นไม้ไบนารที ี่มี A เป็นรู้ตและมี B เป็นต้นไม้ย่อยซ้ายภาพประกอบ
ที่ 7.3 b) เป็นต้นไม้ไบนารีที่มี A เป็นรู้ต มี B เป็นตน้ ไม้ยอ่ ยขวา ภาพประกอบท่ี 7.3 c) เป็นต้นไม้ไบนารี
ที่มี A เปน็ รู้ต มี B และ C เป็นต้นไมย้ อ่ ยซา้ ยและขวา

7.3 ต้นไมไ้ บนารแี บบสมบูรณ์

ต้นไม้ไบนารีแบบสมบูรณ์ (Complete Binary Tree) เป็นต้นไม้ไบนารีท่ีโหนดทุกโหนดท่ีไม่ใช่

โหนดใบ มลี ูก 2 และโหนดใบอยู่ในระดับเดียวกันดังภาพประกอบที่ 7.4 a), b) และ c) ซึ่งมีความสูง 1,

2 และ 3 ตามลำดบั

จำนวนโหนดในระดับ L ใดๆ ของต้นไม้สมบูรณ์เป็น 2L ดังน้ันจำนวนโหนดท้ังหมด (n) เมื่อ

ต้นไม้มีความสูง h เป็น ดังน้ี

N = 20+21+22+…2h = 2h+1 -1 (1)

จาก (1) สามารถเขยี นความสูง (h) ใหอ้ ยู่ในเทอมของ n ได้ ดงั นี้

H = log2 (n+1) – 1 (2)

a) b) c)

ภาพประกอบที่ 7.4 ต้นไม้ไบนารีสมบรู ณ์

107

7.4 ต้นไมไ้ บนารีเซอรซ์
ตน้ ไม้ไบนารเี ซอร์ซ (Binary Search Tree) เป็นต้นไม้ไบนารที ี่มคี ุณสมบตั วิ ่าทกุ ๆ โหนดในต้นไม้

ค่าของรู้ตโหนด (R) มีค่ามากกว่าค่าในต้นไม้ย่อยซ้าย (TL) แต่มีค่าน้อยกว่าหรือเท่ากับค่าในต้นไม้ย่อย
ขวา (TR) เขยี นเป็นสญั ลักษณ์ไดด้ งั น้ี โดยใช้เครื่องหมายวงเลบ็ ( ) แสดงคา่ ในโหนดได้ดังน้ี

(TL) <( R )<=( TR )

2 3 3 21 1
1 21
1 3 2
3 3
a)
2 e)

b) c) d)

ภาพประกอบที่ 7.5 ตน้ ไม้แบบไบนารเี ซอรซ์ ข้อมูล 1 2 3

3 10 10

16 8 14 10

82 9 10 10
7 10 0
10

8 b) c)

a)

ภาพประกอบที่ 7.6 ต้นไม้แบบไบนารเี ซอรซ์

จากภาพประกอบที่ 7.6 ต้นไม้แบบไบนารีเซอร์ซ จะเห็นได้ว่าต้นไม้ในภาพประกอบท่ี 7.6 a)
และ c) คุณสมบัติเป็นต้นไม้ไบนารีเซอร์ซ ต้นไม้ภาพประกอบที่ 7. 6 b) ไม่เป็นต้นไม้ไบนารีเซอร์ซ

108

เนื่องจากต้นไม้ย่อยขวาของ 14 มีค่าเท่ากับ 10 ซ่ึงน้อยกว่า 14 ไม่ตรงตามคุณสมบัติของต้นไม้แบบไบ
นารีเซอร์ซ

1) ขั้นตอนการสรา้ งตน้ ไมไ้ บนารีเซอร์ซ
ต้นไมไ้ บนารเี ซอร์ซเป็นต้นไม้ทใี่ ชป้ ระโยชนไ์ ดม้ าก เนื่องจากสามารถทำการเรียงลำดับ

และใช้ทำการค้นหาข้อมูล จึงถือว่าเป็นต้นไม้ท่ีมีความสำคัญมาก ดังนั้นจึงขอกล่าวถึงการสร้างต้นไม้น้ี
ซงึ่ ก็คือ การเพ่ิมขอ้ มูลเข้าต้นไมน้ ่ันเอง เนื่องจากทุกคร้ังท่ีมีข้อมูลเขา้ มาต้องค้นหาในต้นไม้ว่าข้อมลู ที่เข้า
มาควรจะเพิ่มต่อจากโหนดใบใด โดยเร่ิมค้นหาตั้งแต่รู้ตของต้นไม้และไปค้นต่อ ทางซ้ายหรือขวาขึ้นกับ
ข้อมูลท่ีเข้ามาถ้ามีค่าน้อยกว่ารู้ตก็ไปค้นหาในต้นไม้ย่อยซ้ายถ้ามีค่ามากกว่าหรือเท่ากับค่าของรู้ตไป
ค้นหาต่อในต้นไม้ย่อยขวาเห็นว่า ข้ันตอนวิธีเป็นไปในลักษณะรีเคอร์ซีฟจนถึงโหนดใบและทำการเพ่ิม
ข้อมูลใหม่เข้าต่อจากโหนดใบนั้น ดังน้ันมีข้อมูลเข้าเป็น 15, 14, 20, 30, 10, 11 จะมีข้ันตอนวิธีในการ
สร้างตน้ ไมไ้ บนารีเซอรซ์ ดงั ภาพประกอบที่ 7.7

15 15 15
14 14 20
a) เพม่ิ 15
b) เพ่ิม 14 c) เพ่ิม 20
15
14 20 15 15
14 20 14 20
30 10 30
30 11
10
f) เพม่ิ 11
d) เพิ่ม 30 e) เพิ่ม 10

ภาพประกอบที่ 7.7 การนำข้อมลู เก็บในตน้ ไมแ้ บบไบนารเี ซอรซ์
ของชุดข้อมลู 15, 14, 20, 30, 10 และ 11

ภาพประกอบที่ 7.7 a) ถึง f) แสดงต้นไม้ที่สร้างขึ้นในแต่ละครั้งท่ีข้อมูลแต่ละตัวถูกเข้า
เชื่อมต่อจากโหนดใบ โดยข้อมูลตัวแรกที่เข้ามาคือ 15 ให้เป็นรู้ตโหนด หลังจากน้ันก็ทำการเพิ่มข้อมูล
อ่นื ๆ เข้าตามลำดบั ตามหลกั การสรา้ งต้นไม้ไบนารเี ซอรซ์

109

เพื่อความสะดวกในการเขียนโปรแกรมสร้างต้นไม้และสะดวกในการค้นหาภายหลัง การใช้
เซนทิเนลโหนดช่วยได้มาก คือในครั้งแรกพอยน์เตอร์ ROOT เซตให้ชี้ท่ี SEN (เป็นพอยน์เตอร์ช้ีเซนทิ-
เนลโหนด) ดังน้ันต้นไม้ไบนารีเซอร์ซท่ีสร้างเป็นดังภาพประกอบท่ี 7.8 คือ ทุกๆ พอยน์เตอร์ท่ีมีค่าเป็น
NIL ชไี้ ปท่ี SEN

ROOT

15
14 20

10 30

11

^^

SEN รูป 6.19

ภาพประกอบที่ 7.8 การแทนที่ตน้ ไม้ไบนารีเซอร์ซดว้ ยพอยนเ์ ตอร์

2) การลบขอ้ มูลในตน้ ไมไ้ บนารเี ซอรซ์
การลบข้อมูลเหมือนกับเพ่ิมข้อมูลในต้นไม้ไบนารีเซอร์ซ คือเม่ือลบข้อมูลออกแล้วต้อง

ยังคงให้ต้นไม้มีคุณสมบัติเป็นไบนารีเซอร์ซเช่นเดิม เพียงแต่ว่าการลบข้อมูลทำได้ไม่ง่ายเหมือนการเพ่ิม
ข้อมลู กำหนดตน้ ไมไ้ บนารเี ซอรซ์ ดังนี้

10 26
3

1 5 20 35

4

ภาพประกอบท่ี 7.9 ตน้ ไม้ไบนารีเซอร์ซกอ่ นการลบ

110

จากภาพประกอบที่ 7.9 สามารถลบขอ้ มูลในต้นไม้ไบนารเี ซอรซ์ ไดเ้ ปน็ 2 กรณีคือ
1) การลบโหนดใบ สามารถลบไดโ้ ดยทไี่ ม่มีผลกระทบในการยา้ ยลูกซ้ายหรือลกู ขวาไปแทน

ท่ีดังน้ันถ้าต้องการลบโหนด 1,4,20 และ 35 จึงเป็นกรณีที่ง่ายที่สุด เม่ือลบโหนดดังกล่าวแล้วจะได้ดัง
ภาพประกอบที่ 7.10 a) ถึง d)

10 26 10 26
3 3

5 20 35 5 20 35

4 b) ลบ 4

a) ลบ 1

10 26 10 26
3 3

5 35 5

c) ลบ 20 d) ลบ 35

ภาพประกอบที่ 7.10 a) ถงึ d) การลบข้อมูลในตน้ ไม้ไบนารีเซอร์ซกรณที ล่ี บโหนดใบ

2) การลบโหนดใดๆ ที่ไมใ่ ช่โหนดใบ ตอ้ งการการแทนทต่ี ำแหนง่ ทีท่ ำการลบ โดยเมอ่ื นำ
โหนดมาแทนท่ีแล้วตน้ ไม้ยงั คงเป็นตน้ ไม้ไบนารเี ซอร์ซอยู่

จากภาพประกอบที่ 7.9 ถ้าลบ 5 ซึ่งมีแต่ลกู ซ้ายคือ 4 ดังน้ันต้องนำลูกซ้ายคือ 4 มาแทนที่ 5
ดงั ภาพประกอบท่ี 7.11 a) ถึง b)

111

3 10 3 10
1 26 1 26

4 5 20 35 4 4 20 35

a) ต้นไม้ไบนารเี ซอร์ซกอ่ นการลบ 5 b) ตน้ ไมไ้ บนารีเซอรซ์ หลงั ลบ 5

ภาพประกอบท่ี 7.11 a) ถึง b) การลบข้อมูลในต้นไม้ไบนารเี ซอรซ์ หลงั จากลบ 5

จากภาพประกอบที่ 7.9 ถ้าลบ 26 ซึ่งมีแต่ลูกซ้ายคือ 20 และ ลูกขวาคือ 30 ดังนั้นจะนำลูก
ซ้ายหรือลูกขวาขึ้นมาแทนที่ก็ได้ต้นไม้ท่ีได้ก็ยังคงเป็นต้นไม้ไบนารีเซอร์ซดังภาพประกอบที่ 7.12 a) ถึง
c)

10 26 10
3 3 20

1 20 35 1 5 20 35
4 5 4

a) ต้นไม้ไบนารีเซอร์ซก่อนการลบ 26 b) ตน้ ไม้ไบนารีเซอร์ซลบ 26 และแทนท่ีด้วย 20

ภาพประกอบที่ 7.12 a) ถึง b) การลบข้อมลู ในต้นไม้ไบนารีเซอร์ซหลังจากลบ 26

112

10 35
3

1 5 20

35

4

c) ต้นไม้ไบนารเี ซอรซ์ ลบ 26 และแทนทด่ี ว้ ย 35

ภาพประกอบที่ 7.12 c) การลบขอ้ มลู ในตน้ ไม้ไบนารเี ซอร์ซหลงั จากลบ 26 (ต่อ)

7.5 การท่องตน้ ไม้ไบนารี
การเข้าถึงข้อมูลในแต่ละโหนดของโครงสร้างข้อมูลแบบต้นไม้จะเรียกว่า การท่องไปในต้นไม้

หรือท่ีมีคำเรียกเฉพาะว่า “Travers“ คือการเข้าไปยังโหนดแต่โหนดในต้นไม้อย่างมีแบบแผน โดย
กำหนดว่าลำดับในการเดินเพ่ือเข้าถึงข้อมูลแต่ละโหนดเป็นอย่างไร จะเลือกเดินไปทางซ้าย หรือ ขวา
ก่อนดี จนกระท่ังครบทกุ โหนดแล้วจึงเดินออกจากโครงสรา้ งต้นไม้

โดยทัว่ ไปตน้ ไม้ไบนารีจะใชเ้ ทคนิคการดำเนนิ การท่อง อยู่ 2 แบบดังนี้
1. เทคนิค Deepth – First Traversal คือการเดินท่องเข้าไปยงั แตล่ ะโหนดในเชิงลกึ

(ตามแนวตงั้ ) จนหมดก่อนแลว้ จึงทอ่ งเข้าไปยังโหนดประชดิ
2. เทคนิค Breadth – First Traversal คอื การเดินท่องเขา้ ไปยงั แตล่ ะโหนดตามแนวกว้าง

(ตามแนวนอน) กอ่ นของโหนดประชิดในแตล่ ะระดับแล้วจงึ ท่องเข้าไปยังโหนดในเชิงลึก
ในที่นีจ้ ะอธบิ ายเทคนคิ Deepth – First Traversal เป็นการทอ่ งต้นไม้ไบนารีวธิ นี เี้ ป็นการ

เข้าถึงโหนดโดยเริ่มจากรู้ตโหนด แล้วผ่านไปลูกด้านใดด้านหน่ึงก่อนโดยจะเข้าถึงโหนดทางลึกลงไป
เรื่อยๆ จนกว่าจะถึงโหนดใบของฝั่งแรก จากนั้นจึงข้ามมาเปลี่ยนเป็นลูกของอีกฝ่ังสามารถกำหนด
รูปแบบการเดนิ มี 3 วธิ คี อื

1. พรีออเดอร์ (Preorder Traversing) วิธีการท่องเขา้ ไปในต้นไมโ้ ดยเรม่ิ ทำที่รโู้ หนด
ก่อนเป็นลำดับแรก จากน้ันก็ตามด้วยต้นไม้ย่อยซ้ายของรู้ตและต้นไม้ย่อยขวาของรู้ต แสดงขั้นตอน
วธิ ีการทอ่ งไดด้ งั น้ี

113

Pseudo Code 7.1 : PreOrder (root) Traverse a binary tree in
Node - left –right sequence.
Pre root is the entry node of a tree or subtree .
Post each node has been processed in order.
Step 1 If (root is not null)

process (root).
preOrder (leftSubtree).
preOrder (rightSubtree).
Step 2 End If. [end of If structure]
Step 3 End preorder. [end of program]

2. อนิ ออเอร์ (Inorder Traversing) วิธีการทอ่ งเข้าไปในต้นไม้โดยเริ่มทำทต่ี น้ ไม้ย่อย
ซ้ายของรู้ตโหนดก่อนเป็นลำดับแรก จากน้ันก็ตามด้วยรู้ตโหนดและท้ายสุดก็คือต้นไม้ย่อยขวาของรู้ต
แสดงขั้นตอนวิธีการทอ่ งได้ดงั น้ี

Pseudo Code 7.2 : InOrder (root) Traverse a binary tree in left-node-
right sequence.
Pre root is the entry node of a tree or subtree.
Post each node has been processed in order.
Step 1 If (root is not null)

inOrder (leftSubtree).
process (root).
inOrder (rightSubtree).
Step 2 End If .[end of If structure]
Step 3 End inOrder. [end of program]

3. โพสออเดอร์ (Postorder Traversing) วธิ กี ารท่องเข้าไปในต้นไม้โดยเรม่ิ ทำที่
ตน้ ไม้ย่อยซ้ายของรู้ตโหนดกอ่ นเปน็ ลำดบั แรก จากน้ันก็ตามด้วยต้นไม้ย่อยขวาของรตู้ โหนด โดยจะท่อง
ทรี่ ตู้ โหนดเป็นลำดบั สดุ ท้าย แสดงข้นั ตอนวธิ ีดังนี้

114

Pseudo Code 7.3 : PostOrder (root) Traverse a binary tree in left-right-
node sequence.
Pre root is the entry node of a tree or subtree.
Post each node has been processed in order.
Step1 If (root is not null)

preOrder (leftSubtree).
preOrder (rightSubtree).
process (root) .
Step 2 End If. [end of If structure]
Step 3 End postOrder. [end of program]

ผลลัพธ์ของการท่องของข้อมูลในต้นไม้โดยกำหนดให้
R หมายถึงรตู้
TL หมายถงึ ตน้ ไมย้ ่อยซา้ ยของรตู้ R
TR หมายถึงตน้ ไม้ย่อยขวาของรูต้ R

ดังน้ันจากเทคนคิ Deepth – First Traversal เป็นการทอ่ งตน้ ไม้ไบนารี สามารถท่องต้นไมโ้ ดย
มแี บบแผนในการท่องไปของทงั้ 3 วิธีการเป็นดงั นี้

พรีออเดอร์ มแี บบแผนการท่องคือ R TLTR
อนิ ออเดอร์ มแี บบแผนการท่องคือ TLR TR
โพสออเดอร์ มแี บบแผนการท่องคือ TL TR R

จากต้นไมไ้ บนารีทก่ี ำหนดใหต้ อ่ ไปนี้ จงท่องอยา่ งมแี บบแผน 3 วิธกี ารและหาผลลัพธ์จากการ
ทอ่ งท้ัง 3 วิธี คือ พรีออเดอร์ ,อนิ ออเดอร์ และ โพสออเดอร์

A

BC

ภาพประกอบท่ี 7.13 ตน้ ไม้ไบนารี

115

วธิ ีการท่องแบบพรีออเดอร์ R TLTR เร่มิ ตน้ การท่อง
สิ้นสุดการทอ่ ง
B
A

C

ภาพประกอบที่ 7.14 แสดงขั้นตอนการท่องตน้ ไม้ไบนารีแบบพรีออเดอร์

ขนั้ ตอนการท่องแบบพรีออเดอรค์ ือ
1. เร่ิมตน้ ท่ีโหนด A เปน็ Root ดงั นน้ั สามารถแสดงค่าในโหนด Root ได้ (R ) เป็น

ลำดบั ท่ี 1 และทำการเย่ยี มลูกทางซ้ายของ Root (A) ตามแบบแผน
2. เยย่ี ม B ดงั นัน้ B เป็น Root ดังนั้นสามารถแสดงค่าในโหนด Root ได้ (R ) เป็น

ลำดบั ที่ 2 และทำการเยี่ยมลูกซ้ายของ Root (B) ตามแบบแผน พบว่า Root (B) ไม่มลี ูกซ้ายแสดงวา่ ลกู
ซา้ ย (TL ) ของโหนดเยยี่ มหมดแล้ว สามารถไปเยย่ี มลูกขวาของ Root (B) พบวา่ Root (B) ไม่มีลกู ขวา
แสดงวา่ ลูกขวา (TR ) ของโหนดเย่ยี มหมดแลว้ ดังนนั้ ย้อนกลบั ไปเยีย่ ม Root A แสดงว่า Root เยี่ยมลูก
ซา้ ยครบทุกลกู นั้นคือ สามารถเยี่ยมลกู ขวาของ Root A ได้

3. เยี่ยม C ดงั น้นั C เปน็ Root ดงั นัน้ สามารถแสดงค่าในโหนด Root ได้ เปน็ ลำดับ
ท่ี 3 และทำการเยีย่ มลูกซ้ายของ Root (C) ตามแบบแผน พบว่า Root (C) ไมม่ ีลูกซ้ายแสดงวา่ ลูกซ้าย
(TL ) ของโหนดเยี่ยมหมดแลว้ สามารถไปเยี่ยมลูกขวาของ Root (C) พบวา่ Root (C) ไมม่ ีลูกขวาแสดง
ว่าลูกขวา (TR ) ของโหนดเยยี่ มหมดแลว้ ดังน้ันย้อนกลบั ไปเยี่ยม Root A แสดงว่า Root เย่ียมลกู ซา้ ย
ครบทกุ ลูก และเยยี่ มลูกขวาครบทกุ ลกู นน้ั สามารถสิน้ สุดการทอ่ งในต้นไม้ไบนารีได้

น่ันคอื ผลของพรีออเดอร์ได้ ABC ตามลำดบั

116

วิธีการทอ่ งแบบอนิ ออเดอร์ TLR TR

เริม่ ตน้ การทอ่ ง
ส้ินสุดการทอ่ ง

A

BC

ภาพประกอบท่ี 7.15 แสดงข้ันตอนการท่องต้นไม้ไบนารีแบบอนิ ออเดอร์

ข้ันตอนการท่องแบบพรีออเดอรค์ ือ
1. เริ่มต้นท่ีโหนด A เปน็ Root ดงั นน้ั ต้องทำการเย่ียมลูกซ้ายของ Root (A) ให้

หมดกอ่ นน้ันคอื ตอ้ งไปเยย่ี มลูกซ้ายของ Root (A) คือ B ตามแบบแผน
2. เยีย่ ม B ดงั นั้น B เปน็ Root ตอ้ งทำการเยย่ี มลูกซ้ายของ Root (B) ใหห้ มดก่อน

นน้ั พบว่า Root (B) ไม่มีลูกซ้ายแสดงว่าลูกซา้ ย (TL ) ของโหนดเยย่ี มหมดแลว้ สามารถที่จะแสดงคา่ ใน
Root (B) ไดเ้ ป็นลำดบั ที่ 1 (R) หลังจากนัน้ ตอ้ งทำการเยยี่ มลูกขวาของ Root (B) พบว่า Root (B)
ไมม่ ลี กู ขวา (TR ) นั้นแสดงวา่ Root (B) ได้ทำการเย่ยี มลกู ซ้ายและลกู ขวาทั้งหมดแล้ว ดังน้นั สามารถ
ยอ้ นกลับมาเยี่ยมโหนด A

3. เยย่ี ม A ดงั น้นั A เป็น Root และได้ทำการเยย่ี มลูกซา้ ยของ Root (A) หมดแลว้
สามารถแสดงค่าใน Root (A) ไดเ้ ป็นลำดับที่ 2 (R) หลงั จากนนั้ ต้องทำการเยีย่ มลูกขวาของ Root (A)
ตามแบบแผน

4. เยี่ยม C ดงั นน้ั C เปน็ Root ตอ้ งทำการเย่ยี มลูกซา้ ยของ Root (C) ใหห้ มดก่อน
นั้นพบวา่ Root (C) ไม่มีลูกซ้ายแสดงวา่ ลกู ซา้ ย (TL ) ของโหนดเยยี่ มหมดแลว้ สามารถทจี่ ะแสดงคา่ ใน
Root (C) ได้เปน็ ลำดับที่ 3 (R) หลังจากนั้นตอ้ งทำการเยี่ยมลกู ขวาของ Root (C) พบว่า Root (C)
ไมม่ ลี ูกขวา (TR ) น้นั แสดงวา่ Root (C) ได้ทำการเยีย่ มลูกซ้ายและลูกขวาท้ังหมดแลว้ ดงั นนั้ สามารถ
ยอ้ นกลับมาเย่ียมโหนด A นนั้ คอื Root (A) ได้ทำการเยีย่ มลกู ซา้ ยครบทุกลกู และเยย่ี มลกู ขวาครบทุก
ลกู แสดงว่าสามารถสิ้นสุดการทอ่ งในต้นไม้ไบนารีได้

นนั่ คือ ผลของอินออเดอร์ได้ BAC ตามลำดับ

117

วธิ ีทอ่ งแบบโพสออเดอร์ TL TR R

เรม่ิ ตน้ การท่อง
สน้ิ สดุ การทอ่ ง

A

BC

ภาพประกอบที่ 7.16 แสดงข้ันตอนการทอ่ งต้นไม้ไบนารีแบบโพสออเดอร์

ข้นั ตอนการท่องแบบโพสออเดอรค์ ือ
1. เรม่ิ ต้นทโ่ี หนด A เป็น Root ดงั นัน้ ต้องทำการเยยี่ มลูกซา้ ยและลกู ขวาของ Root

(A) ใหห้ มดกอ่ นตามแบบแผน
2. เย่ยี ม B ดังนัน้ B เปน็ Root ต้องทำการเยยี่ มลูกซ้ายและลกู ขวาของ Root (B) ให้

หมดก่อนนน้ั พบวา่ Root (B) ไม่มลี ูกซ้ายแสดงว่าลูกซ้าย (TL ) ของโหนดเย่ยี มหมดแลว้ และ Root (B)
ไมม่ ีลูกซ้ายแสดงวา่ ลกู ซ้าย (TR ) น้นั คอื สามารถแสดงค่าใน Root (B) ได้เป็นลำดบั ที่ 1 (R) ดังน้นั
สามารถย้อนกลับมาเย่ียมโหนด A

3. เย่ยี ม A ดังนั้น A เปน็ Root และไดท้ ำการเย่ียมลกู ซ้ายของ Root (A) หมดแลว้
หลงั จากนน้ั ต้องทำการเยี่ยมลูกขวาของ Root (A) คือ Root (C)

4. เยี่ยม C ดังน้ัน C เป็น Root ทำการเยย่ี มลูกซา้ ยและลูกขวาของ Root (C) ให้
หมดกอ่ นน้นั พบว่า Root (C) ไมม่ ลี ูกซ้ายแสดงว่าลกู ซา้ ย (TL ) ของโหนดเยีย่ มหมดแล้ว และ Root (C)
ไมม่ ลี กู ขวาแสดงวา่ ลูกขวา (TR ) ของโหนดเย่ยี มหมดแล้ว นั้นคือ สามารถแสดงค่าใน Root (C) ไดเ้ ป็น
ลำดบั ที่ 2 (R) ดังนนั้ สามารถย้อนกลับมาเย่ียมโหนด A ได้

5. เย่ยี ม A ดงั นั้น A เป็น Root พบวา่ ไดท้ ำการเยีย่ มลกู ซา้ ยครบทกุ ลกู และเยย่ี ม
ลกู ขวาครบทุกลกู นนั้ คือ สามารถแสดงค่าใน Root (A) ไดเ้ ป็นลำดบั ที่ 3 (R) และสิน้ สุดการท่องใน
ตน้ ไม้ไบนารีได้

น่ันคอื ผลของโพสออเดอรไ์ ด้ BCA ตามลำดับ

118

เพื่อใหท้ ำความเข้าใจไดง้ า่ ยขึ้น กำหนดต้นไม้ไบนารี ดงั ภาพประกอบที่ 7.14

15

14 20

10 30

11

ภาพประกอบที่ 7.17 ต้นไมไ้ บนารี
จากภาพประกอบท่ี 7.17

พรอี อเดอร์ 15 14 10 11 20 30
อินออเดอร์ 10 11 14 15 20 30
โพสออเดอร์ 11 10 14 30 20 15

7.6 นิพจน์ของตน้ ไม้
นิพจน์ของต้นไม้ (Expression Tree) เปน็ การนำตน้ ไม้ไบนารีมาประยกุ ต์ใช้งานส่ิงหน่ึงที่สำคัญ

คือ การนำมาช่วยคำนวณนพิ จน์ทางคณิตศาสตร์ซ่ึงในนพิ จนท์ างคณติ ศาสตรป์ ระกอบไปด้วย
1. ตัวดำเนนิ การ (Operator) คอื เครอื่ งหมายทางคณิตศาสตร์ เช่น +, -, x, / ,^
2. ตวั ถูกดำเนินการ (Operand) คอื ค่าต่างๆ หรือ ตัวแปร เช่น x,y,a,b,45,และ 36
นพิ จน์ทางคณิตศาสตร์ คอื การนำขอ้ มลู ซึ่งอาจจะอยู่ในรปู ของค่งคงท่ี หรอื ตัวแปรมาดำเนิน

การโดยใชเ้ ครื่องหมายทางคณิตศาสตรเ์ ปน็ ตัวสัง่ งาน เชน่ 45+18, 2b+4ab เปน็ ตน้
ดงั นน้ั นิพจนข์ องต้นไม้ คอื ตน้ ไมไ้ บนารที ีม่ คี ุณสมบตั ิดังน้ี
1. โหนดใบใช้เกบ็ เฉพาะตวั ถกู ดำเนนิ การ
2. รตู้ โหนดและโหนดภายในทั้งหมดใชเ้ กบ็ เฉพาะตัวดำเนินการ
ภาพประกอบที่ 7.18 แสดงตวั อยา่ งนพิ จน์ของต้นไม้

119

/

+D

A-

BC

ภาพประกอบที่ 7.18 นิพจนข์ องตน้ ไม้

ขั้นตอนการสร้างนพิ จน์ของตน้ ไม้
เมอ่ื ตอ้ งการนำนิพจน์ทางคณติ ศาสตรม์ าสร้างเปน็ นพิ จน์ของต้นไม้ มีขัน้ ตอนงา่ ยๆ ดงั นี้

1. แปลงนิพจนอ์ นิ ฟกิ ซเ์ ป็นนพิ จน์พรฟี ิกซ์กอ่ น และตอ่ ท้ายนพิ จนด์ ว้ ยอักขระพเิ ศษเพื่อให้
ทราบจดุ จบของนิพจน์ โดยใช้เครื่องหมาย ;

2. นำนพิ จนพ์ รฟี ิกซ์ทไ่ี ดม้ าสร้างเป็นต้นไม้
3. การสรา้ งเปน็ ต้นไม้ โดยใหส้ ร้างโหนดแรกเป็นรตู้ โหนดเพอื่ เก็บตวั ดำเนินการตวั แรกสุด
จากน้ันทุกคร้ังที่พบตัวดำเนินการให้แทรกเป็นลูกทางซ้ายไปเร่ือย ๆ จนกว่าจะเจอตัวถูกดำเนินการให้
นำไปแทรกท่ีทางลูกซ้ายของตัวดำเนินการล่าสุดจากนั้นให้ย้อนกลับไปท่ีโหนดลา่ สุดที่เก็บตัวดำเนินการ
แลว้ แทรกโหนดถัดไปท่ีดา้ นขวาของโหนดสุดทา้ ยท่ีเกบ็ ตัวดำเนนิ การนี้
หากตอ้ งการสรา้ งตน้ ไม้จากนพิ จน์ (A+(B-C))*D มขี ้ันตอนดงั นี้
1. แปลงเปน็ นิพจนพ์ รฟี ิกซ์ ได้ * + A - B C D ;
2. นำนพิ จน์พรีฟกิ ซ์ทไ่ี ดม้ าสรา้ งเปน็ ต้นไม้ ตามลำดบั ดังภาพประกอบท่ี 7.19

120

a) b) c) d)

* * * *

+ + +

A A-

e) f) g)

* * *
+ + +D

A- A- A-
BC BC
B

ภาพประกอบที่ 7.19 ขน้ั ตอนการสร้างนิพจน์ของต้นไม้

7.7 การแปลงต้นไม้ท่ัวไปเป็นต้นไมไ้ บนารี
ต้นไม้ท่ัวไป คือ ต้นไม้ที่มีโหนดลูกเท่าไรก็ได้ โดยแต่ละโหนดไม่จำเป็นต้องมีโหนดลูกเท่ากัน

ดงั นนั้ ในการดำเนนิ การขอ้ มูลในโครงสร้างต้นไมจ้ ึงนยิ มทำใหต้ น้ ไมท้ ่ัวไปอยใู่ นรูปของต้นไม้ไบนารกี ่อน
ภาพประกอบที่ 7.20 แสดงลักษณะของตน้ ไม้ทั่วไปและต้นไม้ไบนารี

B A A
E B
D E
a) ต้นไม้ท่ัวไป C
C
F

b) ตน้ ไม้ไบนารี D

F

ภาพประกอบท่ี 7.20 a) และ b) เปรียบเทียบระหว่างตน้ ไม้ท่ัวไปและต้นไมไ้ บนารี

121

ข้ันตอนการแปลงต้นไมท้ ั่วไป เปน็ ต้นไมไ้ บนารี มีข้ันตอนดังน้ี
1) ขัน้ สร้างความสัมพันธ์ระหว่างโหนดพน่ี อ้ ง
2) ขน้ั ปรบั ความสัมพันธร์ ะหวา่ งโหนดพ่นี อ้ ง

จากภาพประกอบท่ี 7.20 a) ตน้ ไม้ท่วั ไป สามารถแปลงเป็นตน้ ไม้ไบนารไี ด้ดงั ต่อไปนี้

ขน้ั ที่ 1 สรา้ งความสมั พันธ์ระหว่างโหนดพน่ี ้อง จากภาพประกอบที่ 7.20 a) โหนด B , C และ
D คือ โหนดพีน่ อ้ ง สามารถสร้างความสัมพันธโ์ ดยใชเ้ สน้ เช่อื ม( ) ระหวา่ งโหนดพ่นี ้องไดด้ ังภาพ
ประกอบท่ี 7.21

A

B CD

E
F

ภาพประกอบที่ 7.21 สรา้ งความสมั พันธร์ ะหว่างโหนดพี่น้อง

ขั้นที่ 2 ขั้นปรับความสัมพันธ์ระหว่างโหนดพี่น้อง จากภาพประกอบที่ 7.21 สามารถปรับเส้น
ความสัมพันธ์ ให้เป็นลูกทางขวาของโหนดพ่ีน้อง ดังน้ัน C จะเป็นลูกขวาของ B และ D จะเป็นลูกขวา
ของ C ส่วน E และ F ซ่ึงเป็นลูกซ้ายอยู่แล้ว ก็ยังคงเป็นลูกซ้ายเช่นเดิม ไม่เปลีย่ นแปลง โดย E เป็นลูก
ซา้ ยของ B และ F เป็นลูกซ้ายของ D ดังภาพประกอบท่ี 7.22 a) จะได้ต้นไม้ไบนารี ดงั ภาพประกอบที่
7.22 b)

A A
B B
EC EC

DD

FF

a) ปรบั ความสมั พันธ์ระหว่างโหนดพน่ี ้อง b) ต้นไม้ไบนารี

ภาพประกอบท่ี 7.22 a) และ b) การปรับความสัมพนั ธร์ ะหว่างโหนดพน่ี ้องเพ่อื แปลงเป็นตน้ ไม้ไบนารี

122

7.8 ตน้ ไม้ที่มีความสูงสมดุล
ต้นไม้ท่ีมีความสูงสมดุล หรือเรียกว่า ต้นไม้ AVL หรือ Height - balanced Binary Tree เป็น

ต้นไม้ที่แต่ละโหนดมีความสูงของแต่ละต้นไม้ย่อยต่างกันไม่เกิน 1 จากท่ีได้เคยกล่าวมาแล้วว่าความสูง
ของต้นไม้มีความสำคัญต่อการค้นหาข้อมูลในต้นไม้อย่างมาก ดังน้ันการพยายามค้นหาวิธีการที่ปรับให้
ต้นไมท้ รี่ กั ษาความสงู (ให้เตี้ยท่ีสุด) จึงถูกค้นคว้าโดยนักวิทยาศาสตร์ชาวรสั เซยี 2 คนคอื นาย Adel’son
Velskii และ Landes ซึ่งช่ือของต้นไม้นี้ต้ังเพื่อเป็นเกียรติแก่ผู้ค้นพบและได้พิสูจน์ว่าความสูงของต้นไม้
AVL

การตรวจสอบว่าเป็นต้นไม้ AVL หรือไม่ มี Balance Factor ตรวจสอบโดย Balance Factor
มีค่าเท่ากับ ความสูงของต้นไม้ย่อยซ้าย - ความสูงของต้นไม้ย่อยขวา ซ่ึงค่าของแฟคเตอร์น้ีของแต่ละ
โหนด ในต้นไม้ต้องเป็น 1, 0 หรือ -1 เท่าน้ัน จึงจะเป็นต้นไม้ AVL และถ้าในระยะใช้งานต้นไม้ที่มีการ
เพ่ิมหรือลบโหนดแล้ว ทำให้ค่าของ Balance Factor ไม่เป็นตามค่านิยามแฟคเตอร์ ก็จะมีการปรับ
ต้นไม้โดยวิธีการหมุน (Rotation) ซึ่งมีอยู่ 3 แบบ คือ หมุนครั้งเดียวไปทางซ้าย หมุนคร้ังเดียวไป
ทางขวา และหมนุ ทั้งสองครง้ั (Double Rotation)

0 0

0 0 0 + -
00 0 1
1
0
1
01

1

a) b)

- +
2 1
1
0 + - +
2 2 1
1
1 0 0
-

1

0 00

c) d)

ภาพประกอบท่ี 7.23 a) ถงึ b) เป็นตน้ ไม้ AVL , c) และ d) ไมเ่ ปน็ ตน้ ไม้ AVL

ภาพประกอบท่ี 7.23 แสดงว่าค่าของ Balance Factor ของแต่ละโหนดซึ่งภาพประกอบท่ี 7.23
a) และ b) เป็นตน้ ไม้ AVL สว่ นภาพประกอบท่ี 7.23 c) และ d) ไมเ่ ปน็ ต้นไม้ AVL

123

หลักการหมุนครงั้ เดียวจะเป็นวิธีท่ีง่ายทสี่ ุดในการปรับความสมดุลของต้นไม้ เช่น กอ่ นการหมุน
มีต้นไม้ AVL อยู่แล้ว ดังภาพประกอบท่ี 7.24 a) โดยเป็นทั้งต้นไม้ไบนารีเซอร์และ ต้นไม้ AVL เม่ือทำ
การเพ่มิ โหนด C ก็ทำใหต้ ้นไม้ใหม่ ไมม่ คี ณุ สมบตั ิเป็นตน้ ไม้ AVL ดงั ภาพประกอบท่ี 7.24 b)

AC

BB

a) ตน้ ไม้ AVL ก่อนการเพิ่ม C b) ไมเ่ ปน็ ตน้ ไม้ AVL เมอ่ื เพ่มิ C

ภาพประกอบที่ 7.24 ต้นไม้ AVL กอ่ น เพมิ่ โหนด และหลังจากเพิ่มโหนด C

จากภาพประกอบที่ 7.24 b) เมื่อเพิม่ โหนด A ก็ทำใหต้ น้ ไม้ไม่เป็นต้นไม้ AVL เช่นกนั ดงั ภาพ
ประกอบท่ี 7.25

A-2 C+2

B-1 B+1

C0 A0

a) เพมิ่ โหนด A b) เพมิ่ โหนด A

ภาพประกอบที่ 7.25 ตน้ ไมไ้ มเ่ ปน็ ตน้ ไม้ AVL

การหมุนครั้งเดียวทางซ้ายกับภาพประกอบท่ี 7.25 a) และการหมุนคร้ังเดียวทางขวา กับ
ภาพประกอบที่ 7.25 b) เป็นการปรับต้นไม้ท่ีไม่เป็นต้นไม้ AVL (เมื่อทำการเพ่ิมหรือลบโหนด) ให้เป็น
ต้นไม้ AVL เป็นดังภาพประกอบที่ 7.26 a) และ b) ตามลำดับ

124

B0 B0

A0 C0 A0 C0

a) b)
ภาพประกอบท่ี 7.26 การเพ่ิมหรอื ลบโหนดเพ่ือให้เป็นต้นไม้ AVL

A-1 A-2 A-2 B0
C0
C+1 B-1 A0 C0
a)
B0 C0 d)

b) c)

ภาพประกอบที่ 7.27 การปรับตน้ ไม้ให้เปน็ ต้นไม้ AVL

สังเกตว่าการหมุนซ้ายหรือหมุนขวาเม่ือส่วนท่ีไม่เข้าคุณสมบัติต้นไม้ AVL อยู่ในคุณลักษณะ
เฉียงไปทางใดทางหน่ึงสว่ นในกรณีภาพประกอบที่ 7.27 a) นี้เปน็ ต้นไม้ AVL เมื่อเพิม่ โหนด B จะต่อจาก
ซ้ายของโหนด C ทำให้ไม่เป็นต้นไม้ AVL และจะใช้หมุนซ้ายหรอื ขวาเพยี งคร้ังเดียวไม่ได้วิธกี ารใหม่เปน็ การ
หมุน 2 คร้ัง ครั้งแรกหมุนไปทางขวาก่อนเฉพาะโหนด C และ B ได้ภาพประกอบที่ 7.27 c) จากนั้นให้
หมุนไปทางซา้ ยเฉพาะโหนด A และ B ไดภ้ าพประกอบท่ี 7.27 d)

125

C+1 C+2 C+2 B0

A-1 B+1 A0 C0
A0

B0 A0

a) b) c) d)

ภาพประกอบท่ี 7.28 การปรับต้นไม้ให้เปน็ ตน้ ไม้ AVL

สังเกตได้ว่ามีการหมุนขวาตามด้วยการหมุนซ้ายแต่โหนดที่เก่ียวข้องกับการหมุนต่างกัน ถ้ามี
ตน้ ไม้รูปร่างที่ตรงกันข้ามเช่น ภาพประกอบท่ี 7.28 a) เม่อื เพ่มิ โหนด B เป็นภาพประกอบท่ี 7.28 b) ซ่ึง
จะไม่เป็นต้นไม้ AVL แล้วจะต้องปรับโดยการหมุน 2 คร้ัง ครั้งแรกหมุนไปทางซ้ายโหนด A และ B ได้
ภาพประกอบท่ี 7.28 c) และหมุนไปทางขวาโหนด B และ C ไดภ้ าพประกอบท่ี 7.28 d)

เมื่อกำหนดตน้ ไม้ไบนารีเซอรท์ เี่ ปน็ ตน้ ไม้ AVL ดงั ตอ่ ไปน้ี

70
-1

62 84 85
0 +1 0

68 80
30 0 -1
0

83
0

ภาพประกอบที่ 7.29 ต้นไม้ไบนารเี ซอรท์ ่ีเป็นต้นไม้ AVL

126

จากภาพประกอบท่ี 7.29 ถา้ เพิม่ โหนดคา่ 82 เป็นดังน้ี

70
-2

62 84 85
0 +2 0

30 68 80
00 -2

83 82
+1 0
+1

83
0

ภาพประกอบที่ 7.30 ต้นไม้ไบนารีเซอร์ท่ีเป็นต้นไม้ AVL เมอ่ื เพ่ิมโหนดค่า 82

จากภาพประกอบท่ี 7.30 เมื่อเพ่ิม 82 เข้ามา ซ่ึงจะไม่มีคุณสมบัติเป็นต้นไม้ AVLท่ีแต่ละโหนด
ต้องมีความแตกต่างของความสูงของต้นไม้ย่อยซ้ายและขวาไม่เกิน 1 ใช้การปรับโดยวิธีหมุน 2 ครั้ง ไป
ทางขวากับโหนด 83 และ 82 และหมุนไปทางซ้ายโหนด 80 และ 82 ผลจะเป็น ต้นไม้ AVL ดัง
ภาพประกอบที่ 7.31

70
-1

62 84
0 +1

30 68 82 85
0 00 0

80 83
00

ภาพประกอบที่ 7.31 การปรับโหนดค่า 82 เพื่อใหเ้ ป็นต้นไมไ้ บนารีเซอร์ทีเ่ ปน็ ตน้ ไม้ AVL

127

7.9 สรปุ
โครงสร้างข้อมูลแบบต้นไม้ (Tree) โครงสร้างข้อมูลแบบต้นไม้เป็นโครงสร้างท่ีมีระดับ

(Hierarchical Structure) เช่นโครงสร้างแสดงองค์ประกอบของหน่วยงานต่างๆ เป็นโครงสร้างต้นไม้
รายชอ่ื คณะผูบ้ ริหารภายในบรษิ ทั ซ่งึ แสดงลำดับระดบั ของผู้บริหารในแตล่ ะดับไลล่ งมาเรื่อยๆ

โครงสรา้ งข้อมูลแบบต้นไม้มกี ารใช้งานในระบบคอมพิวเตอรด์ ้วยกันหลายแบบสาเหตุที่เรียกว่า
โครงสร้างมูลแบบตน้ ไมเ้ นื่องจากลักษณะการจัดเก็บท่คี ล้ายกบั รปู ต้นไม้แตจ่ ะแตกต่างจากตน้ ไม้ท่ีเราพบ
เห็นกันท่ัวไป กล่าวคือต้นไม้ชนิดนจี้ ะมีใบไม้แตกกิ่งก้านสาขาลงทางด้านล่างส่วนด้านบนจะเป็นรากของ
ต้นไม้ที่เรียกว่า รู้ตโหนด หรือ โหนดพ่อ โดยลักษณะต้นไม้มีหลายประเภท ได้แก่ ต้นไม้แบบทั่วไป
ตน้ ไม้ไบนารี ตน้ ไมไ้ บนารีแบบสมบรู ณ์ ตน้ ไม้ไบนารเี ซอร์ซ ต้นไม้ทม่ี คี วามสงู สมดุล เปน็ ต้น

โดยเฉพาะต้นไม้ไบนารีเซอร์ซเป็นต้นไม้ที่ใช้ประโยชน์ได้มาก เนื่องจากสามารถทำการ
เรียงลำดับและใชท้ ำการค้นหาข้อมูล จงึ ถอื วา่ เปน็ ต้นไม้ท่มี ีความสำคญั มาก ดังนน้ั จึงใหค้ วามสำคญั กับ
การสร้างต้นไม้ไบนารีเซอร์ซ และการลบข้อมูลในต้นไม้แบบไบนารีเซอร์ซ สำหรับการเข้าถึงข้อมลู ในแต่
ละโหนดของโครงสร้างขอ้ มูลแบบต้นไม้ จะเรียกวา่ การทอ่ งไปในต้นไม้ หรอื ที่มคี ำเรยี กเฉพาะวา่
“Travers“ คือการเข้าไปยังโหนดแต่โหนดในต้นไม้อย่างมีแบบแผน โดยกำหนดว่าลำดับในการเดินเพื่อ
เขา้ ถึงข้อมลู แต่ละโหนดเปน็ อย่างไร จะเลอื กเดินไปทางซา้ ย หรอื ขวาก่อนดี จนกระท่ังครบทุกโหนดแล้ว
จึงเดินออกจากโครงสร้างต้นไม้ โดยท่ัวไปต้นไม้ไบนารี จะใช้เทคนิคการดำเนินการท่องอยู่ 2 แบบดังนี้
1) เทคนิค Deepth - First Traversal คือการเดินท่องเข้าไปยังแต่ละโหนดในเชิงลึก (ตามแนวตั้ง) ซ่ึง
สามารถเดินได้ 3 แบบได้แก่ พรีออเดอร์ (Preorder Traversing) อินออเอร์ (Inorder Traversing)
และโพสออเดอร์ (Postorder Traversing) 2) เทคนิค Breadth - First Traversal คือการเดินท่องเข้า
ไปยังแตล่ ะโหนดตามแนวกวา้ ง (ตามแนวนอน)

128

คำถามทา้ ยบทที่ 7

1. อธบิ ายความหมายและยกตวั อย่างโครงสรา้ งข้อมูลแบบตน้ ไมต้ ามความเข้าใจมาพอสังเขป
2. จงอธบิ ายส่วนประกอบของต้นไม้พรอ้ มยกตวั อย่างประกอบการอธิบาย

2.1 Root Node
2.2 Leaf Node
2.3 Brother Node
2.4 Branch
2.5 Branch Node
2.6 Level
2.7 Degree
2.8 Direct Decendant Node
2.9 Descendant Node
2.10 High
3. จากต้นไบนารีต่อไปนี้ตอบคำถาม

A

BC

DE

FG

3.1 รู้ตโหนดไดแ้ ก่โหนดใด
3.2 โหนดใบได้แกโ่ หนดใด
3.3 ตน้ ไม้มีความลึกเปน็ เท่าไร
3.4 โหนดพนี่ ้องไดแ้ ก่โหนดใดบ้าง
4. ไบนารเี ซอรซ์ มีคุณสมบัติเปน็ อย่างไร อธิบายพร้อมวาดรูปประกอบ
5. จงสรา้ งนิพจน์ของตน้ ไม้ จากนพิ จนต์ ่อไปน้ี
5.1 X+D*E-X/F^E*G
5.2 A-B+C*D/E-F^G^H

129

6. จงวาดภาพโครงสร้างต้นไม้แบบไบนารีเซอรซ์ จากข้อมูลนำเข้าที่กำหนดให้ในแตล่ ะข้อ
6.1 4 8 20 10 3 1 2 15 6 7 5 11
6.2 A G B F C E D

7. จงสรา้ งต้นไม้ไบนารีเซอรซ์ จากขอ้ มูลต่อไปน้ี 45,54,81,25,34,7,1,25,6,85 แล้วทอ่ งตน้ ไม้แบบ
อินออเดอร์ พรอี อเดอร์ และโพสออเดอร์ แสดงวธิ ีการสรา้ งอยา่ งละเอียด
8. จากขอ้ 7 จงแสดงภาพการลบโหนด 54, 45 และ 85 ตามลำดบั
9. กำหนดข้อมูลชดุ ตวั เลขประกอบดว้ ยข้อมูลที่ไมเ่ รยี งลำดับดังน้ี 12,5,9,16,13,7,8,11,14,10,15 จง
นำข้อมูลทก่ี ำหนดให้ สร้างตน้ ไม้ไบนารเี สริ์ซใหม้ โี ครงสรา้ งของต้นไมต้ ามทก่ี ำหนดให้ดังนี้

9.1 ต้นไมน้ ้มี คี วามสงู เทา่ กับ
9.2 โหนดท่อี ยู่ในระดบั 3 ได้แก่โหนด
9.3 Root Node คอื
9.4 ต้นไมย้ อ่ ยทางซา้ ยได้แก่
9.5 โหนดใบไดแ้ ก่
9.6 โหนดพน่ี ้องไดแ้ ก่
9.7 หลกั การสรา้ งต้นไมน้ ้ีคือ
9.8 โหนดทีม่ าก่อน 8 คอื
9.9 โหนดท่ีมาหลัง 14 คอื
9.10 Degree ของโหนด 12 คอื

130

10. จงแปลงตน้ ไม้ทั่วไปต่อไปนีใ้ หเ้ ป็นต้นไม้ไบนารี

B A D
EF C

GH

11. จากโหนดต่อไปนจ้ี งสร้างต้นไม้ที่มคี วามสูงสมดลุ (AVL Tree)
10.1 20 30 45 5 15 22 10 35 9 78
10.2 3 5 7 10 15 19 20
10.3 A J H K D C G B

บทที่ 8
โครงสรา้ งข้อมลู กราฟ

กราฟ (Graph) เป็นโครงสร้างข้อมูลไม่เป็นเชิงเส้น (Nonlinear Structure) โดยกราฟเป็น
โครงสร้างข้อมูลที่มีกระบวนการทำงานคือ มีเส้นทางให้เลือกทำงานได้หลายเส้นทางในแต่ละขั้นตอน
ขึ้นอยู่กับว่าผู้ใช้งานจะเลือกเส้นทางใดเมื่อถึงข้ันตอนน้ันๆ กราฟจัดเป็นโครงสร้างข้อมูลท่ีสามารถ
นำไปใช้ประโยชน์ โดยนำไปประยุกต์ใช้งานเพื่อเป็นการแก้ปัญหาการจัดวางเส้นทางท่ีค่อนข้างจะ
ซับซ้อน เช่น การวางข่ายงานคอมพิวเตอร์ การวิเคราะห์เส้นทางวิกฤติ และปัญหาเส้นทางท่ีส้ันที่สุด
การออกแบบและกำหนดเส้นทางการบินของสายการบนิ การกำหนดเส้นทางการส่งข่าวสารบนเครือขา่ ย
คอมพิวเตอร์ การรวมโครงขา่ ยโทรคมนาคม เป็นตน้

8.1 ลักษณะโครงสร้างข้อมลู แบบกราฟ
โครงสร้างข้อมูลกราฟ คือ โครงสรา้ งที่ประกอบดว้ ยกลุ่มของโหนดหลายๆ โหนดมาเชื่อมตอ่ กัน

ระหว่างโหนดด้วยเส้นเชื่อม โดยจะเรียกโหนดน้ันว่า เวอร์เท็กซ์ (Vertex/Vertices) ส่วนของเส้นเช่ือม
ที่มาเช่ือมต่อกันระหว่างโหนดแต่ละคู่ จะเรียกว่า อาร์ค (Arcs) สำหรับกราฟแบบมีทิศทาง หรือ
เอดจ์(Edges) สำหรบั กราฟแบบไมม่ ที ิศทาง

ดงั นน้ั โครงสรา้ งขอ้ มูลแบบกราฟสามารถเขยี นแทนด้วยสญั ลักษณด์ ังนี้
G = (V,E)

เมื่อ G คอื กราฟ
V คอื กลมุ่ ของเวอรเ์ ท็กซ์
E คือเส้นเช่ือมระหว่างเวอรเ์ ทก็ ซ์

ลักษณะของโครงสร้างขอ้ มลู กราฟ จะแบ่งออกเปน็ 2 ประเภทคอื
1. โครงสร้างข้อมูลกราฟแบบมีทิศทาง (Directed Graph) คือ โครงสร้างข้อมูลกราฟ

ที่มีทิศทางกำกับไว้บนเส้นเชื่อม การเดินทางภายในโครงสร้างข้อมูลกราฟประเภทน้ี จำเป็นจะต้อง
เดินทางตามทิศทางหัวลูกศรของเส้นเชื่อมที่กำหนดเท่าน้ัน จะเดินสวนทางไม่ได้ ดังตัวอย่าง
ภาพประกอบที่ 8.1 (a)

2. โครงสร้างข้อมูลกราฟแบบไม่มีทิศทาง (Undirected Graph) คือ โครงสร้างข้อมูล
กราฟ ทีไ่ ม่มที ิศทางกำกับไว้บนเสน้ เชื่อม การเดินทางภายในโครงสร้างข้อมูลกราฟประเภทน้ี สามารถ
เดินทางทงั้ ไปและกลับบนเสน้ เชอื่ มนไี้ ด้ ดงั ตัวอย่างภาพประกอบท่ี 8.1 (b)

132

B B
A
D A
C
D

C b) กราฟแบบไมม่ ที ิศทาง

a) กราฟแบบมที ิศทาง

ภาพประกอบที่ 8.1 ลกั ษณะโครงสรา้ งข้อมูลกราฟ a) กราฟแบบมีทิศทาง b) กราฟแบบไม่มีทิศทาง

จากภาพประกอบท่ี 8.1 สามารถอธิบายได้ดังน้ี
a) กราฟแบบมที ิศทาง มี 4 เวอร์เท็กซ์และ 5 อารค์

เขยี นแทนด้วย V = {A,B,C,D} , E= {(A,B), (A,C), (B,C), (C,D), (D,B)}
น่ันคอื ประกอบดว้ ย 4 เวอรเ์ ท็กซ์ไดแ้ ก่ A, B, C, D มีเสน้ เชื่อมอาร์คทัง้ หมด 5 คไู่ ดแ้ ก่
(A,B), (A,C), (B,C), (C,D) และ (D,B)
b) กราฟแบบไมม่ ีทิศทาง มี 4 เวอรเ์ ทก็ ซ์และ 5 เอดจ์
เขียนแทนดว้ ย V = {A,B,C,D} , E= {(A,B), (B,A), (A,C), (C,A), (B,C), (C,B), (B,D),
(D,B), (C,D), (D,C)}
นน่ั คือ ประกอบด้วย 4 เวอร์เทก็ ซ์ ได้แก่ A, B, C, D และมีเสน้ เชอ่ื มเอดจ์ทั้งหมดที่
เป็นได้ 10 คู่ ได้แก่ (A,B), (B,A), (A,C), (C,A), (B,C), (C,B), (B,D), (D,B), (C,D) และ (D,C)

8.2 คำศัพทเ์ ฉพาะที่เก่ียวกับโครงสร้างขอ้ มูลกราฟ
โครงสร้างขอ้ มลู กราฟ จะมคี ำศัพท์เฉพาะท่ีใชใ้ นการทำงานมีดงั นี้
8.2.1 เวอรเ์ ท็กซ์ คือ กลุ่มของโหนดทใ่ี ช้สำหรบั แทนข้อมูลใดๆ ในโครงสรา้ งข้อมลู กราฟ เช่น

แทนข้อมลู สายการบนิ , เมืองใดๆ ,ชื่อจงั หวัด, ชอื่ เครอื่ ข่ายของระบบโทรคมนาคม เป็นต้น เขยี นแทน
ดว้ ยสัญลกั ษณ์ ( )

8.2.2 เส้นเช่อื มระหว่างโหนด กรณเี ป็นกราฟแบบมีทิศทางเรียกว่า อาร์ค เขยี นแทนด้วย
สญั ลกั ษณ์ ( ) และกรณเี ป็นกราฟไมม่ ีทศิ ทางเรียกวา่ เอดจ์ เขียนแทนด้วยสัญลักษณ์ ( --- )

8.2.3 เวอรเ์ ท็กซ์ประชิด (Adjacent Vertices) หรอื เวอรเ์ ทก็ ซ์เพื่อนบา้ น คือ เวอรเ์ ท็กซ์สอง
เวอรเ์ ท็กซ์ท่มี ีเส้นเช่อื มตอ่ ระหวา่ งกัน จากภาพประกอบที่ 8.1 a) เวอรเ์ ท็กซป์ ระชดิ ได้แก่ (A,B),
(A,C),(B,C), (C,D),(D,B)

133

8.2.4 เส้นทาง (Path) คือเส้นทางทีเชื่อมจากเวอร์เท็กซ์แต่ละเวอร์เท็กซ์ในกราฟแบบมีทิศทาง
และกราฟไม่มีทิศทาง โดยจะแสดงเป็นลำดับของเวอร์เท็กซ์แต่ละตัว ในแต่ละกราฟอาจมีเส้นทางได้
มากกวา่ 1 เส้นทางโดยข้ึนอยกู่ บั จำนวนเวอร์เทก็ ซ์

จากภาพประกอบที่ 8.1 a) กราฟแบบมที ศิ ทางมีทัง้ หมด 4 เวอร์เท็กซ์ ดงั น้ันเสน้ ทาง ได้แก่
เวอร์เท็กซ์บนเส้นทางเป็น 4 เวอร์เท็กซ์ เส้นทางท่ี 1 คือ A,B,C,D จะมีเส้นเชื่อมระหว่างเวอร์
เท็กซ์ 3 เสน้ ทาง
เวอรเ์ ท็กซ์บนเส้นทางเป็น 3 เวอรเ์ ท็กซ์ เสน้ ทางท่ี 2 คือ A,C,D จะมเี สน้ เชือ่ มระหวา่ งเวอร์
เทก็ ซ์ 2 เสน้ ทาง
นัน้ คือ สามารถสรปุ ไดว้ า่ ถา้ มจี ำนวนเวอรเ์ ท็กซ์บนเส้นทางเป็น n (เมื่อ n เปน็ จำนวนเต็มใดๆ)
จะมเี สน้ ทางเช่ือมระหวา่ งเวอรเ์ ทก็ ซ์จำนวน n,1 เสน้ ทางเสมอ
ส่วนสำหรับกราฟแบบไมม่ ีทิศทางจะมเี ส้นทางไปและกลบั ในการเดินทางระหวา่ งเวอรเ์ ท็กซไ์ ด้
มากกวา่ กราฟแบบมีทิศทาง
8.2.5 เสน้ ทางไซเคิล (Cycle Path) คอื เส้นทางระหว่างเวอรเ์ ทก็ ซ์ที่มีจดุ เริม่ ต้นและจดุ สิ้นสุดใน
เวอรเ์ ท็กซเ์ ดยี วกัน ดังนนั้ จากภาพประกอบท่ี 8.1 a) เส้นทางไซเคลิ (Cycle Path) ของกราฟแบบมี
ทิศทางไดแ้ ก่ เส้นทาง B,C,D เป็นต้น
8.2.6 ความต่อเน่ืองของกราฟ (Connected) คือ เส้นทางการเชื่อมจากเวอร์เท็กซ์หนึ่งไป
ยงั เวอร์เทก็ ซใ์ ดๆ ในกราฟ สามารถเบ่งออกเปน็ 2 รปู แบบคือ

1) ความต่อเนื่องแบบแข็งแรง (Strongly Connected) คือกราฟที่ทุกเวอร์เท็กซ์
สามารถมเี สน้ ทางถงึ กันไดท้ กุ เวอรเ์ ทก็ ซ์

2) ความต่อเน่ืองแบบอ่อนแอ (Weakly Connected) คือ กราฟที่มีเวอร์เท็กซ์อย่าง
นอ้ ย 2 เวอรเ์ ทก็ ซ์ท่ีมเี ส้นทางไม่เชือ่ มตอ่ กนั

8.2.7 กราฟแบบมีทิศทางที่ไม่มีความต่อเน่ือง (Unconnected Graph) คือ เป็นกราฟที่มี
ลักษณะของเวอร์เท็กซ์บางเวอร์เท็กซ์แยกออกไป ทำให้ไม่สามารถเชื่อมโยงเส้นทางระหว่างกันได้

8.2.8 จำนวนเส้นของเวอร์เท็กซ์ (Degree) คือจำนวนของเส้นท่ีมาเชื่อมต่อกับเวอร์เท็กซ์
แบง่ เป็น 2 รูปแบบคอื

1) เส้นอินดกี รี (Indegree) คือ จำนวนเส้นอาร์คที่มที ิศทางเข้าหาเวอรเ์ ท็กซ์
2) เสน้ เอาต์ดีกรี (Outdegree) คอื จำนวนของเส้นอาร์คท่ีมีทิศทางออกจากเวอรเ์ ทก็ ซ์

134

B D B D
A A

C C

a) กราฟที่มีความต่อเน่ืองแบบแข็งแรง b) กราฟท่ีความตอ่ เนือ่ งแบบอ่อนแอ

B
A

CD

c) กราฟทไ่ี ม่มีความต่อเน่ือง
ภาพประกอบท่ี 8.2 แสดงความต่อเนื่องของโครงสร้างกราฟแบบมีทิศทาง

จากภาพประกอบท่ี 8.2 a) เปน็ กราฟทีม่ ีความต่อเนือ่ งแบบแขง็ แรง จะเหน็ ไดว้ า่ ทกุ เวอร์
เท็กซ์สามารถมีเส้นทางเชื่อมต่อกันได้ต้ังแต่เวอร์เท็กซ์ A ถึงเวอร์เท็กซ์ D ส่วน b) เป็นกราฟท่ีความ
ตอ่ เนื่องแบบออ่ นแอจะเห็นได้ว่า จากภาพมีเวอรเ์ ท็กซ์ B กับ D มีเส้นทางที่ไม่เช่ือมตอ่ กัน c) เป็นกราฟ
ท่ีไม่มีความต่อเนื่อง จะเห็นได้ว่าเวอร์เท็กซ์ D เป็นเวอร์เท็กซ์ท่ีแยกออกไป ทำให้ไม่สามารถเช่ือมโยง
เส้นทางระหว่างกันได้ทุกเวอร์เท็กซ์ และจากภาพประกอบท่ี 8.3 a) เส้นอินดีกรี ของเวอร์เท็กซ์ B มี
จำนวน 2 เสน้ ส่วนเวอร์เทก็ ซ์ A, C และ D มีจำนวนเส้นอนิ ดีกรจี ำนวน 1 เส้น และ เวอร์เทก็ ซ์ C มเี ส้น
เอาต์ดกี รี จำนวน 2 เส้น สว่ น A, B และ D มจี ำนวนเส้นเอาต์ดกี รจี ำนวน 1 เสน้

8.3 การแทนทโี่ ครงสร้างข้อมูลแบบกราฟด้วยเมตริกซ์
เนือ่ งจากโครงสร้างแบบกราฟนั้น โดยทัว่ ไปจะมเี สน้ ทางจากโหนดต้นทางไปยังโหนดปลายทาง

น้นั สามารถมีได้มากกวา่ 1 เส้นทาง และสามารถคำนวณจำนวนเสน้ ทางได้โดยสามารถนำหลักการของ
เมตริกซ์ เพือ่ ใช้สำหรบั เกบ็ ค่าของเอดจ์ ดงั นัน้ การแทนท่ีโครงสร้างข้อมลู แบบกราฟดว้ ยเมตริกซจ์ ะตอ้ งมี
การกำหนดขนาดของขอ้ มูลในแนวนอนคือจำนวนแถว (Row) และกำหนดขนาดของข้อมูลในแนวต้งั คือ
จำนวนหลัก (Column) ดว้ ยขนาด Row x Column และใช้ตวั เลข 0 และ 1 แทนความหมายของการ
เชื่อมโยงระหว่างเวอรเ์ ท็กซ์ ดังน้ี

แทน 1 หมายถึง มีเสน้ เชอ่ื มจากเวอรเ์ ท็กซเ์ ท็กซต์ น้ ทางไปยังเวอร์เท็กซป์ ลายทาง
แทน 0 หมายถึง ไม่มเี ส้นเชอื่ มจากเวอร์เทก็ ซ์ต้นทางไปยงั เวอรเ์ ท็กซป์ ลายทาง

135

B B
A
D A
C
D

C b) กราฟแบบไมม่ ีทศิ ทาง

a) กราฟแบบมที ิศทาง

ภาพประกอบที่ 8.3 กราฟแบบมีทิศทางและกราฟแบบไมม่ ีทิศทาง

จากภาพประกอบที่ 8.3 การแทนทโี่ ครงสรา้ งขอ้ มูลแบบกราฟแบบมีทศิ ทาง (a) ดว้ ยเมตรกิ ซไ์ ด้

ดังตอ่ ไปนี้ เวอรเ์ ท็กซ์ปลายทาง

เวอรเ์ ทก็ ซ์ต้นทาง ABCD
A0110
B0010
C0001
D0100

จากการแทนทด่ี ้วยเมตริกซ์สามารถสรปุ ได้วา่
ไมม่ ีเสน้ เชือ่ มจากเวอรเ์ ท็กซ์ A ไป A และ A ไป D แตจ่ ะมีเสน้ เชือ่ มจาก A ไป B และ A ไป C
ไม่มีเสน้ เชอื่ มจากเวอรเ์ ท็กซ์ B ไป A , B ไป B และ B ไป D แตจ่ ะมเี ส้นเชื่อมจาก B ไป C
ไม่มีเส้นเชื่อมจากเวอร์เท็กซ์ C ไป A , C ไป B และ C ไป C แต่จะมเี สน้ เชือ่ มจาก C ไป D
ไมม่ ีเส้นเชือ่ มจากเวอร์เท็กซ์ D ไป A , D ไป C และ D ไป D แตจ่ ะมเี ส้นเชอ่ื มจาก D ไป B
และการแทนที่โครงสรา้ งข้อมูลแบบกราฟแบบไมม่ ีทิศทาง (b) ด้วยเมตริกซ์ไดด้ ังต่อไปนี้

เวอรเ์ ท็กซ์ตน้ ทาง เวอรเ์ ทก็ ซ์ปลายทาง

ABCD
A0110
B1011
C1101
D0110

136

จากการแทนทีด่ ้วยเมตริกซ์สามารถสรปุ ไดว้ า่
ไม่มีเสน้ เช่อื มจากเวอร์เทก็ ซ์ A ไป A และ A ไป D แตจ่ ะมีเส้นเชือ่ มจาก A ไป B และ A ไป C
ไมม่ เี ส้นเชือ่ มจากเวอร์เทก็ ซ์ B ไป B แต่จะมเี ส้นเชื่อมจาก B ไป A , B ไป C และ B ไป D
ไม่มเี สน้ เชือ่ มจากเวอร์เทก็ ซ์ C ไป C แตจ่ ะมเี ส้นเชือ่ มจาก C ไป A , C ไป B และ C ไป D
ไม่มีเส้นเชือ่ มจากเวอรเ์ ทก็ ซ์ D ไป A และ D ไป D แต่จะมเี ส้นเชอื่ มจาก D ไป B และ D ไป C

8.4 การท่องเขา้ ไปในโครงสร้างข้อมลู แบบกราฟ
การท่องเข้าไปในโครงสร้างข้อมูลแบบกราฟ (Travers Graph) คือ การเดินท่องเข้าไปใน

โครงสร้างข้อมูลเพื่อหาข้อมูลที่เก็บในโครงสร้างข้อมูลแบบกราฟ โดยจะเดินผ่านในทุก ๆ เวอร์เท็กซ์ท่ีอยู่
ภายในกราฟมีลักษณะการทำงานคลา้ ยกับการท่องในโครงสรา้ งต้นไม้ โดยจะแบง่ ออกเปน็ 2 แบบ คือ

แบบที่ 1 การท่องเขา้ ไปในโครงสร้างขอ้ มูลกราฟแบบแนวลกึ (Depth First Traverse)
เปน็ การทอ่ งเขา้ ไปในกราฟโดยจะเดินไปตามแนวดง่ิ ของการสืบทอดของเวอร์เทก็ ซก์ ่อนแลว้
จงึ เคลือ่ นไปยังเวอรเ์ ทก็ ซ์ข้างเคียง เทียบได้กับการท่องเข้าไปในโครงสร้างต้นไมแ้ บบพรอี อ
เดอร์

แบบที่ 2 การท่องเข้าไปในโครงสร้างข้อมูลกราฟแบบแนวกว้าง (Breadth First Traverse)
เป็นการทอ่ งไปในกราฟโดยจะทำการเดินไปท่ีเวอร์เท็กซ์ทุกเวอรเ์ ท็กซ์ในระดบั เดียวกันซ่ึงเป็นเวอร์เท็กซ์
ขา้ งเคียงกอ่ นทีจ่ ะลงสู่เวอรเ์ ท็กซ์ของการสบื ทอดในระดับถัดไป

AB AB

CD CD

a) กราฟแบบมีทศิ ทาง b) กราฟแบบไมม่ ที ิศทาง

ภาพประกอบท่ี 8.4 กราฟแบบมีทิศทางและกราฟแบบไม่มีทิศทางท่ีใชใ้ นการท่อง

จากภาพประกอบท่ี 8.4 สามารถแสดงข้ันตอนวิธีการท่องเข้าไปในโครงสร้างข้อมูลกราฟแบบ
แนวลึกของ a) กราฟแบบมที ศิ ทาง ดงั น้ี

1. เริม่ ตน้ จาก A
2. จาก A ไปยงั B และ C ได้ แตใ่ ห้ความสำคญั ของเวอร์เทก็ ซ์สบื ทอด คอื C นั่นคือ

จะได้ A – C
3. จาก C ไปยัง D จะได้ C – D
4. จาก A ไปยัง B จะได้ A , B

137

ดงั นั้นการท่องเข้าไปในโครงสร้างขอ้ มลู กราฟแบบแนวลกึ ของ a) กราฟแบบมีทิศทางไดผ้ ลลพั ธ์
ตามลำดบั คอื A – C, D –B ดังภาพประกอบท่ี 8.5

เร่ิมตน้   B
C
A



D

ภาพประกอบที่ 8.5 ผลลัพธก์ ารทอ่ งแบบแนวลึกของกราฟแบบมที ิศทาง

จากภาพประกอบท่ี 8.5 สามารถแสดงข้ันตอนวิธีการท่องเข้าไปในโครงสร้างข้อมูลกราฟแบบ
แนวกวา้ งของ a) กราฟแบบมที ิศทาง ดังน้ี

1. เรมิ่ ตน้ จาก A
2. จาก A ไปยัง B และ C ได้ แต่ใหค้ วามสำคัญของเวอร์เท็กซ์สบื ทอดและเวอร์เท็กซข์ างเคียง

ในระดับที่สอง นัน่ คอื จะได้ A – C , B
3. จาก C ไปยัง D จะได้ C – D
ดงั นน้ั การทอ่ งเข้าไปในโครงสรา้ งขอ้ มลู กราฟแบบแนวกวา้ งของ a) กราฟแบบมีทิศทางได้
ผลลัพธ์ คือ A – C – B , D ดงั ภาพประกอบท่ี 8.6

เริม่ ต้น 

AB D



C

ภาพประกอบท่ี 8.6 ผลลัพธก์ ารทอ่ งแบบแนวกว้างของกราฟแบบมีทิศทาง

8.5 การคน้ หาเส้นทางทส่ี ้นั ที่สุดของกราฟ
ขั้นตอนวิธีในการค้นหาเส้นทางที่สั้นท่ีสุด (Shortest path Algorithm) จัดว่าเป็นการ

ดำเนินการที่มีการเรียกใช้งานบ่อยท่ีสุด เป็นขั้นตอนวิธีที่ใช้คำนวณหาระยะทางที่ส้ันท่ีสุดจากโหนดแรกไป
ยังโหนดปลายทางของกราฟ โดยหาระยะทางที่ส้ันที่สุดของแต่ละเส้นทาง และมีเทคนิคในการคำนวณ
หลากหลายวิธี ซ่ึงแต่ละวิธีจะมีลักษณะการคำนวณคล้ายๆ กัน จะแตกต่างกันบ้างเล็กน้อยตามประเภท
ของกราฟดงั ต่อไปน้ี

138

1. การค้นหาเส้นทางที่สั้นที่สุดบนกราฟไม่มีทิศทาง ในการค้นหาเส้นทางท่ีสั้นท่ีสุดมี
ขน้ั ตอนวธิ ีการค้นหาเส้นทางท่ีสน้ั ที่สุดดว้ ย Kruskal’s Algorithm มีรายละเอยี ดดังต่อไปน้ี

การค้นหาเส้นทางที่ส้ันท่ีสุดด้วย Kruskal’s Algorithm เป็นข้ันตอนวิธีที่ใช้ในการ
แก้ปัญหาของกราฟแบบไมม่ ีทิศทางโดยการนำเอดจ์ทีม่ ีค่านำ้ หนกั นอ้ ยท่ีสุดมาเช่ือมตอ่ เปน็ ความสัมพันธ์
ระหว่างเวอร์เท็กซ์ทั้งหมดของกราฟจนครบทุกเอดจ์และไม่ทำให้เกิดเส้นทางไซเคิล โดยก่อนการนำ
เอดจ์มาประกอบกันต้องมีการจัดเรียงลำดับน้ำหนักเอดจ์จากน้อยไปมาก ซึ่งหมายถึง ชนิดข้อมูลที่มีค่า
นอ้ ยสดุ จะมคี า่ สูงสดุ (Priority Queue)

ตัวอย่างท่ี 8.1 การหาเส้นที่ที่ส้ันท่ีสุดของกราฟแบบไม่มีทิศทางด้วย Kruslak’s
Algorithm เม่ือกำหนดกราฟแบบไมม่ ีทิศทางตอ่ ไปนี้

6 4 D 1

C
3
A9 14 F

B5 E

ภาพประกอบท่ี 8.7 กราฟแบบไม่มีทศิ ทางที่ต้องการค้นหาเส้นทาง

ด้วย Kruslak’s Algorithm

ขั้นตอนท่ี 1 นำค่านำ้ หนักมาทำการจดั เรยี งลำดับน้ำหนักเอดจจ์ ากน้อยไปมากดังนี้
ตารางที่ 8.1 จัดเรียงคา่ น้ำหนักเอดจ์จากน้อยไปมาก
เอดจ์ ค่าน้ำหนกั
D,E 1
D,F 1
C,E 3
E,F 4
C,D 4
B,E 5
A,C 6
A,B 9

139

ข้ันตอนท่ี 2 ดำเนินการพิจารณาค่าน้ำหนักของเอดจ์ที่มีค่าต่ำสุดเป็นอันดับแรกแล้ว
พจิ ารณาอันดับมากกวา่ ข้ึนไปเร่ือยๆ แบบเรียงจากน้อยไปหามาก โดยเมื่อเชื่อมครบทุกเอดจ์แล้วไม่เกิด
เป็นเส้นทางไซเคลิ ดงั น้ี

6 C4 D1
3
A 14 F

9

5
BE

ภาพประกอบที่ 8.8 ผลลพั ธข์ องกราฟแบบไม่มที ศิ ทางท่ีทำการค้นหาเส้นทาง
ดว้ ย Kruslak’s Algorithm

จากภาพประกอบท่ี 8.7 แสดงผลลัพธ์ของกราฟแบบไม่มีทิศทางท่ีทำการค้นหา
เส้นทางด้วย Kruslak’s Algorithm นัน่ คือเอดจ์ได้เชือ่ มทุกเวอรเ์ ท็กซ์แล้ว ดงั นัน้ น้ำหนักรวมของกราฟ
ในเส้นทางทีส่ นั้ ท่สี ุดมีคา่ เท่ากับ 6+3+5+1+1 = 16

2. การค้นหาเส้นทางท่ีสน้ั ทีส่ ุดบนกราฟแบบมีทิศทาง
การคน้ หาเส้นทางที่สน้ั ที่สดุ ดว้ ย Dijkstra’s Algorithm เป็นการคน้ หาเส้นทาง
บนกราฟแบบมที ิศทางท่ีมคี ่านำ้ หนักกำกับอยู่ โดยในทีน่ ี้ค่าน้ำหนกั จะต้องเปน็ ตวั เลขจำนวนเต็มบวก
เท่านัน้
โดย Dijkstra’s Algorithm เป็นขั้นตอนวิธีท่ีใช้แนวคิดชนิดข้อมูลท่ีมีค่าน้อยสุดจะมี
ค่าสูงสุด (Priority Queue) เช่นกันซึ่งจะมีการกำหนดค่าเร่ิมต้นให้กับเวอร์เท็กซ์ เริ่มต้นมีค่าเป็นศูนย์
(0) สว่ น เวอร์เท็กซ์นอกเหนือจากน้นั ให้กำหนดมคี ่าเท่ากับ ∞ แล้วทำการพิจารณาเอดจ์ของแต่ละ เวอร์
เท็กซ์เพ่ือหาเอดจ์ที่มีค่าน้ำหนักน้อยที่สุด โดยจะต้องนำผลรวมของเส้นทางน้ันมาเทียบกับผลรวมของ
เส้นทางอื่น เพ่ือเปรียบเทียบว่าค่าน้ำหนักของเส้นทางที่เลือกนั้นยังมีผลรวมขอค่าน้ำหนักของเส้นทาง
ทั้งหมดหรอื ไม่
โดยมขี ั้นตอนดังนี้

1) กำหนดโหนดต้นทาง โหนดปลายทาง
2) ตรวจสอบเสน้ เชือ่ มตอ่ ท่สี ามารถเดนิ ทางจากโหนดตน้ ทางไปโหนดปลายทาง
โดยสามารถผ่านเส้นทางอื่นๆ ได้ตามขา่ ยงาน
3) รวมค่าน้ำหนกั ของแต่ละเส้นทาง
4) เปรียบเทียบเลือกเสน้ ทางทไ่ี ดค้ ่านำหนกั นอ้ ย
5) ทำซำ้ จนครบทุกโหนด และ รวมระยะทางทกุ เส้น

140

ตัวอย่างท่ี 8.2 กำหนดกราฟแบบมิทิศทางต่อไปน้ีจงค้นหาเส้นท่ีที่ส้ันที่สุดด้วย
Dijkstra’s Algorithm

6 C4 D1
3
A 92 14 F

5
BE

ภาพประกอบท่ี 8.9 กราฟแบบมีทศิ ทางท่ีต้องการค้นหาเส้นทาง
ด้วย Dijkstra’s Algorithm

เมื่อกำหนดให้

(V) คือ เวอรเ์ ท็กซ์

D(V) คอื ระยะทาง

ขนั้ ตอนที่ 1 กำหนดคา่ เรมิ่ ตน้ ให้กบั เวอร์เทก็ ซ์เรมิ่ ตน้ มคี า่ เทา่ กบั ศูนย์ (0) และ

เวอร์เทก็ ซ์อน่ื มีค่าเท่ากับ ∞ ดงั ตารางท่ี 8.2

ตารางท่ี 8.2 ตาราง A

เวอร์เท็กซ์ (v) ระยะทาง D[v] จากตารางที่ 8.2 เมือ่ พจิ ารณาเวอร์เทก็ ซ์ทถ่ี ูกชี้ดว้ ย A คอื

A 0 B (d[B] = 9) และ C (d[C] = 6) เปรียบเทยี บเส้นทางท่ีสน้ั

B ∞ ท่ีสดุ ของ เวอรเ์ ท็กซ์ A โดยเลือกเส้นทางไป C ดงั น้นั จะได้

C∞ 6 C d[C] = 6

D∞
E ∞ d[A] = 0 A 9
F∞
B d[B] = 9

ข้ันตอนที่ 2 จากข้นั ตอนที่ 1 เลอื กเสน้ ทางไป A-C ดงั น้ัน ให้ C เป็นเวอร์เท็กซ์
เริ่มต้นแลว้ พจิ ารณาเวอรเ์ ท็กซ์ทีถ่ ูกชีด้ ว้ ย C โดยคา่ เวอรเ์ ท็กซ์ C มีคา่ เท่ากบั 6 ส่วนเวอร์เท็กซ์อื่นมคี ่าดัง
ตารางท่ี 8.3

141

ตารางที่ 8.3 ตารางฺ B จากตารางที่ 8.3 เมอ่ื พจิ ารณาเวอร์เท็กซ์ที่ถูกชีด้ ้วย C คอื
เวอร์เท็กซ์ (v) ระยะทาง D[v] B (d[B] = 8) ,D (d[D] = 10) และ E (d[E] =9)
เปรียบเทยี บเส้นทางท่ีส้ันท่สี ุดของเวอรเ์ ทก็ ซ์ C โดยเลอื ก
C6 เส้นทางไป B ดังน้นั จะได้
B 6+2 =8
D 6+4 =10 6 C d[C] = 6
E 6+3=9
F∞

d[A] = 0 A9 2

B d[B] = 8

ขน้ั ตอนที่ 3 จากขน้ั ตอนท่ี 2 เลือกไปเสน้ ทาง A - C - B ดังน้นั ให้ B เป็นเวอรเ์ ท็กซ์
เร่มิ ตน้ แลว้ พจิ ารณาเวอรเ์ ท็กซ์ที่ถูกชดี้ ้วย B โดยค่าเวอรเ์ ท็กซ์ B มคี ่าเท่ากับ 8 ส่วนเวอร์เท็กซ์อน่ื มีค่าดัง
ตารางท่ี 8.4

ตารางท่ี 8.4 ตาราง C จากตารางที่ 8.4 เม่อื พิจารณาเวอรเ์ ทก็ ซ์ทถ่ี ูกช้ีดว้ ย B คอื
เวอรเ์ ท็กซ์ (v) ระยะทาง D[v] E (d[E] = 13) เปรียบเทียบเส้นทางทสี่ ัน้ ทสี่ ุดของ
เวอร์เท็กซ์ B โดยเลอื กเส้นทางไป E ดงั น้นั จะได้
B8
D∞ 6 C d[C] = 6
E 8+5=13
F∞

d[A] = 0 A9 2

5 E

B

d[B] = 8 d[B] = 13

ข้ันตอนท่ี 4 จากข้นั ตอนที่ 3 เลอื กไปเส้นทาง A - C - B - E ดังน้นั กำหนดให้ E เป็น
เวอร์เทก็ ซ์เริ่มต้นแลว้ พจิ ารณาเวอร์เทก็ ซ์ที่ถูกช้ดี ้วย E โดยค่าเวอรเ์ ท็กซ์ E มคี ่าเท่ากับ 13 ส่วนเวอร์
เทก็ ซ์อน่ื มคี ่าดงั ตารางที่ 8.5

142

ตารางท่ี 8.5 ตาราง D จากตารางที่ 8.5 เม่อื พจิ ารณาเวอรเ์ ทก็ ซ์ท่ีถูกช้ีด้วย E คอื
เวอร์เท็กซ์ (v) ระยะทาง D[v] D (d[D] = 14) และ F (d[F] =17 เปรียบเทยี บเส้นทาง
E 13 ทีส่ ้ันท่ีสดุ ของเวอรเ์ ท็กซ์ E โดยเลอื กเส้นทางไป D ดังนัน้ จะได้
D 13+1=14
F 13+4=17 d[C] = 6 d[D] = 14

6C D

d[A] = 0 A9 2 1

B5 E

d[B] = 8 d[E] = 13

ข้นั ตอนท่ี 5 จากขั้นตอนท่ี 4 เลอื กไปเส้นทาง A - C – B - E - D ดังน้นั ให้ D เปน็
เวอร์เท็กซ์เร่ิมตน้ แลว้ พจิ ารณาเวอร์เท็กซ์ท่ีถูกช้ีดว้ ย D โดยคา่ เวอร์เท็กซ์ D มีค่าเทา่ กบั 14 สว่ นเวอร์
เทก็ ซ์อ่นื มีค่าดังตารางท่ี 8.6

ตารางท่ี 8.6 ตาราง E จากตารางท่ี 8.6 เมื่อพิจารณาเวอร์เท็กซ์ที่ถูกชดี้ ว้ ย D คอื
เวอรเ์ ทก็ ซ์ (v) ระยะทาง D[v] F (d[F] = 15) เปรียบเทียบเสน้ ทางที่สนั้ ทสี่ ุดของเวอรเ์ ท็กซ์ D
โดยเลอื กเส้นทางไป F ดงั นน้ั จะได้
D 14
F 14+1=15

d[C] = 6 d[D] = 14

6C D1

d[A] = 0 A9 2 1 F

B5 E d[F] = 15

d[B] = 8 d[E] = 13

ขน้ั ตอนท่ี 6 จากขน้ั ตอนท่ี 5 เลือกไปเส้นทาง A - C - B - E - D - F ดังนน้ั ให้ F เป็น
เวอรเ์ ทก็ ซเ์ ร่ิมตน้ แล้วพจิ ารณาเวอร์เทก็ ซ์ท่ีถูกช้ดี ว้ ย F พบว่า F ไม่ไดช้ ้ีไปยังเวอรเ์ ท็กซ์ใดๆ ดังน้ันจงึ
ส้ินสดุ การคำนวณหาเส้นทางท่สี ั้นท่สี ุด

143

น่ันคอื จากภาพภาพประกอบที่ 8.12 กราฟแบบมีทิศทางที่ต้องการค้นหาเสน้ ทาง
ดว้ ย Dijkstra’s Algorithm จะไดเ้ สน้ ทางที่ส้ันทส่ี ุด ดังนี้ A - C - B - E - D - F

ขนั้ ตอนวิธีการคน้ หาเส้นทางทส่ี ั้นที่สุดบนกราฟแบบมีน้ำหนกั สามารถแสดงไดด้ ังข้นั ตอนวิธี
ต่อไปน้ี

Pseudo Code 8.1: Procedure Dijkstra. Variables are T, V, W, I and Q, V and
W are Vertex. Q is Queus structure. T is Table
Step 1 Begin
Step 2 For I = 1 to NumVertex do

begin
Set V = Smallest Unknown Distance Vertex;
T [V].Known = true;
For Each W adjacent to V do
If not T [W].Known then
begin
If T [V].Dist + C(V,W) < T [W].Dist then
Begin
{Update W}
Decrease T [W].Dist to
T [V].Dist + C(V,W);
T [W].Path := V;
end. [End of If Structure]
end. [End of If Structure]

end. [End of For loop]
Step 3 End of Program.

8.6 สรุป
โครงสร้างข้อมูลกราฟเป็นโครงสร้างข้อมูลไม่เป็นเชิงเส้น โดยประกอบไปด้วย กลุ่มของโหนด

หลายๆ โหนดมาเช่ือมต่อกันระหว่างโหนดด้วยเส้นเชื่อม โดยจะเรียกโหนดน้ันว่า เวอร์เท็กซ์ ส่วนของ
เส้นเช่อื มทม่ี าเช่ือมตอ่ กันระหวา่ งคู่โหนด จะเรียกว่า อาร์ค หรือ เอดจ์

กราฟอาจเป็นได้ทั้งกราฟท่ีมีทิศทางหรือไม่มีทิศทาง โดยกราฟที่มีทิศทางแบ่งเป็น 2 ประเภท
คือ 1) โครงสร้างข้อมูลกราฟแบบมีทิศทาง (Directed Graph) คือ โครงสร้างข้อมูลกราฟที่มีทิศทาง
กำกับไว้บนเส้นเช่ือม เม่ือต้องการเดินทางเข้าไปภายในโครงสร้างข้อมูลกราฟประเภทน้ีจำเป็นจะต้อง

144

เดินทางตามทิศทางหัวลูกศรของเส้นเชื่อมที่กำหนดเท่านั้น จะสวนทางไม่ได้ 2) โครงสร้างข้อมูลกราฟ
แบบไม่มีทศิ ทาง (Undirected Graph) คือโครงสรา้ งข้อมลู กราฟทไ่ี ม่มีทิศทางกำกับไว้บนเสน้ เช่ือม เม่ือ
ต้องการเดนิ ทางภายในโครงสร้างขอ้ มูลกราฟประเภทนี้ สามารถเดนิ ทางทัง้ ไปและกลับบนเสน้ เช่ือมนไ้ี ด้

การค้นหาเส้นทางที่ส้ันท่ีสุดจัดว่าเป็นการดำเนินการท่ีมีการเรียกใช้งาน บ่อยที่สุดในโครงสร้าง
ขอ้ มูลกราฟ และมีเทคนิคในการคำนวณหลากหลายวิธี ซ่ึงจะแบ่งออกเป็น 1) การค้นหาเส้นทางท่ีส้ันท่ีสุด
บนกราฟแบบมีทิศทาง 2) การค้นหาเส้นทางที่ส้ันท่ีสุดบนกราฟแบบไม่มีทิศทาง ไม่ว่าจะทำการค้นหา
เส้นทางท่ีสั้นที่สุดด้วยวิธีใดก็ตาม จุดเด่นข้อหน่ึงของโครงสร้างข้อมูลกราฟก็คือ โครงสร้างข้อมูลกราฟ
สามารถมีคำตอบทีถ่ ูกตอ้ งได้มากกวา่ 1 แบบ ดงั น้ันคำตอบในการคำนวนหาเส้นทางทสี่ ั้นที่สดุ จึงสามารถ
เป็นไปได้หลายรูปแบบด้วยกันต่างจากโครงสร้างข้อมูลอ่ืนๆ ท่ีคำตอบท่ีถูกต้องจะมีเพียงรูปแบบเดียว
เสมอ

ดังนั้นกราฟจัดเป็นโครงสร้างข้อมูลที่สามารถนำไปใช้ประโยชน์โดยนำไปประยุกต์ใช้งานเพ่ือ
เป็นการแก้ปัญหาการจัดวางเส้นทางที่ค่อนข้างจะซับซ้อน เช่น การวางข่ายงานคอมพิวเตอร์ การ
วิเคราะห์เส้นทางวิกฤติและปัญหาเส้นทางท่ีส้ันท่ีสุด การออกแบบและกำหนดเส้นทางการบินของสาย
การบิน การกำหนดเส้นทางการส่งข่าวสารบนเครือข่ายคอมพวิ เตอร์ การรวมโครงข่ายโทรคมนาคม เป็น
ตน้

145

คำถามทา้ ยบทที่ 8

1. อธบิ ายความแตกต่างของกราฟแบบมีทศิ ทางและกราฟแบบไมม่ ีทศิ ทาง
2. กราฟมีคุณสมบัติแตกต่างไปจากต้นไม้อยา่ งไรบ้าง
3. จงอธบิ ายคำศัพท์ทเ่ี กีย่ วข้องต่อไปน้ี

3.1 Vertex
3.2 Arcs
3.3 Edges
3.4 Path
3.5 Cycle Path
3.6 Connected
3.7 Adjacent Vertices
3.8 Strongly Connected
3.9 Weakly Connected
3.10 Indegree
3.11 Outdegree
3.12 Degree
4. จากกราฟทก่ี ำหนดให้ต่อไปน้ี ตอบคำถามข้อ 4.1-4.5

BE

A F
C

DG

4.1 เขยี นสญั ลกั ษณ์แทนเวอร์เท็กซ์ H

4.2 เสน้ ทางเชื่อมระหวา่ งเวอร์เทก็ ซม์ ีก่ีเสน้ ทาง เส้นทางอะไรบ้าง

4.3 จงหา Degree, Indegree และ Outdegree

4.4 เวอรเ์ ทก็ ซ์ประชดิ ได้แก่เวอรเ์ ทก็ ซ์ใดบ้าง

4.5 เส้นทางไซเคลิ ได้แกเ่ ส้นทางใด

146

5. จงแทนที่โครงสรา้ งข้อมูลแบบกราฟต่อไปน้ดี ้วยเมตรกิ ซ์ โดยเรม่ิ จากเวอรเ์ ท็กซ์ A ไปส้นิ สุดที่ เวอร์
เทก็ ซ์ F

5.1
B

AD F
C

E

5.2

B

AD F
C

E

จงใช้ภาพที่กำหนดใหต้ อบคำถาม ข้อ 6 และ ข้อ 7

3B 5
3
D2 G
A 4

4 2C

F E2
4

6. จากกราฟจงทำการ Breadth First Traverse และ Depth First Traverse

7. จากกราฟจงคน้ หาเสน้ ทางที่สนั้ ท่ีสุดบนกราฟน้ี ด้วย Kruslak’s Algorithm

8. จากกราฟตอ่ ไปน้ี จงคน้ หาเส้นทางทสี่ ้ันที่สุดบนกราฟนี้ ดว้ ย Dijkstra’s Algorithm

5 C2
B
14 3E
3
AD
2

5 G 4
4

F1 H 2I


Click to View FlipBook Version