ธิติมานันท์ ดำรงศักดิ์เมธี
สาขา ระบบสารสนเทศทางธุุรกิจ
คณะวิทยาการจัดการ
มหาวิทยาลัยราชภัฏสุราษฎร์ธานี
โครงการตำราเฉลมิ พระเกียรติ 84 พรรษามหามงคล
โครงสรา้ งขอ้ มลู และขน้ั ตอนวิธี
พิมพ์ครง้ั ที่ 1 มถิ นุ ายน 2556 จำนวน 100 เล่ม
พิมพค์ ร้ังท่ี 2 มนี าคม 2557 จำนวน 100 เลม่
พมิ พค์ ร้ังที่ 3 มนี าคม 2558 จำนวน 100 เล่ม
ข้อมลู ทางบรรณานกุ รม
ธติ มิ านนั ท์ ดำรงศักดิ์เมธี. (2556). โครงสรา้ งขอ้ มลู และข้นั ตอนวธิ ี. สรุ าษฎรธ์ านี :
มหาวิทยาลัยราชภัฏสรุ าษฎรธ์ านี, 186 หน้า.
ISBN : 978-974-306-484-5
จดั พิมพโ์ ดย
มหาวทิ ยาลยั ราชภฏั สรุ าษฎร์ธานี
272 หมทู่ ี่ 9 ตำบลขุนทะเล อำเภอเมอื ง
จังหวดั สุราษฎรธ์ านี 84100
โทรศพั ท์ 077 913333 โทรสาร 077 355468
www.sru.ac.th
ก
คำนำ
การศึกษาเก่ียวกับโครงสร้างข้อมูลและขัน้ ตอนวิธี ทาให้ผู้ศึกษาสามารถเข้าใจ
กระบวนการทางานของโปรแกรม เขา้ ใจถงึ ตรรกะ และรูว้ ธิ ใี นการแก้ปัญหา เขา้ ใจวธิ กี ารจดั เก็บ
ข้อมูลในคอมพิวเตอร์ เพ่ือให้สามารถนาไปใช้งานได้อย่างมีประสิทธิภาพ ผู้ศึกษาสามารถนา
ขนั้ ตอนวธิ ีท่ดี ีมาใช้ในการพฒั นาโปรแกรม และสามารถคดั เลือกโครงสร้างข้อมูลท่ีเหมาะสมกบั
ขนั้ ตอนวธิ มี าสรา้ งโปรแกรมทม่ี ปี ระสทิ ธภิ าพไปพรอ้ มกนั ได้
สาหรบั เน้ือหาในตาราเลม่ น้ี ผเู้ ขยี นไดน้ าเสนอแนวคดิ ของโครงสรา้ งขอ้ มลู และขนั้ ตอนวธิ ี
เบ้ืองต้น โดยแบ่งออกเป็น 9 บท แต่ละบทจะเน้นให้ความเข้าใจกบั แนวคิดเชิงทฤษฎีเบ้ืองต้น
เก่ยี วกบั การทางานของโครงสร้างขอ้ มูล ความรู้เบ้อื งต้นเก่ยี วกบั โครงสรา้ งขอ้ มูล ความรูเ้ บ้อื งต้น
เก่ียวกับขนั้ ตอนวิธี หลักการและการดาเนินการกับโครงสร้างข้อมูลทงั้ แบบโครงสร้างเชิงเส้น
(Linear Structure) และ โครงสรา้ งไม่เป็นเชงิ เสน้ (Nonlinear Structure) การเรยี งลาดบั ขอ้ มูลและ
การคน้ หาขอ้ มลู เพ่อื ใหผ้ ูศ้ กึ ษาสามารถบูรณาการความคดิ ในหลายๆ เรอ่ื งเขา้ ดว้ ยกนั และสามารถ
นาสง่ิ ท่ศี กึ ษามาประยุกตใ์ ชใ้ นการพฒั นาโปรแกรมต่อไปได้ โดยทุกบทจะมตี วั อย่างประกอบ และ
อธบิ ายขนั้ ตอนวธิ กี ารทางานของโครงสรา้ งขอ้ มูลดว้ ยรหสั เทยี ม (Pseudo Code) ในแต่ละบทจะมี
คาถามทา้ ยบทเพอ่ื ใหผ้ ศู้ กึ ษาไดฝ้ ึกฝนและทาความเขา้ ใจเน้อื หาในบทนนั้ ๆ ใหด้ ยี ง่ิ ขน้ึ
ผู้เขียนจึงหวังว่าตาราเล่มน้ีจะมีประโยชน์ต่อผู้ศึกษา เพ่ือเป็นแนวทางในการพฒั นา
โปรแกรมคอมพวิ เตอรต์ อ่ ไป
ธติ มิ านันท์ ดารงศกั ดเิ ์มธี
ปรบั ปรุง มกราคม 2565
บทที่ 1
ความรู้เบ้ืองต้นเกีย่ วกับโครงสร้างขอ้ มลู
ความรูเ้ ก่ียวกับชนดิ ของข้อมูลและโครงสร้างข้อมูลแบบต่างๆ เป็นส่วนที่สำคัญในการทำงาน
ของระบบคอมพวิ เตอร์ ข้อมูลท่ีสามารถนำมาประมวลผลด้วยคอมพิวเตอร์มหี ลากหลายประเภท การนำ
เอาขอ้ มลู ประเภทต่างๆ เขา้ มาจัดการโดยอาศัยคอมพิวเตอร์นน้ั เป็นสง่ิ ทผ่ี ู้พฒั นาโปรแกรมตอ้ งคำนงึ ถึง
ผพู้ ัฒนาโปรแกรมจำเป็นต้องมคี วามรูแ้ ละเข้าใจถึงชนดิ ของขอ้ มูล โครงสรา้ งข้อมูลการแทนท่ีขอ้ มลู ใน
หน่วยความจำของข้อมูลในแต่ละประเภท เป็นต้น จะเห็นได้ว่าในกระบวนการออกแบบโปรแกรม
คอมพิวเตอร์ส่ิงสำคัญอันดับแรกท่ีต้องคำนึงถึงคือ การเลือกโครงสร้างข้อมูล ซ่ึงจากการพัฒนา
ระบบงานใหญ่ๆ ได้แสดงให้เห็นว่า ความยากในการพัฒนาโปรแกรมคอมพิวเตอร์ท่ีมีประสิทธิภาพนั้น
จะขึ้นอยู่กับโครงสร้างข้อมูลที่เลือกใช้ หลังจากตัดสินใจเลือกโครงสร้างข้อมูลที่จะใช้แล้ว ก็มักจะทำให้
ทราบถึงขั้นตอนวิธีที่ต้องใช้กับโครงสร้างข้อมูลน้ันได้ แต่ในบางคร้ังก็อาจจะกลับกันคือ การประมวลผล
ทีส่ ำคัญๆ ของโปรแกรม ได้มกี ารใช้ข้ันตอนวธิ ีท่ีตอ้ งใช้โครงสร้างข้อมูลบางแบบโดยเฉพาะ จงึ จะทำงาน
ได้เต็มประสิทธิภาพ ถึงอย่างไรก็ตามไม่ว่าจะเลือกโครงสร้างข้อมูลด้วยวิธีการใด การใช้โครงสร้างข้อมูล
ที่เหมาะสมก็เป็นสิ่งที่สำคัญมากอยู่ดี แนวความคิดในเรื่องโครงสร้างข้อมูลน้ี ส่งผลกับการพัฒนาวิธีการ
มาตรฐานต่างๆ ในการออกแบบและเขียนโปรแกรมดว้ ยคอมพิวเตอร์ใหม้ ีประสทิ ธิภาพ
1.1 ชนดิ ของข้อมูล
ข้อมูล (Data) เป็นวัตถุดิบพ้ืนฐานในการทำงานของระบบคอมพิวเตอร์ ซึ่งใน
การพฒั นาระบบ
คอมพิวเตอร์ท่มี ีประสทิ ธภิ าพและสามารถตอบสนองการทำงานไดอ้ ยา่ งรวดเร็วนัน้ จะเก่ยี วข้องกบั ขอ้ มลู
ต่างๆ ทน่ี ำมาประมวลผลเปน็ สว่ นใหญ่ ดังนัน้ หากมีระบบการจดั การข้อมลู ทด่ี ีจะชว่ ยให้การทำงานของ
ระบบคอมพิวเตอร์มีความรวดเร็ว ถูกต้องและแม่นยำมากขึ้น ในการเขียนโปรแกรมคอมพิวเตอร์ด้วย
ภาษาระดับสูง (High Level Language) ไม่ว่าจะเป็นภาษาใดจะมีสามารถแบ่งชนิดของข้อมูลที่ใช้ได้
ออกเปน็ 2 ประเภทไดแ้ ก่
1. ชนดิ ขอ้ มลู มาตรฐาน (Standard Data Type) หรือเรียกอกี อย่างหนึง่ ว่า ขอ้ มูลพ้ืนฐาน
(Elementary Data Type) ชนดิ ขอ้ มลู มาตรฐานทน่ี ิยมใชบ้ อ่ ยและนำไปใชใ้ นการเขยี นโปรแกรม
ด้วยภาษาระดับสูงเช่น C, C#, Java, PHP, ASP, JSP ได้แก่ จำนวนเต็ม (Integer), จำนวนจริง (Real)
อักขระ (Character), ตรรกะ (Boolean) เปน็ ต้น
2. ชนิดขอ้ มูลเชิงโครงสรา้ ง (Structured Data Type) เป็นข้อมูลท่ีเกดิ จากข้อมูลพ้ืนฐาน
2
หรือขอ้ มลู เชงิ โครงสร้าง เชน่ อาเรย์ (Array), เซต (Set), ระเบยี น (Record) และแฟม้ ข้อมลู (File)
เปน็ ต้น
1.2 โครงสร้างข้อมูลและการแทนทขี่ อ้ มูล
โครงสร้างข้อมูล (Data Structure) หมายถึง การรวบรวบรวมข้อมูลไว้เป็นชุดของข้อมูล
ทม่ี ีการกำหนดนิยามของความสัมพนั ธภ์ ายในกลุ่มของขอ้ มลู ไว้และโครงสร้างขอ้ มูลต้องสามารถนำมาใช้
เขียนข้ันตอนวิธี (Algorithms) เพ่ือนำมาช่วยจัดการข้อมูลภายในโครงสร้างข้อมูลได้ โครงสร้างข้อมูล
แสดงถงึ ความสัมพนั ธ์ระหว่างขอ้ มลู ซง่ึ ความสมั พันธ์หลกั ใหญ่ๆ มี 4 รูปแบบ ได้แก่
1. โครงสร้างข้อมูลแบบเซต (Set) เป็นโครงสรา้ งทข่ี ้อมูลแตล่ ะตัวไม่มีความสมั พันธ์กนั เลย
2. โครงสร้างแบบเชิงเส้น (Linear) เป็นโครงสร้างท่ีข้อมูลมีความสัมพันธ์แบบหน่ึงต่อหนึ่ง
(One-To-One Relationship) นัน่ คือสามารถระบุถึงข้อมูลตัวถดั ไปของข้อมลู ได้เพยี งตัวเดยี ว
3. โครงสร้างแบบต้นไม้หรือแบบลำดับข้ัน (Tree Or Hierarchical) เป็นโครงสร้างที่ข้อมูลมี
ความสัมพันธ์กันแบบหน่ึงต่อหลาย (One-To-Many Relationship) นั่นคือ ข้อมูลตัวหนึ่งสามารถมี
ความสัมพนั ธก์ บั ขอ้ มลู ในลำดับรองลงไปไดห้ ลายตัว
4. โครงสรา้ งแบบกราฟหรือเครือขา่ ย (Graph or Network) เป็นโครงสรา้ งท่ขี อ้ มูลมีความ
สัมพันธ์กันแบบหลายต่อหลาย (Many-To-Many Relationship) นั่นคือ ข้อมูลตัวหนึ่ง อาจจะมี
ความสมั พนั ธ์กับข้อมูลตัวอื่นๆ กตี่ วั กไ็ ด้
ตวั อยา่ งแผนภาพโครงสรา้ งข้อมลู ท้งั สีแ่ บบไดแ้ สดงในภาพประกอบที่ 1.1
โครงสร้างขอ้ มูลแบบเซต
โครงสรา้ งแบบเชงิ เสน้
โครงสร้างแบบตน้ ไม้หรือแบบลำดบั ขน้ั
โครงสร้างแบบกราฟหรือเครอื ข่าย
ภาพประกอบท่ี 1.1 แผนภาพโครงสรา้ งขอ้ มูล 4 แบบ
3
หมายเหตุ
1. ความสัมพันธ์ในกลุ่มของโครงสร้างข้อมูลแบบเชิงเส้น จะเก่ียวข้องกับฟังก์ชันท่ี
สามารถบอกลำดับกอ่ นหน้า (Pred), ฟังก์ชนั บอกลำดับถัดไป (Succ) และฟังก์ชันบอกอันดบั ของข้อมูล
ทต่ี ้องการ (Ord) ซง่ึ สามารถใช้ได้กบั ข้อมลู ท่มี ีโครงสรา้ งแบบเชิงเส้น
2. โครงสร้างแบบเชิงเส้นแตกต่างจากโครงสร้างแบบอันดับ (Ordered) เม่ือกล่าวถึง
โครงสร้างแบบอันดับจะเกี่ยวข้องกับกลุ่มของเครื่องหมายเปรียบเทยี บ (Relational Operator) เชน่ <,
<=, <>, > ,>= เปน็ ตน้
ตัวอย่างที่ 1.1 เปรียบทำการเทียบโครงสร้างข้อมูลชนิดจำนวนเต็มและจำนวนจริง
ข้อมูลชนิดจำนวนเต็ม มีโครงสร้างทั้งแบบอันดับและแบบเชิงเส้น นั่นคือ สามารถจะ
เปรียบเทียบข้อมูลจำนวนเต็มสองจำนวนได้และสามารถจะบอกอันดับถัดไปหรืออันดับก่อน
หน้า หรืออันดับของข้อมูลที่กำหนดให้ได้ ส่วนข้อมูลชนิดจำนวนจริงมีโครงสร้างแบบอันดับ
อยา่ งเดยี วไม่เป็นแบบเชิงเส้น สามารถจะเปรยี บเทยี บข้อมูลจำนวนจริงสองตวั ได้ แต่ถา้ กำหนด
ข้อมูลจำนวนจริงให้ตัวหนึ่ง จะไม่สามารถบอกได้ว่าข้อมูลจำนวนจริงตัวถัดไปคืออะไร
เน่ืองจากระหว่างจำนวนจริงสองจำนวน จะมีจำนวนจริงซึ่งเป็นจำนวนนับไม่ถ้วนอยู่ระหว่าง
จำนวนจริงสองจำนวนนัน้ เสมอ
ตัวอย่างท่ี 1.2 การแทนโครงสร้างข้อมูลแบบเชิงเส้นในหน่วยความจำ สมมุติมีข้อมูลซ่ึงเป็น
ข้อมลู รายชอื่ ของคนจำนวน 5 คน คอื กมลพรรณ, พรี ภทั ร์, ศิรินภา, ดิเรก, และ อมุ าวดี
โดยรายชื่อเหล่านี้มีความสัมพันธ์กันแบบมีอันดับและแบบเชิงเส้น ดังน้ันจะมีวิธีในการแทนท่ี
ข้อมูลและโครงสร้างของขอ้ มูลนี้ 3 วธิ ี คอื
วิธที ี่ 1 การเข้าถึงข้อมูลแบบลำดบั (Sequential Access) เป็นการจัดเกบ็ ข้อมูลไวใ้ นหน่วย
ความจำทใ่ี ดทห่ี นงึ่ ในลักษณะต่อเนื่องกนั ไปดังแสดงในตารางท่ี 1.1
ตารางท่ี 1.1 การเก็บขอ้ มูลในหนว่ ยความจำในลักษณะต่อเนอ่ื งกัน
หมายเลขประจำตำแหนง่ (Address) ชือ่ (Name)
1000 กมลพรรณ
1008 พรี ภัทร์
1016 ศิรินภา
1024 ดเิ รก
1032 อมุ าวดี
4
จากตารางท่ี 1.1 สมมุติว่าใช้เนื้อที่ 8 ไบต์ในการเก็บช่ือหน่ึงๆ การจัดเก็บแบบน้ียังคงเป็น
โครงสร้างแบบเชิงเส้นอยู่ นั่นคือ ถ้าเราทราบตำแหน่งท่ีอยู่ (Address) ของข้อมูลตัวใด ก็จะสามารถ
คำนวณตำแหน่งท่อี ยู่ของข้อมลู ตัวกอ่ นหนา้ น้ีหรือข้อมลู หลงั จากน้ีได้ทันที
วิธีที่ 2 การเข้าถึงข้อมูลแบบสุ่ม (Random Access) เป็นการเก็บข้อมูลไว้ ณ ตำแหน่งที่อยู่ที่
เป็นฟังก์ชันของอักษรตัวแรกของช่ือ (fl) เช่น 1000+ 8 * [ord(fl) – ord(‘A’)] ซึ่งเป็นวิธีการของ
Hashing Function สมมุติชือ่ ทง้ั 5 ชอ่ื ดังกลา่ ว ถกู จดั เก็บไวใ้ นหน่วยความจำ ดังแสดงในตารางท่ี 1.2
ตารางที่ 1.2 การเกบ็ ข้อมลู ในหน่วยความจำตำแหนง่ ทเ่ี ป็นฟงั ก์ชันของอักษรตัวแรกของช่ือตวั แปร
หมายเลขประจำตำแหน่ง (Address) ชือ่ (Name)
1000 ดเิ รก
1008 -
1016 ศริ นิ ภา
1024 อมุ าวดี
1032 กมลพรรณ
1040 พีรภัทร์
จากตารางท่ี 1.2 วิธีการแทนท่ีข้อมูลในลักษณะแบบนี้ไม่สามารถเก็บโครงสร้างของข้อมูลได้
นั่นคือ ถ้าต้องการทราบว่าใครต่อจากดิเรก จะไม่สามารถบอกได้ การแทนท่ีข้อมูลแบบน้ีจะมีประโยชน์
ตรงที่วา่ ถ้าต้องการค้นหาขอ้ มูลท่ีชื่อ อมุ าวดี ก็สามารถจะทำการคำนวณได้โดยตรง (โดยการใช้อินเวอร์ส
ฟังก์ชันของการจดั เก็บ) ซ่ึงเปน็ การเขา้ ถงึ ขอ้ มูลแบบสุ่ม (Random Access) แตถ่ ้าใช้วิธีการจัดเกบ็ ตามวธิ ี
ที่ 1 ต้องทำการค้นหาจากช่ือแรกไปเรื่อยๆ จนพบชื่อท่ีต้องการ ซ่ึงเป็นการเข้าถึงข้อมูลแบบลำดับ
(Sequential Access) น้นั เอง
วธิ ที ี่ 3 การเกบ็ ข้อมูลไว้ ณ แอดเดรสทเ่ี ปน็ ฟังก์ชันของอักษรตวั แรกของชื่อ (fl) แต่เพิม่ ฟิลด์
สำหรับเกบ็ ตำแหน่งของข้อมูลอันดบั ถัดไปดว้ ย (ซง่ึ เปน็ การรวมข้อดขี องท้งั 2 วธิ เี ข้าดว้ ยกนั ) ดงั แสดงใน
ตารางที่ 1.3
5
ตารางที่ 1.3 เก็บข้อมูลในหน่วยความจำตำแหนง่ ทเี่ ปน็ ฟงั ก์ชนั ของอักษรตัวแรกของชื่อตัวแปร
และเกบ็ ตำแหน่งของขอ้ มูลตัวถดั ไป
หมายเลขประจำตำแหน่ง (Address) ช่ือ (Name) ตำแหนง่ ข้อมูลถัดไป
1000 ดิเรก 1032
1008 -
1016 กมลพรรณ 1008
1024 อมุ าวดี 1016
1032 พีรภทั ร์ 1040
1040 ศริ ินภา 1024
จากตารางที่ 1.3 จะเห็นได้วา่ วธิ ีการเกบ็ ข้อมูลในส่วนความจำแบบน้ี จะทำการเก็บที่อยู่
ของข้อมูลถัดไปด้วยทำให้สามารถเข้าถึงข้อมูลในโครงสร้างได้ ถ้าข้อมูลเริ่มที่ดิเรก ก็สามารถ
ทราบไดว้ ่า
ข้อมูลถัดไปคือ ข้อมูลช่ือใด โดยเก็บข้อมูลเรียงลำดับตามรายชื่อดังน้ี ดิเรก, พีรภัทร์, ศิรินภา, อุมาวดี
และ กมลพรรณ เปน็ ต้น
โดยสรุป จะเห็นว่าในการแทนที่ข้อมูลในหน่วยความจำเพื่อให้คงโครงสร้างแบบเชิงเส้นมี 2 วิธี
คือวิธีท่ี 1 ซึ่งเป็นวิธีการแบบแถวลำดับหรืออาเรย์ (Array) โดยอันดับของข้อมูลแสดงด้วยตำแหน่งของ
ข้อมูลในอาเรย์ และวิธีที่ 3 ซึ่งเป็นวิธีการแบบลิงค์ลิสต์ (Linked List) ซ่ึงอันดับของข้อมูลหาได้โดยการ
ทราบตำแหน่งลิงค์ของข้อมูล โดยชนิดข้อมูลแบบอาเรย์และแบบลิงค์ลิสต์เป็นชนิดข้อมูลพื้นฐานท่ีใช้
สำหรบั สร้างชนิดขอ้ มลู อ่ืนๆ ต่อไป
1.3 การดำเนินการของข้อมูล
ข้อมูลมาตรฐานและการดำเนนิ การของขอ้ มูล
ขอ้ มลู มาตรฐานนนั้ แบง่ ออกเป็น 3 ประเภท คือ
1. ข้อมูลแบบมอี นั ดับ (Ordinal Data Type) ได้แก่ Char, Integer,
Boolean, Enumerated และ Subrange
2. ข้อมลู จำนวนจริง (Real)
3. ขอ้ มูลแบบพอยเตอร์ (Pointer)
ค่าของข้อมลู (Values) ของชนิดขอ้ มูลแบบมอี ันดบั แตล่ ะแบบมีดังนี้
Char ค่าของข้อมูลข้ึนอยู่กบั รหัสทเ่ี ลอื กใช้ เช่น ASCII, EBCDIC, CDC
Integer - maxint ถงึ +maxint
6
Boolean False และ True
Enumerated ข้ึนอยู่กับผูใ้ ชก้ ำหนด
Subrange ขนึ้ อย่กู ับผูใ้ ชก้ ำหนดเปน็ Subrange ของชนิดขอ้ มูลแบบมีอันดบั
ดงั น้ันขอ้ มูลมาตรฐานและการดำเนินการของข้อมูลแต่ละชนิดแสดงดังตารางท่ี 1.4 ถึงตารางท่ี
1.6
ตารางที่ 1.4 ชนดิ ขอ้ มลู แบบมีอันดับ รูปแบบ และการดำเนนิ การ
ชนิดข้อมูล รปู แบบ การดำเนนิ การ (Operations)
Char Relational =, <>, <, >, <=, >=, in
Ordinal functions ord, succ, pred
Textfile I/O read, readln, write, writeln
ตารางท่ี 1.4 ชนดิ ข้อมูลแบบมอี ันดับ รปู แบบ และการดำเนนิ การ(ต่อ)
ชนิดข้อมูล รปู แบบ การดำเนินการ (Operations)
Integer Arithmetic +, -, *, /, div, mod
Relational =, <>, <, >, <=, >=, in
Ordinal functions ord, succ, pred
Arithmetic functions abs, sqr, sqrt, sin, cos, arctan, exp, ln
Textfile I/O read, readln, write, writeln
Boolean Boolean and, or, not
Relational =, <>, <, >, <=, >=, in
Ordinal functions ord, succ, pred
Textfile I/O write, writeln
Enumerated Relational =, <>, <, >, <=, >=, in
Ordinal functions ord, succ, pred
Subrange Relational =, <>, <, >, <=, >=, in
Ordinal functions ord, succ, pred
7
ข้อมูลชนิดข้อมูลจำนวนจริง (Real) ค่าของข้อมูลเป็นค่าจำนวนจริงใดๆ การ
ดำเนินการแสดงได้ตามตารางท่ี 1.5
ตารางท่ี 1.5 ชนดิ ขอ้ มูลจำนวนจรงิ รูปแบบ และการดำเนินการ
ชนดิ ข้อมูล รูปแบบ การดำเนินการ(Operations)
Real
Arithmetic +, -, *, /, div, mod
Relational =, <>, <, >, <=, >=, in
Transfer functions trunc, round
Arithmetic functions abs, sqr, sqrt, sin, cos, arctan, exp, ln
Textfile I/O read, readln, write, writeln
ข้อมลู ชนิดของข้อมูลแบบพอยเตอร์ (Pointer) คา่ ของข้อมูลเป็น Nil หรือ Null คือไม่
มีค่า หรือมีค่าเป็นตำแหน่งที่อยู่ของตัวแปร โครงสร้างของข้อมูล ไม่มีความสัมพันธ์กัน การ
ดำเนนิ การแสดงไดต้ ามตารางท่ี 1.6
ตารางท่ี 1.6 ชนิดข้อมลู แบบพอยน์เตอร์ รปู แบบ และการดำเนินการ
ชนดิ ข้อมลู รูปแบบ การดำเนนิ การ(Operations)
Pointer Relational =, <>
Dynamic allocation new, dispose
ข้อมูลเชิงโครงสรา้ งและการดำเนินการของข้อมลู
ข้อมลู ชนดิ ข้อมลู แบบอาเรย์ (Array) ค่าของขอ้ มลู ทุกตัวที่อยู่ในอาร์เรย์จะต้องเปน็
ขอ้ มลู ชนดิ เดยี วกนั เท่านัน้ เช่น ถ้าเป็นอาร์เรย์ชนดิ จำนวนเต็ม ขอ้ มลู ทุกตัวในอาร์เรยก์ ็ต้องเปน็
ชนดิ จำนวนเตม็
ไม่สามารถเก็บข้อมูลตา่ งชนิดกนั ได้ โครงสร้างของข้อมูลเป็นแบบเชิงเส้นและมีดชั นี (Index) เป็นตัว
กำหนดความสัมพันธ์กับขอ้ มูล ดชั นีตอ้ งมชี นดิ เป็นชนิดขอ้ มูลแบบมีอันดับ การดำเนนิ งาน มี 2 กล่มุ
ได้แก่ การเรยี งลำดับขอ้ มูลและการคน้ หาข้อมูล
ข้อมูลชนิดข้อมูลแบบสตริงค์ (String) ค่าของข้อมูลชนิดตัวอักษรหลายตัวหรือกลุ่ม
ของตัวอกั ษร โดยประกอบดว้ ย ตัวอกั ษร ตัวเลข ตัวอักษรพเิ ศษ ซึ่งเปน็ ชนิดขอ้ มูลที่ใช้บ่อยมาก
ในการเขยี นโปรแกรมมีรูปแบบและการดำเนนิ การแสดงดงั ตารางที่ 1.7
8
ตารางท่ี 1.7 ชนิดข้อมลู แบบสตริงค์ รูปแบบ และการดำเนินการ
ชนิดขอ้ มลู รปู แบบ การดำเนนิ การ(Operations)
String Relational =, <>, <, >, <=, >=, in
Textfile I/O read, readln, write, writeln
ขอ้ มลู ชนิดข้อมูลแบบเรคคอร์ด (Record) คา่ ของข้อมูลน้ันเป็นหนว่ ยของข้อมลู ที่เกิดจากการ
นำเอาฟลิ ดห์ ลายๆ ฟลิ ด์ มารวมกนั เพื่อแสดงรายละเอียดข้อมูลในเร่ืองใดเรื่องหน่งึ เชน่ เรคคอร์ดหน่ึงๆ
ของพนักงานประกอบดว้ ย ฟิลด์ ตา่ งๆ เชน่ รหัสพนักงาน ชือ่ แผนก เงินเดือน เปน็ ต้นการดำเนินการ
มี 2 กลุ่มได้แก่ การเรียงลำดับข้อมูลและการค้นหาข้อมลู
ขอ้ มลู ชนิดข้อมูลแบบเซต (Set) คา่ ของขอ้ มลู น้นั เปน็ หน่วยของข้อมูลท่ไี ม่อนุญาตให้ซ้ำกันแต่
ไมเ่ รียงลำดบั สมาชกิ เซตจงึ ถูกนำมาใช้ในการตรวจสอบความซ้ำกนั ของข้อมลู จะเปน็ คา่ ที่ผใู้ ช้กำหนดซงึ่
ตอ้ งเป็นชนิดแบบมีอันดับ โครงสรา้ งของขอ้ มูลแตล่ ะตวั ไม่มีความสมั พันธ์กนั มกี ารดำเนินการแสดงดงั
ตารางที่ 1.8
ตารางท่ี 1.8 ชนิดขอ้ มลู แบบเซต รูปแบบ และการดำเนินการ
ชนิดขอ้ มูล รูปแบบ การดำเนนิ การ(Operations)
Set Operators * (Intersection), + (Union), -(Complement)
Relational =, <>, <, >, <=, >=, in
ข้อมูลชนิดข้อมูลแบบไฟล์ (File) ค่าของข้อมูลจะเป็นค่าท่ีผู้ใช้กำหนดและจะมีชนิดเป็นอะไร ก็
ได้ แต่ต้องมีชนิดเดียวกัน ซึ่งจะเหมือนกับอาเรย์ ไฟล์ต่างกับอาเรย์ตรงท่ีไฟล์จะมีขนาดเท่าใดก็ได้ แต่
อาเรย์ต้องมีการกำหนดขนาดที่แน่นอน การเข้าถึงข้อมูลแบบไฟล์จะเป็นแบบเข้าถึงตามลำดับ
(Sequential Access) หรือเป็นการเข้าถึงข้อมูลแบบสุ่ม (Random Access) ก็ได้ โครงสร้างของข้อมูล
เปน็ แบบเชงิ เสน้ มีการดำเนินการดงั นี้
File handling rewrite, reset, put, get, write, read, eof
ค่าของข้อมูลชนิดข้อมลู แบบเทก็ ซ์ (Text) คา่ ของข้อมลู เป็น char โครงสร้างของขอ้ มูลเปน็ แบบ
เชงิ เส้น มกี ารดำเนินการดงั น้ี
File handling rewrite, reset, put, get, write, read, eof,
writeln, readln, page, eoln
9
1.4 ประโยชนข์ องโครงสร้างขอ้ มูลและการนำไปใช้
โครงสร้างข้อมูลใช้ในการจดั เก็บข้อมูลเพื่อให้ขอ้ มูลเป็นระบบและใช้สำหรับการจัดเรีย
งข้อมูล
จำนวนมากอย่างถกู วธิ ี โครงสร้างข้อมูลสามารถนำมาใช้ร่วมกบั ขน้ั ตอนวธิ ีเพ่ือใช้สำหรบั ปฏิบัตกิ ารกับ
ข้อมลู ท่ีเก็บในลกั ษณะตา่ งๆ เช่น การเพม่ิ ขอ้ มูล (Insert), การลบข้อมลู (Delete), การคน้ หาขอ้ มลู
(Searching) เป็นตน้ ซ่ึงสามารถชว่ ยใหก้ ระบวนการทำงานภายในระบบคอมพิวเตอร์นน้ั ทำงานได้อยา่ ง
อย่างรวดเรว็ มปี ระสิทธิภาพมากขึ้น
นอกจากนย้ี งั พบว่าโครงสร้างขอ้ มูลในแตล่ ะชนิดนน้ั มีความสามารถในการจดั การข้อมูลที่มี
ความแตกตา่ งกนั ดังน้ันการนำเอาโครงสรา้ งขอ้ มูลมาใช้งานได้อยา่ งมีประสิทธิภาพ ควรคำนึงถงึ ความ
เหมาะสมกบั ลกั ษณะงานด้วย
1.5 สรปุ
โครงสร้างข้อมูล (Data Structure) หมายถึง การรวบรวบรวมข้อมูลไว้เป็นชุดของข้อมูล
ที่มีการกำหนดนิยามของความสัมพันธ์ภายในกลุ่มของข้อมูลไว้และ โครงสร้างข้อมูลต้องสามารถ
นำมาใช้เขียนข้ันตอนวิธี (Algorithms) เพื่อนำมาช่วยจัดการข้อมูลภายในโครงสร้างข้อมูลได้โครงสร้าง
ข้อมูล แสดงถึงความสัมพันธ์ระหว่างข้อมูล ความสัมพันธ์หลักใหญ่ๆ มี 4 แบบ ได้แก่โครงสร้างข้อมูล
แบบเซต (Set) โครงสร้างแบบเชิงเส้น (Linear) โครงสร้างแบบต้นไม้หรือแบบลำดับขั้น (Tree or
Hierarchical) และโครงสรา้ งแบบกราฟหรอื เครอื ข่าย (Graph or Network)
โครงสรา้ งข้อมลู แบบต่างๆ ซ่งึ เปน็ ส่วนท่สี ำคัญในการทำงานของระบบคอมพิวเตอร์ การนำเอา
ข้อมูลประเภทต่างๆ เข้ามาจัดการโดยอาศัยคอมพิวเตอร์เป็นสิ่งที่ต้องคำนึงถึง สำหรับกระบวนการ
ออกแบบโปรแกรมคอมพิวเตอร์ การเลือกโครงสร้างข้อมูลที่เหมาะสมถือเป็นสิ่งสำคัญ ในการเขียน
โปรแกรมภาษาระดบั สูงไมว่ า่ จะเปน็ ภาษาใดจะมีชนิดของข้อมูลทีใ่ ชไ้ ด้ 2 ประเภทคอื
1. ชนดิ ขอ้ มูลมาตรฐาน (Standard DataType) หรอื เรียกว่าข้อมลู พ้นื ฐาน
(Elementary Data Type) เป็นหน่วยที่เล็กที่สุดท่ีอธิบายลักษณะข้อมูลได้แก่ จำนวนเต็ม (Integer)
จำนวนจริง (Real) อักขระ (Character) ตรรกะ (Boolean) พอยเตอร์ (Pointer) Enumerated และ
Subrange เป็นตน้
2. ชนดิ ข้อมูลเชิงโครงสรา้ ง (Structured Data Type) เป็นขอ้ มลู ทเ่ี กดิ จากข้อมูลพืน้ ฐาน
หรือข้อมูลเชงิ โครงสร้าง ได้แก่ อาเรย์ (Array, ข้อมลู แบบสตรงิ ค์ (String), เซต (Set), ระเบียน(Record)
และข้อมลู แบบไฟล์ (File) เปน็ ตน้
การท่ีมคี วามรู้ทางดา้ นโครงสร้างขอ้ มลู ท่ีดีและผนวกกับเขา้ ใจข้ันตอนวธิ ีในการแก้ปัญหาจะเป็น
ประโยชน์อย่างมากในเร่ืองของการเขียนโปรแกรมคอมพิวเตอร์ที่มีประสิทธิภาพ และเข้าใจการนำเอา
โครงสรา้ งขอ้ มลู ท่มี ีอยู่แลว้ มาประยกุ ตใ์ ชง้ านรว่ มกนั กบั โปรแกรมคอมพิวเตอร์ที่พฒั นาขน้ึ มาได้
10
คำถามทา้ ยบทที่ 1
1. โครงสรา้ งขอ้ มูล (Data Structure) คืออะไร
2. ชนิดขอ้ มูลมาตรฐานแบ่งออกเป็นกี่ประเภท อะไรบ้าง
3. อธิบายความแตกต่างระหวา่ งชนดิ ขอ้ มูลมาตรฐานและชนิดขอ้ มลู เชิงโครงสรา้ ง
4. ในการเขยี นโปรแกรมภาษาระดบั สงู ไม่ว่าจะเป็นภาษาใดจะมชี นิดของข้อมูลทใ่ี ช้กี่ประเภทได้แก่
อะไรบ้าง
5. จงยกตวั อยา่ งชนิดขอ้ มลู เชิงโครงสรา้ ง (Structured Data Type) มา 2 ชนดิ โดยอธบิ ายลกั ษณะของ
ข้อมลู มาพอสังเขป
6. ชนิดขอ้ มูลแบบอาเรย์ (Array) มคี ุณสมบตั ิอยา่ งไร
7. ยกตวั อย่างค่าของข้อมูลชนดิ ข้อมลู แบบสตรงิ ค์ (String)
8. อธิบายลักษณะสำคญั ของโครงสรา้ งข้อมูลแบบเชิงเสน้ พร้อมยกตวั อย่าง
9. อธิบายลักษณะสำคญั ของโครงสรา้ งข้อมูลแบบไมเ่ ชิงเส้น พรอ้ มยกตวั อย่าง
10. ยกตัวอยา่ งท่แี สดงใหเ้ หน็ ถึงความสำคัญของการศกึ ษาโครงสร้างข้อมลู การนำโครงสรา้ ง
ข้อมูลไปใช้งาน พร้อมอธิบายรายละเอยี ด
บทที่ 2
ความรเู้ บ้อื งต้นเก่ยี วกบั ขน้ั ตอนวิธี
การเขียนโปรแกรมคอมพิวเตอร์เพ่ือช่วยแก้ปัญหาต่างๆ สิ่งหน่ึงที่ผู้เขียนโปรแกรมต้องทำคือ
การเขียนข้ันตอนวิธี หรือ อัลกอริทึม (Algorithms) ท่ีใช้ในการเขียนโปรแกรม ผู้เขียนโปรแกรมอาจจะ
เขยี นข้นั ตอนวิธีทงี่ ่ายๆ ไมซ่ บั ซ้อนที่คอมพวิ เตอร์สามารถประมวลผลได้อย่างรวดเรว็ น่นั คือขนั้ ตอนวิธี
เป็นการจัดลำดบั ดับความคดิ เปน็ ขั้นตอนตา่ งๆ เพื่อแก้ไขปญั หาในข้ันตอนของการเขียนโปรแกรมโดย
ขนั้ ตอนวิธีสามารถนำไปแปลงเป็นลำดบั คำส่ังในโปรแกรมคอมพิวเตอรด์ ้วยภาษาทีเ่ หมาะสมเพือ่ ส่ังให้
คอมพิวเตอร์ทำงานตามข้นั ตอนวธิ ีท่ีกำหนดไวไ้ ด้
2.1 ความหมายของข้นั ตอนวธิ ี
ข้ันตอนวิธี หรือ อัลกอริทึม (Algorithms) หมายถึง กระบวนการแก้ปัญหาท่ีสามารถเข้าใจได้
มีลำดับหรือวิธีการแก้ปัญหาใดปัญหาหนึ่งอย่างเป็นขั้นตอนและชัดเจน ซ่ึงประกอบด้วยกระบวนการ
นำเข้าขอ้ มลู การประมวลผลขอ้ มูล และการแสดงผลขอ้ มูล
การพัฒนาลำดับขั้นตอนวิธีนับว่าเป็นข้ันตอนที่สำคัญ เพราะเป็นข้ันตอนทนี่ ำวิธกี ารแก้ปญั หาท่ี
ได้ทำการทดลองมาทำการเรียบเรียงลำดับข้ันตอนการทำงานของวิธีการแก้ปัญหา ตั้งแต่ข้ันตอนแรก
จนถึงขั้นตอนสุดท้าย ว่ามีลำดับข้ันตอนการทำงานอย่างไรบ้าง เพ่ือท่ีจะนำข้ันตอนที่ได้ไปส่ังการให้
เครื่องคอมพิวเตอร์ทำการแก้ไขปัญหาด้วยวิธีการน้ัน ดังนั้นข้ันตอนวิธีการแก้ปัญหาเป็นการจัดลำดับ
ความคิดเป็นขั้นตอนต่างๆ เพ่ือแก้ไขปัญหาในขั้นตอนการเขียนโปรแกรมท่ีสอดคล้องกับกรรมวิธี
แก้ปัญหาท่ีกำหนดไว้ การเขียนขั้นตอนวิธีจึงเป็นการแสดงลำดับการทำงานตามคุณสมบัติด้านการ
ประมวลผลของคอมพิวเตอร์ ท่ีพร้อมจะนำไปแปลงเป็นลำดับคำสั่งให้คอมพิวเตอร์ทำงาน การเขียน
โปรแกรมคอมพิวเตอร์ด้วยภาษาที่เหมาะสม เพื่อสัง่ ให้คอมพิวเตอร์ทำงานตามขั้นตอนวิธีท่ีกำหนดไว้ใช้
สำหรับตรวจสอบความถกู ตอ้ งและความสมบรู ณ์ของโปรแกรมได้ การนำข้นั ตอนวิธไี ปใช้ไม่จำกดั เฉพาะ
การเขียนโปรแกรมด้วยคอมพิวเตอร์ แต่สามารถใช้กับการแก้ปัญหาอ่ืนๆ ได้ เช่น การออกแบบ
วงจรไฟฟ้า การออกแบบเคร่ืองจักรกล หรือแม้แต่ปัญหาที่เกิดขึ้นในธรรมชาติ เช่น วิธีของสมองมนุษย์
ในการคิดเลข ขั้นตอนของการซอ้ื สนิ คา้ ผา่ นระบบอินเตอรเ์ นต็ วิธีการขนอาหารของแมลงเป็นต้น
2.2 ลักษณะการเขียนข้ันตอนวิธี
การเขียนข้ันตอนวิธีมักปรากฏในระบบงานโปรแกรมคอมพิวเตอร์โดยท่ัวไปเช่น การเขียน
โปรแกรมให้ทำงานลักษณะการนับค่าสะสมในหน่วยความจำ การทำงานในรูปแบบการวนรอบการ
12
ทำงานซ้ำ การทำงานลักษณะการหาค่ามากท่ีสุดและค่าน้อยท่ีสุดเป็นต้น สามารถเขียนขั้นตอนวิธีได้ 2
วิธีคอื
1. การอธิบายข้นั ตอนวิธีอยา่ งหยาบ คือ การเขยี นขั้นตอนการทำงานท้งั หมดโดยไม่ต้อง
ละเอียดมากนัก และเขียนข้ันตอนการทำงานเป็นขอ้ ๆ เร่ิมตัง้ แตข่ น้ั ตอนแรกจนถึงข้ันตอนสดุ ท้ายท่ีจะสั่ง
ให้เครื่องคอมพิวเตอร์ทำการแก้ปัญหา โดยกำหนดว่าจะต้องทำลำดับข้ันตอนใดบ้างจึงจะได้ผลลัพธ์
ออกมา เช่น ขั้นตอนวิธีของการสง่ อีเมล์การบ้านของนักศกึ ษาให้อาจารย์ทางอีเมล์โดยการแนบไฟล์ ดัง
ตัวอย่างท่ี 2.1 และข้ันตอนวิธีการคำนวณหาอัตราผ่อนชำระรายเดือนของสินค้ารายการหน่ึง สามารถ
เรยี บเรียงเป็นการทำงานอย่างหยาบได้ดงั ตวั อยา่ งท่ี 2.2
ตัวอยา่ งท่ี 2.1 แสดงขนั้ ตอนวิธี นกั ศึกษาส่งอเี มลก์ ารบ้านให้อาจารยโ์ ดยการแนบไฟลเ์ อกสาร
ขั้นท่ื 1 เรมิ่ ตน้
ขั้นท่ี 2 นักศึกษาเปิดโปรแกรมบราวเซอร์ เข้าไปยังอเี มล์ของนักศกึ ษา
ขั้นท่ี 3 เลือกคำส่ัง สรา้ งจดหมาย
ขั้นท่ี 4 กรอกอเี มล์ของอาจารยท์ ช่ี อ่ งผ้รู ับ
ขนั้ ท่ี 5 เขยี นหวั ข้อทีต่ ้องการส่งที่ชอ่ งหวั ขอ้ จดหมาย
ขัน้ ท่ี 5 แนบไฟล์เอกสาร ทีต่ ้องการสง่
ขน้ั ท่ี 6 กรอกรายละเอียดอนื่ ๆ ทตี่ อ้ งการท่ีเน้ือหาจดหมาย
ขน้ั ท่ี 7 ตรวจความถูกตอ้ งของขอ้ มลู ทีต่ ้องการส่ง
ขน้ั ที่ 8 เลอื กคำสัง่ สง่ จดหมาย
ขน้ั ที่ 9 จบการทำงาน
ตัวอยา่ งที่ 2.2 แสดงขน้ั ตอนวธิ ีอยา่ งหยาบของการคำนวณหาอัตราผ่อนชำระรายเดือนของ
สินคา้ รายการหน่งึ
ขั้นท่ี 1 เรมิ่ ตน้
ข้นั ที่ 2 รบั คา่ ของราคาสินค้า
ขั้นที่ 3 รับคา่ ของอตั ราดอกเบยี้ รายปี
ขน้ั ท่ี 4 รับค่าของจำนวนเดือนท่ีตอ้ งการผอ่ นชำระ
ข้ันท่ี 5 คำนวณหาค่าของจำนวนเงนิ ทีต่ ้องชำระรายเดือน
ขั้นท่ี 6 แสดงค่าของจำนวนเงินท่ผี อ่ นชำระรายเดือน
ขัน้ ท่ี 7 จบการทำงาน
13
จะเห็นได้ว่าในการเขียนอธิบายลำดับข้ันตอนการทำงานในลักษณะของข้อความนั้น จะเริ่มต้น
ข้อแรกด้วยคำวา่ “เริ่มต้น” หรือ “เริ่มต้นการทำงาน” ถัดจากน้ันเป็นลำดับขั้นตอนการทำงานท่ีใช้ในการ
แก้ปญั หา และจบดว้ ยขน้ั ตอนสดุ ทา้ ย โดยจะใชข้ อ้ ความว่า “จบการทำงาน” หรือ “ส้ินสุดการทำงาน”
2. การอธบิ ายขนั้ ตอนวิธีอยา่ งละเอยี ด คอื การนำข้ันตอนการทำงานอย่างหยาบมาพิจารณา
เพิ่มเติมข้อมูลบางอย่างที่ยังไม่เรียบร้อย แต่ละข้ันตอนที่อธิบายในส่วนของการอธิบายข้ันตอนการ
ทำงานอยา่ งหยาบน้ัน มคี วามละเอียดพอทจ่ี ะนำไปสั่งงานใหเ้ ครอ่ื งคอมพวิ เตอรท์ ำงานแล้วหรือยัง ถ้ายัง
ไม่ละเอียดต้องเขียนขยายความให้ละเอียดย่ิงข้ึนและสมบูรณ์มากท่ีสุด หรือแยกการทำงานออกเป็นข้อ
ย่อยเพมิ่ เตมิ เชน่ ในการคำนวณหาค่าข้อมลู ใดบางอย่าง จะคำนวณด้วยวิธกี ารใดเปน็ ต้น
จากตัวอย่างที่ 2.2 ในส่วนของการอธิบายขั้นตอนวิธีอย่างหยาบ เรื่องการหาอัตราการผ่อน
ชำระรายเดือนของสินค้ารายการหน่ึง เมื่อ พิจารณาการทำงานในแต่ละข้อ จะเห็นได้ว่ามีขั้นตอนการ
ทำงานอยู่ข้ันตอนหนึ่งท่ีไม่ละเอียด ก็คือ ขั้นท่ี 5 การคำนวณหาค่าของจำนวนเงินท่ีต้องการชำระราย
เดือน ยังไม่ได้บอกวา่ คำนวณดว้ ยวธิ ีการใด ดงั น้ันจึงตอ้ งทำการอธบิ ายเพิ่มเติมในส่วนของขั้นตอนในการ
คำนวณหาค่าของจำนวนเงินทตี่ ้องชำระรายเดือน สามารถเขียนอธิบายขั้นตอนวธิ ีอย่างละเอยี ดของการ
แก้ปญั หาได้ ดงั ตัวอย่างที่ 2.3
ตวั อยา่ งท่ี 2.3 แสดงขัน้ ตอนวิธีอย่างละเอียด ของการคำนวณหาอัตราผ่อนชำระรายเดือนของ
สนิ ค้ารายการหน่ึง
ข้นั ท่ี 1 เร่มิ ต้น
ขั้นท่ี 2 รับคา่ ของราคาสนิ ค้า
ขน้ั ท่ี 3 รับค่าของอัตราดอกเบี้ยรายปี
ขนั้ ที่ 4 รับคา่ ของจำนวนเดือนท่ตี อ้ งการผอ่ นชำระ
ขน้ั ที่ 5 คำนวณหาดอกเบ้ยี โดยคำนวณจากสูตร
ดอกเบ้ีย = ราคาสนิ ค้า x อัตราดอกเบ้ยี x (จำนวนเดือน / 12)
ขนั้ ที่ 6 คำนวณหาจำนวนเงินท่ีตอ้ งชำระรายเดือน โดยคำนวณจากสูตร
เงินผอ่ นรายเดือน = (ราคาสินค้า + ดอกเบ้ีย)/ จำนวนเดอื น
ข้ันท่ี 7 แสดงค่าของจำนวนเงินทผี่ ่อนชำระรายเดือน
ขั้นท่ี 8 จบการทำงาน
ตัวอย่างที่ 2.4 ข้ันตอนวิธีของการเขียนโปรแกรมเพื่อคำนวณหากำไรของสินค้าและแสดงผล
กำไรทคี่ ำนวณได้
ข้ันท่ี 1 เร่ิมต้นการทำงาน
ขั้นท่ี 2 รบั ข้อมูลเลขที่สนิ ค้า
14
ข้ันที่ 3 นำข้อมูลเลขท่สี ินคา้ ไปทำการค้นหาข้อมลู ค่าตัวแปรต่างๆ ท่ีตอ้ งใช้จากระบบฐานขอ้ มลู
เชน่ ตน้ ทุนคงท่ขี องสินค้า (Fix Cost) ,ตน้ ทนุ ผนั แปร (Variable Cost) ยอดขาย (Revenue),
กำไร (Profit) จำนวนสนิ ค้าท่ขี ายได้ (Unit) , ราคา (Price)
ขน้ั ท่ี 4 หาตน้ ทุนของสนิ ค้า จาก Cost = FixCost + VariableCost
ขน้ั ที่ 5 หายอดขายสินค้าจาก Revenue = Price * Unit
ขน้ั ที่ 6 คำนวณหากำไรจาก Profit = Revenue – Cost
ขั้นที่ 7 แสดงผลกำไรใหผ้ ใู้ ช้โปรแกรมทราบ
ขั้นที่ 8 สน้ิ สดุ การทำงาน
การเขียนลำดับข้ันตอนวิธีสามารถทำการเขียนจากผังงานได้ โดยแบ่งข้ันตอนวิธีท้ังหมด
ออกเป็นข้อๆ ตามลำดับและตามจำนวนของขั้นตอนการทำงานทั้งหมดในผังงาน การเขียนต้องไม่
ซบั ซ้อน เขยี นต้องให้เข้าใจได้ง่าย และต้องเขยี นให้ถูกต้องเสมอ เพราะถา้ เขียนไม่ถูกตอ้ งแล้วการพัฒนา
ไปเป็นคำส่ังเทียม (Pseudo Code) ก็จะผิดพลาดและส่งผลให้การเขียนโปรแกรมก็จะผิดพลาดตามไป
ด้วย การเขียนข้ันตอนวิธีจะมีความสอดคล้องกันกับการเขียนผังงานเม่ือเราเขียนข้ันตอนวิธีเสร็จ
เรียบร้อยแลว้ สามารถนำขัน้ ตอนวิธีมาเขียนเป็นผงั งานได้ หรือ นำผงั งานมาเขยี นเปน็ ขั้นตอนวธิ ีกไ็ ด้
ตัวอยา่ งที่ 2.5 ใหเ้ ขยี นข้นั ตอนวธิ จี ากผังงานต่อไปนี้
เรม่ิ ต้น
รบั ค่า Base, High
คำนวณ Area =0.5XBase X High
แสดงผล Area
จบการทำงาน
ภาพประกอบท่ี 2.1 ตวั อย่างผังงานแสดงการคำนวณหาพ้ืนทสี่ ามเหล่ยี ม
15
จากภาพประกอบท่ี 2.1 ผงั งานแสดงการคำนวณหาพื้นทส่ี ามเหลย่ี มผังงานสามารถเขียนเป็น
ขน้ั ตอนวิธีได้ดงั นี้
ข้นั ท่ี 1 เรมิ่ ตน้
ขน้ั ท่ี 2 รบั คา่ Base, High
ขั้นท่ี 3 คำนวณ Area = 0.5 x Base x High
ขน้ั ท่ี 4 แสดงผล Area
ขน้ั ที่ 5 จบการทำงาน
กรณีทีเ่ ป็นผังงานแบบเลือกทำจะมีสญั ลกั ษณท์ ่ีใชใ้ นการตดั สนิ ใจ โดยเมอ่ื เขียนอธบิ ายด้วย
ขัน้ ตอนวิธี ใช้คำอธบิ ายวา่ “ถ้า” และตามด้วยเงื่อนไขท่เี ป็นจรงิ จากน้นั ตามด้วยคำอธบิ ายวา่ “แลว้ ”
จากน้ันจะเปน็ ลำดบั ข้นั ตอนการทำงานทีต่ ้องทำเปน็ ข้อๆ ตามลำดับ ในกรณีทเี่ ง่ือนไขเป็นเท็จมกั จะใช้
คำว่า “ นอกจากนน้ั ” หรือ “มิฉะนั้นแลว้ ” แล้วตามดว้ ยลำดับการทำงานเปน็ ข้อๆ
ตัวอย่างที่ 2.6 ผังงานแบบเลือกทำ
เป็นจรงิ เปน็ เท็จ
เงอ่ื นไข
จริง กรณที ่ี 1 เท็จ กรณที ่ี 2
ภาพประกอบท่ี 2.2 ตัวอย่างผังงานแบบเลือกทำ
รูปแบบการเขยี นอธบิ ายข้นั ตอนวิธีเปน็ ดังนี้
ถา้ (เงื่อนไขเป็นจริง) แลว้
- ทำกรณีที่ 1
นอกจากน้ัน
- ทำกรณีท่ี 2
16
ตวั อย่างท่ี 2.7 จงเขยี นอธิบายขัน้ ตอนวิธจี ากผงั งานแบบเลือกทำต่อไปน้ี
เรมิ่ ต้น
ใช่ ไมใ่ ช่ รบั คา่ คะแนนสอบ ใช่
ไมใ่ ช่
คะแนน >50
“สอบไม่ผ่าน” “สอบผ่าน”
จบการทำงาน
ภาพประกอบท่ี 2.3 ตัวอย่างผงั งานแบบเลอื กทำเพื่อตรวจสอบคะแนนสอบว่าสอบผา่ นหรอื สอบไม่ผา่ น
จากผังงานในตัวอยา่ งที่ 2.7 ผังงานแบบเลือกทำเพ่ือรับคะแนนสอบ และตรวจสอบคะแนน
สอบวา่ สอบผา่ นหรอื สอบไมผ่ า่ นสามารถเขียนขั้นตอนวิธีได้ดังน้ี
ขน้ั ที่ 1 เริ่มตน้
ขนั้ ท่ี 2 รบั ค่าคะแนนสอบ
ขน้ั ที่ 3 ถา้ คะแนนสอบ > 50 แล้ว พิมพ์คำวา่ “ สอบผ่าน”
มิฉะน้นั แลว้ พมิ พ์คำวา่ “ สอบไม่ผ่าน”
ขน้ั ท่ี 4 จบการทำงาน
กรณีเขียนขั้นตอนวธิ จี ากผงั งานแบบวนซ้ำจะมีอยู่ 2 ลักษณะคือ การทำซำ้ แบบทำในขณะท่ี
(Do-While) และการทำซ้ำแบบจนกระทั่ง (Do-Until)
1. การทำซำ้ แบบทำในขณะที่ (Do-While) การเขยี นข้ันตอนวิธใี นลักษณะการทำซำ้ แบบทำ
ในขณะท่ี จะใชค้ ำวา่ “ในขณะที่” และตามดว้ ยเงื่อนไขทีจ่ ะใช้ตัดสินใจวา่ จะทำซ้ำหรือไม่แลว้ ตามด้วย
คำอธบิ ายวา่ “แล้วทำ” และทำตามลำดับขน้ั ตอนการทำงานทั้งหมด
17
ตัวอยา่ งที่ 2.8 ผงั งานแบบการทำซำ้ แบบทำในขณะที่ (Do-While)
Start
Read Num N
Stop
Num >=0
Y
Write Num
Num = Num-1
ภาพประกอบท่ี 2.4 ตัวอย่างผงั งานแบบการทำซำ้ ในขณะท่ี(Do-While)
จากผังงานในตวั อยา่ งที่ 2.8 การทำซำ้ แบบทำในขณะท่ี (Do-While) เขียนขั้นตอนวธิ ไี ด้ดังนี้
ขน้ั ท่ี 1 เรมิ่ ตน้
ขน้ั ท่ี 2 รบั ค่า Num
ขนั้ ท่ี 3 ในขณะที่ Num มากกว่าหรือ เทา่ กับ 0 แล้วทำ
แสดงค่า Num
ให้ Num = Num - 1 ( ลดคา่ Num ลง 1)
ขน้ั ท่ี 4 จบการทำงาน
2. การทำซำ้ แบบจนกระทัง่ (Do-Until) การเขียนขนั้ ตอนวธิ ใี นลักษณะการทำซำ้ แบบจน
กระท่ัง จะใช้คำวา่ “ทำจนกระทัง่ ” และตามดว้ ยเง่ือนไขท่ีจะใชต้ ัดสนิ ใจวา่ จะทำซ้ำหรอื ไม่และทำ
ตามลำดับข้ันตอนการทำงานทงั้ หมด
18
ตวั อย่างท่ี 2.9 ผงั งานแบบการทำซำ้ แบบจนกระทงั่ (Do-Until)
Start
Sum = 1
Read Num
Sum = Sum x Num
Num = Num - 1
N Y
Write Sum
Num < 1
Stop
ภาพประกอบท่ี 2.5 ตัวอยา่ งผงั งานแบบการทำซำ้ จนกระทง่ั (Do-Until)
ภาพประกอบที่ 2.5 ตัวอยา่ งผังงานแบบการทำซ้ำแบบจนกระท่ัง (Do-Until)
จากผังงานในตวั อยา่ งที่ 2.9 การทำซ้ำแบบจนกระทง่ั (Do-Until) เขียนข้นั ตอนวธิ ไี ด้ดังน้ี
ขั้นที่ 1 เร่มิ ต้น
ขั้นท่ี 2 กำหนดให้ Sum = 1
ขน้ั ท่ี 3 รบั คา่ Num
ขั้นที่ 4 ทำจนกระทั่ง Num มคี า่ น้อยกว่า 1
ให้ Sum = Sum x Num
ให้ Num = Num – 1
ขน้ั ท่ี 5 แสดงค่า Sum
ขั้นท่ี 6 จบการทำงาน
ดงั นนั้ สามารถสรปุ ไดว้ ่า ขน้ั ตอนวธิ ที ี่ดจี ะชว่ ยทำให้เขยี นโปรแกรมได้ง่ายขนึ้ โปรแกรมมีการ
ทำงานทผ่ี ดิ พลาดน้อย ดังนนั้ ถ้าข้นั ตอนวิธีดีจะทำใหจ้ ำนวนคำสง่ั มไี มม่ ากสง่ ผลให้โปรแกรมมีขนาดเลก็
คอมพิวเตอร์ใช้เวลาในการประมวลผลคำสง่ั ของโปรแกรมไดอ้ ย่างรวดเร็ว
19
2.3 รหสั เทียม
กอ่ นลงมือเขยี นโปรแกรมผู้เขยี นโปรแกรมจะต้องทำการวิเคราะหข์ อบเขตของปัญหา ออกแบบ
โปรแกรมเป็นโมดูล ทำการกำหนดโครงสร้างข้อมูลท่ีเหมาะสมกับข้อมูลท่ีเก็บพร้อมทั้งทำการเขียน
ขัน้ ตอนวิธี โดยใช้รหัสเทยี มเขยี นทกุ ๆ โมดลู เพื่อให้เขยี นโปรแกรมได้ง่าย
ลกั ษณะของรหสั เทียม
รหัสเทียม (Pseudo Code) จะมีลักษณะคล้ายภาษาอังกฤษ ก้ำกึ่งระหว่างภาษาอังกฤษกับ
คำส่ังของโปรแกรม ใช้ในการอธิบายลักษณะโครงสร้างข้อมูลและบอกลำดับการทำงานของขั้นตอนวิธี
ทำให้ไม่ต้องเขียนคำอธิบายด้วยคำสั่งของโปรแกรมภาษาคอมพิวเตอร์ภาษาใดภาษาหน่ึง ที่มีความ
ยืดหยุ่นตามหลักไวยากรณ์ (Syntax) ของภาษาคอมพิวเตอร์ทุกภาษา นอกจากน้ียังช่วยให้ผู้เขียน
โปรแกรมมือใหม่และเป็นผู้ไม่เคยเขียนโปรแกรมมาก่อนสามารถเขา้ ใจลกั ษณะโครงสร้างของข้อมูลและ
การทำงานของขนั้ ตอนวิธีทีเ่ ขียนได้ง่ายขึ้น
การเขียนรหัสเทียมไม่มีกฏเกณฑ์ในการเขียนตายตัว โดยส่วนมากข้ึนอยู่กับความถนัดของ
ผู้เขียนโปรแกรม แต่มีข้อตกลงบางอย่างท่ีเป็นสากล การเขียนรหัสเทียมเป็นข้ันตอนของการเขียนลำดับ
คำสั่งท่ีถูกสร้างขึ้นมาเพ่ือแก้ปัญหาเฉพาะอย่าง ซ่ึงส่วนประกอบท่ีสำคัญของรหัสเทียมได้แก่ ชื่อคำส่ัง
กำหนดงาน คำส่ังควบคุม กลุ่มของคำส่ัง และข้อบันทึก หรือ คำอธิบายลักษณะของรหัสเทียม โดยมี
รายละเอยี ดดงั นี้
1. การเขียนจุดเร่ิมต้นมักใช้คำว่า “Begin” หรือ “Start” และจุดส้ินสุดใช้คำว่า “ End ”
หรือ “ Stop ” เปน็ ตน้
2. การเขียนให้ใชค้ ำท่เี ข้าใจงา่ ย เขียนใหส้ ั้นกระช้บั ได้ใจความ
3. ในการเขียนรหัสเทยี มแต่ละคำส่ังควรเขียนเป็นบรรทัด
4. รหสั เทยี มไม่ไดข้ ้นึ กบั ภาษาคอมพิวเตอรภ์ าษาใดภาษาหนึ่ง
5. ควรเขยี นโดยใช้ย่อหนา้ เพอ่ื ความสะดวกในการตรวจสอบ
6. เขียนจากบนลงล่างตามลำดับข้ันตอนวิธี
ตัวอย่างที่ 2.10 ตัวอยา่ งการเขยี นรหสั เทียมในการคำนวณหาขนาดพน้ื ที่สเ่ี หล่ียมผนื ผา้
ขั้นตอนวิธี(Algorithms) ลกั ษณะของรหสั เทยี ม(Pseudo Code)
1. เร่ิมตน้ Begin
2. รบั ค่า Width, Length Read Width, Length.
3. คำนวณค่า Area = Width * Length Area = Width * Length.
4. แสดงค่า Area Display Area.
5. จบการทำงาน End
20
รูปแบบการเขียนรหัสเทียม
โดยท่วั ไปรปู แบบการเขยี นรหัสเทยี มที่แสดงแบ่งออกเป็น 2 ส่วน
ส่วนท่ี 1 เป็นการกำหนดวัตถุประสงค์ของรหัสเทียม กำหนดตัวแปรต่างๆ ท่ีใช้ในรหัส
เทียม และรายการของข้อมูลนำเขา้ ตา่ งๆ
สว่ นที่ 2 จะเป็นส่วนแสดงขั้นตอนการทำงานของรหัสเทียม หัวข้อและรูปแบบที่จะใช้
ในการแสดงรหสั เทยี มดงั ตารางที่ 2.1
ตารางที่ 2.1 รปู แบบรหัสเทยี มจากข้ันตอนวิธี
ลำดับท่ี ข้นั ตอนวิธี รปู แบบรหัสเทยี ม ความหมาย
1 การรับข้อมูล Read อา่ นค่าจากแฟ้มข้อมูล
Get , Input รบั คา่ ทางแปน้ พิมพ์ หรอื อปุ กรณน์ ำเข้าอ่ืนๆ
2 การคำนวณ +,-,*,/,^ เคร่อื งหมายการกระทำทางคณติ ศาสตร์
DIV , MOD การหารปดั เศษและการหารแบบเอาเศษ
3 การแสดงผลข้อมลู Print แสดงผลลัพธอ์ อกทางเครอ่ื งพิมพ์
Write, Writeln การบนั ทกึ ข้อมูลลงแฟ้มข้อมูล
Display, Output การแสดงผลลพั ธ์ออกทางจอภาพ
4 การกำหนดค่า Initialization, Set การกำหนดค่าให้กับตวั แปรท่ีใช้
= เกบ็ ค่าผลลพั ธซ์ ่งึ อยู่ทางขวาของเครื่องหมาย
5 การเปรยี บเทยี บ If..then… การเปรยี บเทียบคา่
If..then…else…
If..then..else if…
6 การวนซ้ำ Do-While การทดสอบเงอ่ื นไขการทำงาน ถ้าเป็นจรงิ ให้
While-do ทำการวนซำ้ ถา้ ไมจ่ ริงกข็ ้ามไปทำงานลำดบั
Repeat-Unitl ถดั ไป
Do-Until
21
ตวั อย่างที่ 2.11 การเขยี นรหัสเทียม (Pseudo Code) เพื่ออ่านข้อมูลในแฟม้ ข้อมูลมาทำการ
แสดงผลลัพธ์และพิมพร์ ายงาน
Pseudo Code 2.1 : Prints Report ( Ref PageNumber < Integer>)
{ This algorithms reads a file and prints a report}
Begin { เรมิ่ ตน้ การทำงาน}
Pre PageNumber must be initialized.
Post Report Printed. PageNumber contains number of pages in report.
Return Number of line printed.
Open file
linePrint = 0.
loop (not end of file)
read file.
if (full page).
from feed.
Add 1 to PageNumber.
Write page heading.
Write report line.
linesPrint = linesPrint + 1.
close file.
return linesPrint.
end Prints Report.
End. {สิ้นสุดการทำงาน}
ตัวอยา่ งที่ 2.12 อาเรย์ DATA เกบ็ ขอ้ มูลของตัวเลข หากต้องการหาตำแหน่ง LOC ของข้อมูล
ที่มคี ่าสูงสุด MAX ในอาเรย์ โดยไมก่ ำหนดรายละเอียดอยา่ งอื่น สามารถหาค่าและตำแหน่งของขอ้ มูลที่
สูงสุดได้ ดังน้ี กำหนดตำแหน่งเร่ิมต้นของ LOC = 1 และ MAX = DATA [1] แล้วเปรียบเทียบ
MAX กับข้อมลู ในลำดับถัดไป DATA [K] หาก DATA [K] > MAX ก็เปล่ียนข้อมูลใน LOC และ MAX
ดังนี้ LOC = K และ MAX = DATA [K] แล้วเพ่ิมค่าของ K และเปรียบเทียบอีกจนหมดข้อมูล จะได้ค่า
ของ LOC และ MAX เปน็ ตำแหนง่ และคา่ ของขอ้ มลู ทีส่ งู สดุ ในอาเรย์ DATA
Pseudo Code 2.2 : A nonempty array DATA with N numerical values is given.
This algorithm finds the location LOC and the value MAX of the largest
element of DATA. The variable K is used as a counter.
22
Step 1 Begin.
Step 2 [Initialize] Set K = 1, LOC = 1 and MAX = DATA[1].
Step 3 [Increment counter] Set K = k+1.
Step 4 [Test counter] If K > N, then:
Write : LOC, MAX, and Exit.
Step 5 [Compare and update.] If MAX < DATA[k], then:
Set LOC = K and MAX = DATA[K].
Step 6 [Repeat loop.] Go to Step 2.
Step 7 End.
ตัวอยา่ งที่ 2.13 จงเขยี นรหสั เทียมจากลำดบั ขัน้ ตอนวธิ ีเพื่อคำนวณหาคา่ เฉลีย่ อายุของ
พนักงาน
ขนั้ ตอนวิธี (Algorithms) รหัสเทยี ม(Pseudo Code)
แสดงลำดบั ขนั้ ตอนวิธเี พ่อื คำนวณหาคา่ เฉล่ยี อายุ Pseudo Code 2.3 : This algorithm for
ของพนกั งาน โดยกำหนดตัวแปรได้แก่ I, Sum, N , calculation average age of employees.
Age และ Avg_age Variables are I, Sum, N, Age and Avg_age.
1. เร่มิ ตน้ การทำงาน Step 1 Begin.
2. กำหนดค่าเร่ิมตน้ ใหก้ ับ I, Sum Step 2 [Initialize] Set I= 0, Sum= 0 .
3. รบั คา่ จำนวนพนักงานท้ังหมด (N) Step 3 [Input Variable] Get N.
4. ทดสอบเงื่อนไข ในขณะท่ี (I<N) ถ้าจริงให้ Step 4 [loop] While (I < N) do
ทำ ขนั้ ท่ี 5 และ 6 Step 5 Get Age.
5. รับค่าอายุของพนักงานแต่ละคน Step 6 Set Sum = Sum+Age.
(Age) Set I = I +1.
6. สะสมจำนวนพนกั งานทีละคน (I) [End of Loop While]
และสะสมอายุของพนกั งานแต่ละคน Step 7 Compute Avg_age = Sum/N.
(Sum) Step 8 Display Avg_age.
7. คำนวณอายุเฉลีย่ (Avg_age) Step 9 End.
8. แสดงอายุเฉลี่ย (Avg_age)
9. จบการทำงาน
23
ตัวอย่าง 2.14 จงเขียนรหสั เทยี มเพื่อคำนวณหาเงินเดือน ภาษี และเงินสทุ ธิของพนกั งานแต่ละ
คนโดยมีเง่ือนไนในการคดิ ภาษีดงั นี้
ถา้ เงนิ เดือนตำ่ กว่า 10,000 บาท ไมค่ ดิ ภาษี
ถา้ เงินเดือน 10,000-14,999 บาท คดิ ภาษี 5%
ถ้าเงนิ เดือน 15,000-19,999 บาท คิดภาษี 10%
ถา้ เงนิ เดือนตัง้ แต่ 20,000 บาทขึ้นไป คดิ ภาษี 15%
Pseudo Code 2.4 : This program for calculation Tax and Net Income of
employee. Variables are I, N, Id, Name, Salary, Tax ,Net.
Step 1 Begin.
Step 2 [Initialize] Set I = 0.
Step 3 Input N.
Step 4 Input Id, Name, Salary.
Step 5 If (Salary < 10000) then Tax = 0
else if (Salary <15000) then Tax = Salary * 5%.
else if (Salary < 20000) then Tax = Salary * 10%.
else Tax = Salary * 15%.
[end of If Structure]
Step 6 Compute Net = Salary – Tax.
Step 7 Display Id, Name, Salary, Tax, Net.
Step 8 Set I = I+1.
Step 9 While (I<N) do go to Step 4.
Step 10 End.
2.4 การวดั ประสิทธภิ าพของข้ันตอนวธิ ี
ในการแก้ปัญหาหนง่ึ ๆ อาจมวี ธิ ีการหรอื หนทางในการแก้ปัญหานั้นมากกว่าหน่ึงวธิ ีการแตค่ วรจะ
เลือกวิธีการท่ีดีท่สี ุดคอื วธิ ีท่ีเร็วและใช้เน้ือท่ีในหน่วยความจำน้อย ซ่ึงการวัดประสทิ ธิภาพของขั้นตอนวิธี
หรอื วธิ ีการแกป้ ัญหาควรออกมาในรูปหนว่ ยเวลา
ในการเขียนโปรแกรมคอมพิวเตอร์ส่ิงที่สำคัญท่ีสุดซ่ึงจะต้องคำนึงถึงก็คือ ผลลัพธ์ของการ
ประมวลผลที่ถูกต้อง แม่นยำ สามารถแก้ปัญหาได้ตามที่กำหนดไว้ เพราะแม้จะเขียนโปรแกรมด้วย
ข้ันตอนวิธีที่ชาญฉลาดแค่ไหน โปรแกรมที่เขียนข้ึนมาน้ันเป็นโปรแกรมท่ีไม่สามารถใช้งานได้เมื่อ
24
โปรแกรมคอมพิวเตอร์ท่ีเขียนข้ึนมาสามารถประมวลผล หาผลลัพธ์ได้ถูกต้องแล้ว น่ันหมายความว่า
ข้นั ตอนวิธีสามารถประมวลผลหาผลลัพธไ์ ดถ้ กู ต้องตามไปด้วย
ประสิทธิภาพของข้ันตอนวิธีจะพิจารณา 2 ส่วนหลักๆ ได้แก่ หน่วยความจำท่ีต้องใช้ในการ
ประมวลผล และเวลาทีจ่ ะต้องใชใ้ นการประมวลผล ซ่งึ ทั้งสองสว่ นนใ้ี ช้เปน็ ส่ิงท่ีจะตดั สนิ ใจวา่ ขัน้ ตอนวิธี
มปี ระสิทธิภาพมาน้อยเพียงใด ดังนั้นถ้าจำเป็นจะต้องดำเนินการแก้ไขปรับปรุงเพื่อเพ่ิมประสิทธิภาพของ
ขั้นตอนวิธีจำเป็นต้องพิจารณาก่อนว่าจะสามารถดำเนินการแก้ไขได้กับส่วนใดบ้าง และส่งผลกระทบต่อ
กนั หรือไมอ่ ยา่ งไร
การประเมนิ ประสิทธภิ าพของขั้นตอนวธิ ี
การประเมินประสิทธิภาพของขั้นตอนวิธี แบ่งออกเป็น 2 วิธี โดยการวิเคราะห์ (Analysis) และ
โดยการวัดผล (Measure) ดงั นี้
1. การวิเคราะห์ประสิทธิภาพของข้นั ตอนวธิ ี (Performance Analysis) จะใช้วธิ ีการวิเคราะห์
วิธกี ารทำงาน(Method) ของข้ันตอนวธิ ี
2. การวดั ประสทิ ธิภาพของข้นั ตอนวิธี (Performance Measurement) จะเป็นการ
วดั ผลจากการทดลองจรงิ
ในที่นี้เพ่ือความสะดวกในการศึกษามุ่งเน้นไปที่การประเมินประสิทธิภาพของข้ันตอนวิธีด้วยวิธี
การวิเคราะหป์ ระสิทธภิ าพของขน้ั ตอนวิธี แบง่ ออกเปน็ 2 สว่ น ดังน้ี
สว่ นท่ี 1 การวิเคราะห์หน่วยความจำท่ีต้องใช้ในการประมวลผล (Space Complexity) เป็นการ
วิเคราะห์ว่าต้องใช้หน่วยความจำทั้งหมดเท่าไรในการประมวลผลขั้นตอนวิธีสาเหตุที่ต้องมีการคำนวณ
จำนวนของหน่วยความจำที่ใช้นั้นมีเหตุผลคือ ช่วยให้ทราบว่าขั้นตอนวิธีน้ันสามารถรองรับกับจำนวน
ข้อมูลท่ีส่งเข้ามา ทำการประมวลผล (Input Data) ได้ใหญ่ท่ีสุดขนาดใด เพ่ือให้ขั้นตอนวิธีสามารถ
ประมวลผลได้เคร่ืองท่ีประมวลผลแบบใช้ร่วมกันหลายคน (Multi User) จำเป็นต้องทราบจำนวนของ
การใช้หน่วยความจำเพ่ือไม่ให้ไปกระทบกับการทำงานของคนอ่ืนๆ ได้ สำหรับคอมพิวเตอร์บางระบบ
จำเป็นต้องทราบล่วงหน้าว่าจะต้องใช้หน่วยความจำเทา่ ไรเพอ่ื ใหเ้ พียงพอในการประมวลผล
องคป์ ระกอบของการวิเคราะหห์ นว่ ยความจำที่ตอ้ งใช้ในการประมวลผล
การวิเคราะห์การวิเคราะห์หน่วยความจำที่ต้องใช้ในการประมวลผลประกอบด้วย 3
สว่ น คอื Instruction Space, Data Space, และ Environment Space โดยมีรายละเอยี ด คอื
1) Instruction Space คอื จำนวนของหนว่ ยความจำทคี่ อมไพลเ์ ลอร์จำเป็นต้องใช้
ระหว่างท่ที ำการคอมไพล์ (Compile) โปรแกรมคอมพวิ เตอร์ซึง่ จำนวนของหน่วยความจำทีต่ ้องใช้ขึ้นอยู่
กับคอมไพล์เลอร์แต่ละประเภท ไม่จำเป็นว่าต้องเท่ากันแต่จะต้องรู้ว่าต้องใช้หน่วยความจำเท่าไรก็
ตอ่ เม่ือถึงเวลาท่โี ปรแกรมทำงาน (Run Time) เทา่ นนั้
25
2) Data Space คือ จำนวนหน่วยความจำที่ใช้สำหรับเก็บค่าคงท่ีและตัวแปรท้ังหมด
ท่ีตอ้ งใชใ้ นการประมวลผล ซึ่ง Data Space จะแบง่ ออกได้ ดังน้ี
2.1) หน่วยความจำแบบสแตติก (Static) คือ จำนวนหน่วยความจำที่ต้องใช้
อย่างแน่นอนไม่มีการเปล่ียนแปลง ประกอบไปด้วย หน่วยความจำท่ีใช้เก็บค่าคงท่ี และตัวแปรประเภท
อาเรย์ ที่ต้องมีการประกาศตัวแปรไวล้ ่วงหนา้ ในการเขียนโปรแกรม
2.2) หน่วยความจำแบบไดนามิก (Dynamic) คือ จำนวนหน่วยความจำที่ใช้
ในการประมวลผลและสามารถเปลี่ยนแปลงได้ และจะทราบเมื่อโปรแกรมกำลังทำงานอยู่การใช้
หนว่ ยความจำแบบไดนามิก จะเกิดขน้ึ กับการเขยี นโปรแกรมท่ีเปน็ เชิงวตั ถุ
3) Environment Space คือ หน่วยความจำที่ใช้ในการเก็บผลลัพธ์ของข้อมูลเอาไว้
เพ่ือรอเวลาท่ีจะนำหน่วยความจำเหล่าน้ันกลับไปประมวลผลใหม่อีกครั้ง หน่วยความจำประเภทนี้จะ
เกิดขึ้นเมื่อถูกมกี ารรอ้ งขอให้นำกลับมาใชเ้ ท่านั้น เชน่ การเขยี นโปรแกรมแบบเวยี นเกิด
ซึ่งทั้ง 3 รูปแบบ Data Space เป็นวิธีท่ีคำนวณหาประสิทธิภาพของข้ันตอนวิธีได้ง่าย
ทส่ี ุด ดังขั้นตอนวิธตี อ่ ไปนี้
ตวั อยา่ งท่ี 2.15 ข้นั ตอนวธิ ีการสลบั ระหวา่ ง 2 คา่ ใดๆ
Pseudo code 2.5 : Swapping for 2 variables. Variables of integer are
Num1, Num2, Temp.
Step 1 Begin.
Step 2 Temp = Num1.
Step 3 Num1 = Num2.
Step 4 Num2 = Temp.
Step 5 End.
จากตัวอยา่ งที่ 2.15 ขนั้ ตอนวิธกี ารสลับระหวา่ ง 2 คา่ ใดๆ ใช้ตวั แปรด้วยกันทงั้ หมด 3
ตวั แปร ได้แก่ Num1, Num2, Temp ซ่ึงเป็นตัวแปรชนิด Integer ท้ังหมด กรณีท่ีใช้ภาษาปาสคาลน้ัน
เปน็ คอมไพล์เลอรจ์ ะใชห้ นว่ ยความจำในการเกบ็ ตวั แปรประเภท Integer ตวั แปรละ 2 Bytes
ดังน้นั จากโปรแกรมตัวอย่างข้างตน้ จะต้องใช้หน่วยความจำท้งั สนิ้ โดยใช้สตู ร
(จำนวนตวั แปร X หนว่ ยความจำท่ีใช้ของตัวแปรแต่ละชนิด)
= (3 X 2 )
= 6 Bytes
26
ส่วนที่ 2 การวิเคราะห์เวลาท่ีต้องใช้ในการประมวลผล (Time Complexity) การวิเคราะห์
เวลาที่ต้องใช้ในการประมวลผล คือ เวลาท่ีเคร่ืองคอมพิวเตอร์ใช้ในการประมวลผลขั้นตอนวิธี สาเหตุที่
ผ้เู ขียนโปรแกรมตอ้ งทราบเวลาท่ีตอ้ งใช้เพื่อเหตผุ ล ดังน้ี
1. ได้ทราบเวลาที่เคร่อื งคอมพิวเตอร์ใช้ในการประมวลผลขนั้ ตอนวิธีแตล่ ะข้ันตอนวิธีว่าใช้เวลา
มากน้อยเพียงใดทำใหส้ ามารถประมาณเวลาทั้งหมดทต่ี ้องใช้ไปกับโปรแกรมถ้าต้องการปรบั ปรุงหรือเพ่ิม
ประสิทธิภาพของโปรแกรม จะได้มุ่งประเด็นไปท่ีแก้ไขข้ันตอนวิธีท่ีใช้เวลาในการประมวลผลนานๆ ทำ
ให้ไม่ต้องแกไ้ ขท้งั โปรแกรม
2. สำหรับโปรแกรมท่ที ำงานแบบโต้ตอบทันทีทนั ใด เวลาในการประมวลผลแต่ละขั้นตอนเป็นส่ิงท่ี
จำเปน็ และสำคัญอย่างยงิ่ เนื่องจากโปรแกรมแบบโต้ตอบทันทีทันใด ท่ีมีประสิทธิภาพกค็ ือ โปรแกรมท่ีไม่
ต้องรอการประมวลผลเป็นเวลานาน สามารถเลือกคุณสมบัติ ของเคร่ืองคอมพิวเตอร์มาประมวลผล
ทำงานของโปรแกรมได้ตามต้องการประกอบการตัดสินใจเลือกขั้นตอนวิธีที่ดีท่ีสุด (จากการใช้
หน่วยความจำและเวลานอ้ ยทีส่ ดุ ) กรณที ่เี ขียนขน้ั ตอนวธิ ีแก้ปญั หาเดียวกนั ออกมาได้มากกว่า 1 แบบ
การวิเคราะห์เวลาท่ีต้องใช้ในการประมวลผล จะมุ่งเน้นไปที่เวลาท่ีเคร่ืองคอมพิวเตอร์ใช้ในการ
ประมวลผล โดยมีหลักการพิจารณาคือ โปรแกรมจะสามารถประมวลผลได้เร็วเม่ืออยู่บนเครื่อง
คอมพิวเตอร์ที่มีความเร็วในการประมวลผลสูง การใช้คอมไพลเลอร์ตัวเดียวกันชุดคำสั่งที่ส้ันกว่าย่อมใช้
เวลาในการประมวลผลได้น้อยกว่า ตัวแปรที่มีจำนวน Byte น้อยกว่าย่อมประมวลผลได้เร็วกว่า เวลาที่
ต้องใชป้ ระมวลผลโปรแกรมประเภทใด ประกอบด้วย
1) Compile Time คือ เวลาที่ใช้ในการตรวจสอบไวยากรณ์ (Syntax) ของชุดคำส่ังว่า
เขยี นได้ถกู ต้องตามหลักไวยากรณ์ ในแตล่ ะภาษาน้ันหรอื ไม่ ถ้าโปรแกรมมีข้อผิดพลาดเกดิ ข้ึน เช่น พิมพ์
คำส่ังผิด ใช้สัญลักษณ์ผิด คอมไพลเลอร์จะมีการแจ้งเตือนข้อผิดพลาดให้ผู้เขียนโปรแกรมทราบเพื่อได้
ดำเนินการแกไ้ ข ก่อนที่คอมไพลเลอร์จะทำการคอมไพลใ์ หมอ่ ีกคร้งั หนึ่ง
2) Run Time หรือ Execution Time คือ เวลาท่ีเครื่องคอมพิวเตอร์ใช้ในการทำงาน
ซ่งึ จะเกิดขนึ้ อยกู่ บั จำนวนตัวแปร และคุณลักษณะของตวั แปรทใี่ ช้ในโปรแกรม จำนวนคำส่งั ในโปรแกรม
ดังนนั้ การวเิ คราะหเ์ วลาท่ตี ้องใช้ในการประมวลผลของโปรแกรมหรือข้นั ตอนวธิ ีใดๆ
ก็ตาม หมายถึงการวเิ คราะห์ในส่วนของ Run Time น่ันเอง
วธิ กี ารของการวิเคราะห์เวลาทีต่ ้องใช้ในการประมวลผล ที่นยิ มใชก้ ันบ่อยคือ การนบั ที่
ตัวดำเนินการ (Operation Count) ในข้ันตอนวิธีการนับตัวดำเนนิ การ(Operation Count) เป็นวิธกี าร
วิเคราะห์ Time Complexity ว่าตัวดำเนินการน้ันๆ มีพฤติกรรมของการถูกประมวลผลเป็นอย่างไร
และมากน้อยเพียงใด สามารถสรุปออกมาเป็นหลักการในการพิจารณาตามแบบของการวนรอบการ
ทำงาน (Loop) ของขั้นตอนวิธีดังน้ี แบบ Linear Loops เป็นลักษณะของขั้นตอนวิธีท่ีมีการทำงาน
แบบวนรอบ (Loop) โดยการทำงานในแต่ละรอบเป็นการเพ่ิม หรือลดค่าในปริมาณที่คงท่ี เช่น เพิ่มค่า
ของตัวแปรข้ึนทีละหนึง่ ในแตล่ ะรอบ ให้ลองพิจารณาข้ันตอนวธิ ีจากตวั อย่างต่อไปน้ี
27
ตัวอย่างที่ 2.16 ขัน้ ตอนวิธีลักษณะแบบ Linear Loops
i=1 i=1
Loop (i <= 2000) Loop (i <=2000)
another code another code
i = i+1 i = i+2
(a) (b)
จากตัวอย่างที่ 2.16 ทั้งสองข้ันตอนวิธี ตัวดำเนินการที่ต้องใช้เวลาในการประมวลผล
นานที่สุดก็คือ คำสั่ง Loop ดังนั้น Loop จึงเป็นตัวดำเนินการที่จะต้องนับ ดูว่าต้องทำตามคำสั่งน้ันกี่
คร้ัง หรือกี่รอบ สิ่งที่จะบอกได้ก็คือ ตัวแปรที่ใช้วนรอบ (Loop) การทำงานน่ันเอง จากขั้นตอนวิธี (a)
และ (b) ตัวแปรท่ีใช้วนรอบคือ ตัวแปร i ข้ันตอนวิธี (a) กำหนดให้มีคา่ ต้ังแต่ 1-2000 ตอ้ งการวนรอบก่ี
ครั้ง คำตอบก็คือ 2000 คร้ัง ขั้นตอนวิธี(b) กำหนดให้มีค่าต้ังแต่ 1-2000 เช่นกัน ต้องการวนรอบก่ีคร้ัง
คำตอบกค็ อื 1000 ครัง้
จะเห็นได้ว่า จำนวน Loop ของขั้นตอนวิธี(b) นั้นทำน้อยกว่า จึงเป็นข้ันตอนวิธี ที่มี
ประสิทธิภาพมากว่าในเร่ืองการวิเคราะห์เวลาท่ีต้องใช้ในการประมวลผล โดยใช้ตัวดำเนินการ แบบ
Nested Loops เป็นลักษณะของข้ันตอนวิธีที่มี Loop ซ้อนอยู่ภายใน Loop โดยประสิทธิภาพของ
ขน้ั ตอนวธิ ี จะมีคา่ เทา่ กับจำนวน Loop ท้ังหมดทตี่ อ้ งประมวลผล ซึ่งหาได้จากการนำเอาจำนวน Loop
ทีซ่ ้อนกนั มาคณู กัน ตามสตู ร ดังนี้
จำนวนรอบทัง้ หมด = จำนวนรอบของ Loop ชั้นนอก X จำนวนรอบของ Loop ชนั้ ใน
ตัวอย่างท่ี 2.17 ข้ันตอนวิธีแบบ Nested Loop
i=1 i=1
Loop (i <= 10) Loop( i<= 20)
k = 1 j= 1
Loop ( k <= 10) Loop(j<=10)
another code another code
k = k+1 j=j*2
i = i+1 i = i +1
(a) (b)
จากตัวอย่างที่ 2.17 ขั้นตอนวิธี (a) มี Loop ชั้นในและชั้นนอกเท่ากันคือ 10 รอบ
ดังนั้นจำนวนรอบท้ังหมดมีค่าเท่ากับ = 10x (10x10) = 1000 รอบ เป็นต้น ส่วนข้ันตอนวิธี (b) มี
28
จำนวน Loop ชั้นนอกเทา่ กับ 20 และจำนวน Loop ช้ันในเทา่ กับ 4 รอบ (รอบที่ 1 i = 1, รอบที่ 2 i =
2, รอบท่ี 3 i = 4 รอบที่ 4 i = 8) ดังนนั้ ขัน้ ตอนวธิ ี (b) มจี ำนวนรอบท้ังหมด = 20 x (4 x 20) = 1600
รอบ เปน็ ตน้
โครงสร้างการควบคุม
ข้ันตอนวิธีและโปรแกรมคอมพิวเตอร์ จะประกอบด้วย รูปแบบการทำงานโดยใช้
โครงสร้างการควบคุมหลัก 3 อย่างต่อไปน้ี
1. การทำงานแบบต่อเนอื่ ง (Sequence Logic or Sequential Flow) หากไม่มี
การควบคุมอยา่ งอ่ืน การทำงานของขั้นตอนวธิ ีจะเปน็ ไปอย่างตอ่ เนื่อง ตามหมายเลขของขนั้ ตอนหรอื
ตามหมายเลขโมดูลทกี่ ำหนด ดูภาพประกอบท่ี 2.6 ประกอบการทำงานแบบต่อเนอ่ื ง (Sequence Logic
or Sequential Flow)
Algorithm Flowchart equivalent
-
Module A
Module A Module B
Module C
Module B .
Module C
.
ภาพประกอบท่ี 2.6 การทำงานแบบตอ่ เน่ืองตามลำดบั
2. การทำงานแบบมีเงื่อนไข (Selection Logic or Condition Flow) เป็นการ
ควบคุมให้มีการเลือกการทำงาน เม่อื เงื่อนไขเปน็ จริงหรืออาจเป็นการเลอื กการทำงานโมดูลหนึ่งจาก
หลายๆ โมดูลตามเงอ่ื นไขก็ได้ บางครัง้ เรยี กโครงสร้างแบบ IF ซึ่งมชี ุดคำสง่ั ตวั สดุ ทา้ ยเป็น [End of If
structure.] หรอื อย่างอน่ื ที่มีความหมายเดียวกนั
โครงสรา้ งของเง่ือนไขแบ่งออกเปน็ 3 ชนดิ ดงั ต่อไปนี้
1) เลือกทำหรือไม่ (Single alternative) มีโครงสร้าง ดังน้ี
If condition then :
29
[Module A]
[End of If structure.]
การทำงานของโครงสร้างน้ีแสดงในภาพประกอบที่ 2.7(a) หากเง่ือนไขหลัง
คำสั่ง If เป็นจรงิ โมดูล A จะถูกกระทำ หากเงอ่ื นไขไม่เป็นจรงิ จะข้ามโมดลู A ไปยังชดุ คำสงั่ ต่อไป
2) เลอื กทำอยา่ งใดอย่างหนง่ึ จาก 2 เง่ือนไข (Double alternative) มี
โครงสร้าง ดังน้ี
If condition then :
[Module A]
else:
[Module B]
[End of If structure.]
การทำงานของโครงสร้างน้ีแสดงในภาพประกอบท่ี 2.7 (b) หากเง่อื นไขหลงั
If เป็นจริง โมดูล A ถกู กระทำ และหากเง่อื นไขไม่จรงิ โมดูล B ถกู กระทำ
No No
Condition Condition Module B
? Yes ? Yes
Module A Module A
(a) เลอื กกระทำหรอื ไม่ (b) เลือกทำอย่างใดอย่างหนึง่
ภาพประกอบที่ 2.7 (a) เมอ่ื เลือกกระทำตามเงื่อนไข (b) เม่ือเลือกทำอย่างใดอย่างหน่ึง
3) เลือกอยา่ งหนง่ึ จากหลายเง่ือนไข (Multiple Alternative) มโี ครงสร้างเป็น
If condition(1) , then:
[Module A 1]
else if condition (2) , then:
[Module A 2 ]
else if condition (M) , then:
30
[Module A M ]
else:
[Module B ]
[End of If structure.]
การทำงานของโครงสร้างนี้จะเป็นการควบคมุ ใหเ้ ลือกการทำงานจากโมดลู
ต่างๆ เพียงโมดูลเดียวท่ีอยู่ในเง่ือนไขที่เป็นจริงเท่านั้น หากเงื่อนไขท้ังหมดไม่เป็นจริงก็จะกระทำใน
เงื่อนไขที่อยู่นอกเหนือการตรวจสอบ จากตัวอย่างจะเห็นได้ว่า มีท้ังหมด 3 เง่ือนไข โดยให้เลือกทำ
เงอ่ื นไขใดๆ แตถ่ า้ พบวา่ ไมเ่ ขา้ เง่อื นไขใดๆ จะทำเง่อื นไขโมดูล B
ตัวอยา่ งที่ 2.18 หาค่าของ X จากสมการ aX2 + bx + c = 0 เมอื่ a 0 , หาค่า
ของ X ไดจ้ ากสตู ร
คา่ ของ D = b2 – 4ac เรียกวา่ เปน็ การจำแนกของสมการ หากคา่ ของ D เป็นลบจะหา
ค่าไม่ได้ ถ้าค่าของ D = 0 จะได้เพียงค่าเดียว X = -b / 2a หากค่าของ D เป็นบวก จะได้ค่าของ X 2
ค่า
ขั้นตอนวิธีต่อไปนี้ใช้สำหรับหาคา่ ของ X จากสมการทก่ี ำหนด
Pseudo Code 2.6 : (Quadratic Equation) This algorithm inputs the coefficients
A,B,C of a Quadratic equation and outputs the real solutions, if any.
Step 1 Read: A, B, C.
Step 2 Set D= B2 – 4AC.
Step3 If D>0, then:
Set X1= (-B + D ) /2A and X2= (- B - D ) / 2A.
Write: X1, X2.
else if D = 0 , then:
Set X= - B / 2A.
Write: ‘UNIQUE SOLUTION’ , X .
else:
Write: ‘NO REAL SOLUTION’ .
31
[End of If structure.]
Step 4 Exit.
หมายเหตุ : สามารถเขยี นเงอ่ื นไขเพ่อื ตรวจสอบค่า D ในข้นั ตอนที่ 3 (Step 3) ได้อีกแบบดังน้ี
Step 3 (1) If D > 0 , then :
(2) If D = 0 , then :
(3) If D < 0 , then :
3. การทำงานแบบซำ้ (Iteration Logic or Repetitive Flow) การควบคมุ ให้มกี าร
ทำงานซำ้ จะมอี ยู่ 2 แบบ โดยโครงสรา้ งแต่ละแบบจะเรม่ิ ดว้ ยชดุ คำสงั่ Repeat และตามดว้ ยโมดูล ซึง่
เรยี กว่า body of the loop และชดุ คำสง่ั ควบคมุ การส้ินสุดของโครงสร้างจะเป็น[End of loop.]
หรอื อยา่ งอนื่ ที่มคี วามหมายเดียวกัน การควบคุมการทำงานซำ้ 2 แบบ จะมดี ังน้ี
1) Repeat - for loop เป็นการทำงานซ้ำที่มีการกำหนดตัวแปรควบคุม
จำนวนรอบเช่นกำหนดให้ตวั แปร K เป็นการทำงานแบบ for loop ซึง่ มรี ปู แบบของการใช้งาน ดงั น้ี
Repeat for K = R to S by T do
[Module]
[End of loop]
จากการทำงานของโครงสร้างจะพบว่า ค่า R เป็นค่าเร่ิมต้น (Initial value)
ค่า S เป็นค่าสุดท้าย ค่า T เป็นค่าที่เพ่ิมข้ึน (Increment) การทำงานจะเร่ิมจากค่า K = R ในรอบแรก
และ K = R + T ; และ K = R + 2T ไปเรื่อย ๆ และจะจบเม่ือ K>S ในผังงานเป็นการกำหนดค่า T เป็น
บวก หากค่า T เปน็ ลบ ค่าของ K จะลดลงและจะวนรอบจนกวา่ ค่าของ K<S
2) Repeat – while loop เป็นการใช้เงื่อนไขควบคุมการวนรอบ ซึ่งมี
รูปแบบของการใชง้ าน ดงั น้ี
Repeat while condition do
[Module]
[End of loop.]
32
K=R
No No
Is K > S? Is K > S?
Yes
Yes
Module
(body of loop) Module
(body of loop)
K K+T
(a) โครงสรา้ ง Repeat - for (b) โครงสรา้ ง Repeat - While
ภาพประกอบท่ี 2.8 (a) โครงสร้าง Repeat - for และ (b) โครงสรา้ ง Repeat - While
ตัวอย่างที่ 2.19 จากตัวอย่างที่ 2.12 สามารถเขียนขั้นตอนวิธีใหม่ โดยใช้ Repeat - while
แทน Go to ได้ดงั น้ี
Pseudo Code 2.7 : (Largest Element in Array) Given a nonempty array DATA
with N numerical value, this algorithm find the LOC and the value MAX of
the largest element of DATA. The Variable K is used as a counter.
Step 1 Begin.
Step 2 [Initialize.] Set K = 1 , LOC = 1 and MAX = DATA[1].
Step 3 Repeat Step 3 and 4 while (K N) do
Step 4 If MAX < DATA[K] , then :
Set LOC = K and MAX = DATA[K].
[End of If structure.]
Step 5 Set K = K+1
[End of Step 2 loop.]
Step 6 Write LOC , MAX.
Step 7 End.
จากตัวอย่างท่ี 2.19 แสดงการใช้ลักษณะเฉพาะของข้ันตอนวิธีบางอย่าง ซ่ึงสามารถตัดคำว่า
Step ออก และใช้โครงสร้างการวนรอบแทนการใช้ Go to ส่วน Repeat สามารถแสดงหมายเลข
33
ขน้ั ตอนที่ทำการวนรอบได้ชัดเจนขึ้น และ “End of Step loop” ตำแหนง่ ของการวนรอบ ซ่ึงโครงสร้าง
แบบนเี้ ข้าใจไดง้ ่ายขน้ึ และเป็นรปู แบบท่ีใชใ้ นโปรแกรมโครงสร้างทวั่ ไป
2.5 ประโยชน์ของขัน้ ตอนวิธี
การเขยี นขน้ั ตอนวิธี (Algorithms) ทดี่ ที ำให้ไมส่ ับสนกับวิธีดำเนนิ งานของโปรแกรมเพราะทุก
อย่างจะถูกจัดเรียงเป็นข้ันตอนโดยมีวิธีการและทางเลือกไว้ให้ เมื่อนำมาใช้จะทำให้การทำงานสำเร็จ
อยา่ งรวดเร็ว ทำใหป้ ญั หาลดลงหรือสามารถคน้ หาต้นเหตุของปญั หาได้อยา่ งรวดเรว็ เนอื่ งจากกระบวน
การถูกแยกแยะกิจกรรม ข้ันตอน และความสัมพันธ์ ออกมาให้เห็นอย่างชัดเจน ในส่วนของการ
ประยุกต์ใช้ขน้ั ตอนวิธีสามารถนำขัน้ ตอนวิธีมาปรับใชก้ บั การทำงาน โดยสามารถกำหนดขั้นตอนวิธีของง
งานขนึ้ มา เป็นข้ันตอนต้ังแต่ขั้นตอนแรกจนถึงข้ันตอนสุดท้าย ส่งผลให้ลดสามารถเวลาการทำงาน และ
เพ่ิมประสิทธิผลในการทำงานได้ โดยฉพาะอย่างยิ่ง การออกแบบขั้นตอนวิธีในการเขียนโปรแกรมใดๆ
ถือซ่ึงเป็นเคร่ืองมือในการแสดงขั้นตอนการทำงานของระบบงานต่างๆ ในโปรแกรม ทำให้การเขียน
โปรแกรมเป็นไปได้อย่างรวดเร็วและง่ายข้ึน นอกจากนี้สามารถตรวจสอบข้อผิดพลาดของโปรแกรมได้
งา่ ยก่อนที่จะลงมอื เขียนโปรแกรมตามสงิ่ ที่ได้ออกแบบไวใ้ นขั้นตอนวธิ ี
2.6 สรปุ
ขั้นตอนวิธี (Algorithms) หมายถึง กระบวนการแก้ปัญหาที่สามารถเข้าใจได้ มีลำดับหรือ
วิธีการแก้ปญั หาใดปัญหาหน่งึ อย่างเป็นข้ันตอนและชัดเจน เมื่อนำเข้าอะไรแล้วจะได้ผลลัพธอ์ ย่างไร ซึ่ง
แตกต่างจากการแก้ปญั หาแบบสามัญสำนกึ ขั้นตอนวิธีจะประกอบไปด้วยวิธีการเป็นข้ันๆ ท่ีต้องทำแบบ
วนซ้ำ(Iterate) หรือเวียนเกิด (Recursive) มีการตัดสินใจโดยใช้ตรรกะ (Logic) และ/หรือการ
เปรียบเทียบ (Comparison) ในขั้นตอนต่างๆ จนกระทั่งเสรจ็ สิ้นการทำงาน ในการทำงานอยา่ งเดยี วกัน
อาจใช้ขัน้ ตอนต่างกันในการแกป้ ัญหาได้ โดยทผ่ี ลลัพธ์ในขนั้ ตอนสุดท้ายจะออกมาเหมอื นกันหรือไม่ก็ได้
และจะมีความแตกตา่ งท่ีจำนวนและชุดคำสัง่ ที่ท่ีใช้ต่างกัน ซ่งึ ส่งผลให้เวลาและขนาดของหน่วยความจำ
ที่ต้องการต่างกันหรือเรียกอีกอย่างหนึ่งว่ามีความซับซ้อนต่างกัน ในการแก้ปัญหาหน่ึงๆ อาจมีวิธีการ
หรือหนทางในการแก้ปัญหานั้นมากกว่าหน่ึงวิธีการแต่ควรจะเลือกวิธกี ารท่ีดีที่สุด คือวิธีที่เร็วและใช้เนื้อ
ที่ในหน่วยความจำน้อยซึ่งการวัดประสิทธิภาพของขั้นตอนวิธีหรือวิธีการแก้ปัญหาควรออกมาในรูปหน่วย
เวลาแต่เนื่องจากเวลาท่ีใช้รันโปรแกรมแม้เป็นโปรแกรมเดียวกันขึ้นกับฮาร์ดแวร์ของคอมพิวเตอร์ท่ีใช้
นอกจากนี้การวัดประสิทธิภาพของข้ันตอนวิธียังอาศัยโครงการสร้างการควบคุม (Control Structures)
การทำงานของโปรแกรมแบบต่างๆ ซ่ึงจะมีการทำงานหลัก 3 อย่างคือการทำงานแบบต่อเนื่อง
(Sequence Logic or Sequential Flow), ก า ร ท ำ ง า น แ บ บ มี เงื่ อ น ไข (Selection Logic or
Condition Flow), การทำงานแบบซ้ำ (Iteration Logic or Repetitive Flow)
34
การออกแบบข้ันตอนวิธีในการแก้ปัญหาต่างๆนั้น จึงถือเป็นข้ันตอนที่สาคัญเป็นอย่างยิ่งในการ
พัฒนาโปรแกรม เพราะถ้าขั้นตอนนี้มีความผิดพลาด ชุดคาส่ังหรือโปรแกรมที่จะเขียนข้ึนมานั้นก็จะมี
ความผิดพลาดตามไปด้วย และทาให้ไม่สามารถที่นาไปสู่การหาผลลัพธ์ตามท่ีต้องการได้ ซึ่งเทคนิคหรือ
วิธีการที่นามาใชใ้ นการออกแบบขั้นตอนวิธีดงั กล่าว ได่แก่ ผังงาน และรหัสเทียม การใช้ผังงานหรือรหัส
เทียมน้ีจะมีส่วนช่วยทำให้ผู้เขียนโปรแกรมมีความเข้าใจ และเห็นภาพการทำงานของข้ันตอนต่างๆ ใน
โปรแกรมได้อย่างชดั เจน และทำให้การตรวจสอบความถูกต้องของโปรแกรมเปน็ ไดอ้ ย่างมีประสิทธิภาพ
35
คำถามท้ายบทที่ 2
1. จงบอกความหมายของขน้ั ตอนวธิ ี
2. จงยกตวั อย่างสัญลกั ษณ์ของผงั งาน 5 สญั ลักษณท์ ีไ่ ม่ซำ้ กันและอธิบายเป็นขัน้ ตอนวิธี
3. จงเขียนขนั้ ตอนวิธีเพื่อตรวจสอบการลงทะเบียนของนักศึกษาท่ีลงทะเบียนเรยี นเรยี นวิชาโครงสรา้ ง
ขอ้ มลู และขน้ั ตอนวธิ ี โดยระบบจะไม่อนุญาตใหน้ ักศึกษาท่ีสอบไมผ่ า่ นวชิ าการเขียนโปรแกรม 1
สามารถลงทะเบยี นรายวิชาน้ไี ด้
4. จงเขียนขน้ั ตอนวิธีเพื่อคำนวณหารายไดข้ องพนักงานโดยรายไดข้ องพนักงานได้จากเงินเดือนและ
รายได้พิเศษ รายได้พเิ ศษหาได้จาก 25 % ของยอดขายสนิ คา้
5. จงเขยี นข้ันตอนวิธีเพ่ือแสดงจำนวนนกั ศึกษาที่สอบผา่ นและนักศึกษาทส่ี อบไม่ผ่าน ในรายวชิ า
โครงสรา้ งข้อมูลและข้ันตอนวิธี โดยเกณฑท์ ส่ี อบผ่านจะต้องได้คะแนนรวมต้งั แต่ 60 คะแนนขนึ้
ไป จากคะแนนสอบ 3 ครัง้ ประกอบด้วย คะแนนสอบย่อย (20) คะแนนสอบกลางภาค (30)
คะแนนสอบปลายภาค (50) ซ่ึงมีนกั ศึกษาท่ีลงทะเบียนเรียนวิชานีจ้ ำนวน 30 คน
6. รหสั เทยี มหมายถงึ อะไร มีประโยชนอ์ ยา่ งไรกับการเขยี นโปรแกรม
7. จากโจทย์ขอ้ 5 จงเขียนรหัสเทียม
8. การวเิ คราะหป์ ระสทิ ธภิ าพของขนั้ ตอนวิธีมักพจิ ารณาจากอะไร
9. จงเปรียบเทยี บความเหมือนกัน และความแตกตา่ งกนั ของการวิเคราะห์ Space Complexity และ
Time Complexity
10. จงคำนวณหา Space Complexity และ Time Complexity ของขน้ั ตอนวธิ ีตอ่ ไปนี้เมื่อกำหนด ให้
ตวั แปร i,k เปน็ ตัวแปรชนิด Integer ซง่ึ ใช้หน่วยความจำในการเก็บตวั แปรๆ ละ 2 ไบต์
Step 1 Set i = 1.
Step 2 Loop ( i <=100)
k = 1.
Loop ( k <= i )
k = k +1.
i = i + 1.
Step 3 Exit.
บทท่ี 3
โครงสร้างขอ้ มลู แบบอาเรย์
โครงสร้างข้อมูลถูกจัดออกเป็น 2 ลักษณะคือ โครงสร้างเชิงเส้น (Linear Structure) และ
โครงสร้างไม่เป็นเชิงเส้น (Nonlinear Structure) โดยจะเรียกโครงสร้างข้อมูลที่สมาชิกเรียงกันใน
ลักษณะเป็นลำดับว่า โครงสร้างเชิงเส้น ส่วนกรณีอ่ืนๆ เรียกว่า โครงสร้างไม่เป็นเชิงเส้นและโครงสร้าง
เชิงเส้นที่นิยมใช้ในโปรแกรมคอมพิวเตอร์คือ อาเรย์
อาเรย์ หรือ แถวลำดับ (Array) เป็นชนดิ ข้อมลู เชิงโครงสร้างมาตรฐานที่เปน็ พื้นฐานสำคัญในการ
จัดเก็บข้อมูล และเป็นชนิดข้อมูลพื้นฐานในการสร้างข้อมูลชนิดอ่ืนๆ ต่อไป อาเรย์เป็นชนิดข้อมูลเชิง
โครงสร้างซึ่งประกอบด้วยข้อมูลย่อยซึ่งต้องมีชนิดเดียวกัน ประกอบข้ึนจากข้อมูลหลายๆ ตัวรวมเข้า
ด้วยกันเป็นกลุ่ม โดยข้อมูลแต่ละตัวในกลุ่มถูกเรียกว่า อีลีเมนต์ (Element) และแต่ละอีลีเมนต์ จะต้อง
เป็นข้อมูลชนิดเดียวกัน การอ้างถึงข้อมูลจะใช้ตัวแปรชื่อเดียว ซ่ึงจะหมายถึงชื่อของกลุ่ม และสามารถ
อ้างถึงข้อมูลแต่ละอีลีเมนต์ในกลุ่มได้โดยใช้ดัชนี (Index) ต่อท้ายหลังชื่อตัวแปรของกลุ่ม ดัชนีนี้จะเป็น
ตัวบ่งบอกถึงลำดับท่ีของอีลีเมนต์ ลักษณะของดัชนีท่ีสามารถเข้าใจได้ง่ายที่สุดก็คือ ตัวเลขหรือ
หมายเลข
3.1 การกำหนดคณุ ลักษณะเฉพาะของอาเรย์
อาเรย์ หรือ แถวลำดับ(Array) เป็นโครงสร้างท่ีมีการจองพื้นท่ีหน่วยความจำก่อนล่วงหน้า
เมื่อต้องการใช้งาน นิยมใช้ในการเก็บข้อมูลที่ต่อเน่ืองและเป็นลำดับ ซ่ึงชนิดข้อมูลเชิงโครงสร้าง
ท่ีสมาชิกของอาเรย์จะต้องมีชนิดเดียวกันเท่าน้ันและมีความสัมพันธ์กันแบบเชิงเส้น โดยเก็บข้อมูลใน
รปู แบบใดก็ได้ เช่น ตวั เลข ตวั อักษร ข้อความ จำนวนจรงิ เปน็ ตน้
การดำเนินงานกับอาเรย์ท่ีสำคัญคือ การกำหนดค่าให้กับอาเรย์ และการแสดงข้อมูลสมาชิกของ
อาเรย์ ความเข้าใจในการจัดเก็บข้อมูลชนิดอาเรย์ในหน่วยความจำเป็นพื้นฐานที่สำคัญในการเขียน
โปรแกรม
การกำหนดอาเรย์ในภาษาคอมพิวเตอร์ ส่วนมากกำหนดให้มีได้ 2 แบบ คือ
1. อาเรย์ 1 มิติ (One-dimensional Array)
2. อาเรย์ 2 มิติ (Two-dimensional Array)
36
อาเรย์ 1 มิติ (One-Dimensional Array)
อาเรย์ 1 มติ ิ เปน็ แบบทีก่ ารอา้ งอิงหรือการเขา้ ถึงสมาชิกตวั ใด จะใชต้ วั บอกลำดบั (Subscript)
ซง่ึ จำนวนของตัวบอกลำดับของอาเรย์ท้ังหมดจะเรยี กวา่ ความยาว (Length) หรือขนาด (Size) ของ
อาเรย์ เมื่อกำหนด A เป็นแถวลำดับ 1 มิติที่มีสมาชิกต้ังแต่ 1 ถึง n จะได้สมาชิกของ A เป็น A(1) ,
A(2) ,…….., A(n) หรือ A[1] , A[2] ,…… ,A[n] น่ันคือสมาชิกในตำแหน่งท่ี i คือ A(i) หรือ A[i] เมื่อ i คือ
ตัวบอกลำดับการกำหนดตัวแปรให้เป็นแถวลำดับ ในภาษาคอมพิวเตอร์ต่างๆ จะใช้คำส่ังที่แตกต่างกัน
สำหรับในท่ีน้ีจะกำหนด Array A[i..u] หมายถึงกำหนดให้เป็นแถวลำดับ 1 มิติ ที่มีตัวบอกลำดับต่ำสุด
(Lower Bound : LB) เป็น i และตวั บอกลำดบั สูงสดุ (Upper Bound : UB) เป็น u เช่น Array
A[-2..4] หมายถึงแถวลำดับ A จะมีสมาชิกเป็น A[-2], A[-1], A[0], A[1], A[2], A[3] และ A[4]
ตามลำดับ
การหาความยาวของอาเรย์ทต่ี อ้ งการไดจ้ ากสูตร
Length = UB – LB + 1
โดยท่ี UB คือ ตัวบอกลำดับสงุ สดุ
LB คือ ตวั บอกลำดับตำ่ สดุ
ตัวอย่างท่ี 3.1 กำหนด A เป็นอาเรย์ของตัวเลขจำนวนเต็ม จำนวน 5 อีลีเมนต์ มีรายละเอียด
ดังนี้ A[1] = 20, A[2] = 27, A[3] = 120, A[4] = 52, A[5] = 26 ถ้าต้องการหาขนาดของอาเรย์
หาได้ ดงั นี้
จากสตู ร Length = UB - LB + 1
= 5-1+1
=5
ดังนน้ั อาเรย์ A มีขนาดเท่ากับ 5 อีลีเมนต์ ดังนี้
A[1] A[2] A[3] A[4] A[5]
ภาพประกอบท่ี 3.1 อาเรย์ A ในหน่วยความจำ
ตัวอย่างที่ 3.2 บริษัทจำหน่ายอุปกรณ์คอมพิวเตอร์ใช้อาเรย์ B ในการเก็บจำนวนอุปกรณ์
ที่จำหนา่ ยไดแ้ ต่ละปี เรม่ิ ต้งั แต่ปี 2536 ถึงปี 2555 ดังนนั้ การแทนตัวบอกลำดับ โดยจะเริ่มจาก 2536
จากโจทย์ ตัวบอกลำดับสุงสุด(UB) = 2555, ตัวบอกลำดับต่ำสุด(LB) = 2536 ดังน้ันการหา
ขนาดของอาเรย์ B ไดด้ ังน้ี
37
จากสตู ร Length = UB - LB + 1
= 2555 - 2536 + 1
= 20
น่ันคือ อาเรย์ B จะมีท้ังหมด 20 อีลีเมนต์ ซึ่งจะมีตัวเลขบอกลำดับเป็นจำนวนเต็มจาก 2536
ถึง 2555
B[2536] B[2537] B[2538] …….. B[2553] B[2554] B[2555]
ภาพประกอบท่ี 3.2 อาเรย์ B ในหนว่ ยความจำ
ภาษาคอมพิวเตอร์ในแต่ละภาษาเม่ือต้องการนำเอาอาเรย์มาใช้งานต้องมีการกำหนด อาเรย์
โดยทว่ั ไปจะประกอบด้วยรายการ 3 ชนิดคือ ชอื่ อาเรย์ ชนิดขอ้ มูลท่เี ก็บอาเรย์ ตัวบอกลำดับ
ตัวอย่างที่ 3.3 จากตัวอย่างท่ี 3.2 อาเรย์ B สำหรับเกบ็ จำนวนเต็ม โปรแกรมคอมพิวเตอร์
ภาษาตา่ งๆ จะมีการกำหนดอาเรย์ ดังนี้
ภาษาฟอร์แทน (Fortran) INTEGER B(20)
ภาษาพีแอลวัน (PL/1) DECARE B(20) INTEGER;
ภาษาปาสคาล (Pascal) VAR B:ARRAY[1..20] OF INTEGER
ภาษาซี (C) Int B[20];
การคำนวณหาตำแหน่งทอี่ ยู่ของอาเรย์ 1 มติ ิ
เมอื่ พจิ ารณา Array A[1..n] ซง่ึ มสี มาชกิ n ตวั ถ้ากำหนดให้สมาชิกแตล่ ะตัวใช้เน้ือที่ใน
หน่วยความจำ c ไบต์ แล้วแถวลำดับนี้จะใช้เน้ือที่ในหน่วยความจำไบต์และถ้ากำหนดให้ L เป็นที่อยู่
ของสมาชกิ ตัวแรก ( A[1] ) แล้วสามารถหาทอี่ ยูข่ องสมาชิกตวั ท่ี i แทนด้วย loc ( A[ i ] ) ไดด้ ังน้ี
loc ( A[1] ) = L
loc ( A[2] ) = L + c
loc ( A[3] ) = L + 2c
loc ( A[4] ) = L + 3c
38
นนั่ คอื จะไดส้ ูตรการหาท่ีอยู่ของสมาชิกตัวที่ i ดงั นี้
loc ( A[i] ) = L + c( i-1 )
โดยท่ี L คอื ท่ีอยู่ของสมาชิกตัวแรก (A[1])
c คือ การใช้เนื้อทีใ่ นหนว่ ยความจำ (หน่วยเป็นไบต์)
สำหรบั กรณที วั่ ไปคือ Array A[ l...u ]) จะมสี มาชกิ u – i + 1 ตวั นั่นคอื จะไดส้ ตู รการหาทอ่ี ยู่
ของสมาชิกตวั ท่ี i ดงั น้ี
loc ( A[ i ] ) = L + c( i–l )
โดยท่ี L คอื ท่ีอยู่ของสมาชิกตวั แรก (A[1])
c คือ การใชเ้ นื้อทใี่ นหน่วยความจำ (หน่วยเป็นไบต์)
l คือ คา่ ของสมาชิกตัวที่ 1 (A[1]) (ค่าต่ำสดุ )
ตวั อย่างที่ 3.4 กำหนด Array AUTO[1932..1984] จองเน้ือทีใ่ นหน่วยความจำโดย สมาชิกแต่
ละตัวใชเ้ นือ้ ที่ 4 ไบต์ และ loc( AUTO[1932] ) = 205 จงหาท่อี ยขู่ อง AUTO [1980]
loc(AUTO[1980]) = 205 + 4 (1980 – 1932 )
= 205 + 192
= 397
ดงั นัน้ ตำแหน่งท่ีอยู่ของอาเรย์ AUTO[1980] คือ ตำแหนง่ ท่ี 397 ในหนว่ ยความจำ
จากข้อกำหนดจะได้ AUTO จองทใี่ นหนว่ ยความจำดังภาพประกอบท่ี 3.3
ทีอ่ ยู่ ข้อมูล
205 1932
206 1933
207 1934 อาเรย์ AUTO
397 1980
ภาพประกอบท่ี 3.3 อาเรย์ AUTO ในหน่วยความจำ
39
อาเรย์ 2 มิติ (Two-Dimensional Array)
อาเรย์ 2 มิติ เป็นแบบท่กี ารอ้างอิงหรือการเขา้ ถึงสมาชิกตัวใดจะใชบ้ อกลำดับ 2 ตวั โดย
โครงสรา้ งขอ้ มูลแบบน้ี สามารถมองไดใ้ นลกั ษณะของเมตรกิ ซ์ (Matrix) หรอื ตาราง (Table) กล่าวคอื
สมาชกิ แตล่ ะตัวจะถูกจดั เรยี งให้อยเู่ ปน็ แถว (Row) และหลัก (Column) เช่น แถวลำดับ 2 มิติ A ทีม่ ี 3
แถวและ 4 หลกั จะมีสมาชกิ เรยี งกัน ดังนี้
หลักท่ี1 หลกั ที่2 หลกั ท่ี3 หลักที่4
แถวท1ี่ A[1,1] A[1,2] A[1,3] A[1,4]
แถวท2ี่ A[2,1] A[2,2] A[2,3] A[2,4]
แถวท3ี่ A[3,1] A[3,2] A[3,3] A[3,4]
จะเห็นว่าตัวบอกลำดับท่ีกำหนด 2 ตัวน้ัน หมายถึง แถวและหลักโดยตัวแรกคือ แถว และตัว
หลงั คอื หลัก น่นั คอื A[ i , j ] หมายถงึ สมาชกิ ของซงึ่ อยใู่ นแถวท่ี i และหลกั ที่ j
กำหนด Array A[ l1 … u1 , l2 ... u2 ] หมายถงึ A เป็นอาเรย์ 2 มิติ ท่ีมี u1 - l1 + 1 แถว และ
u2 - l2 + 1 หลัก เช่น Array A[ -1 ... 2 , 2 ... 4 ] จะมีสมาชิกเปน็
หลกั ที่1 หลักที่2 หลกั ท่ี3
แถวท1ี่ A[-1,2] A[-1,3] A[-1,4]
แถวท2่ี A[02] A[0,3] A[0,4]
แถวท3ี่ A[1,2] A[1,3] A[1,4]
แถวท4่ี A[2,2] A[2,3] A[2,4]
การแทนทใ่ี นหนว่ ยความจำของอาเรย์ 2 มิตจิ ะเรยี งตดิ ตอ่ กนั ไปเช่นเดยี วกับอาเรย์ 1 มติ ิ
แตก่ ารจัดเรียงจะแบ่งออกเป็น 2 แบบ คือ
1. แบบคอลัมนเ์ มเจอร์ (Colum Major) จะจัดเรยี งสมาชิกในหนว่ ยความจำเรียงกนั ไป
ทลี ะหลัก แสดงการแทนท่ี Array A[1...3 , 1...4] ในหน่วยความจำดงั ภาพประกอบที่ 3.4
(1,1)
(2,1) Column 1
(3,1)
(1,2)
(2,2) Column 2
(3,2)
(1,3)
(2,3) Column 3
(3,3)
(1,4)
(2,4) Column 4
(3,4)
ภาพประกอบท่ี 3.4 การแทนท่ีหนวยความจำของอาเรย์ 2 มติ แิ บบคอลมั น์เมเจอร์ในหน่วยความจำ
40
2. แบบโรเมเจอร์ (Colum Major) จะจดั เรียงสมาชกิ ในหนว่ ยความจำเรยี งกันไป
ทลี ะแถว แสดงการแทนที่ Array A[1...3 , 1...4] ในหน่วยความจำดงั ภาพประกอบท่ี 3.5
(1,1)
(1,2)
(1,3) Row 1
(1,4)
(2,1)
(2,2)
(2,3) Row 2
(2,4)
(3,1)
(3,2)
(3,3) Row 3
(3,4)
ภาพประกอบท่ี 3.5 การแทนท่ีหนวยความจำของอาเรย์ 2 มติ แิ บบโรเมเจอร์ในหนว่ ยความจำ
การคำนวณหาตำแหน่งทอี่ ยขู่ องอาเรย์ 2 มิติ
เมื่อพิจารณาอาเรย์ 2 มติ ิ Array A[1..m,1..n] ซึง่ มสี มาชิกทัง้ หมด mn ตวั โดยกำหนดรูปแบบ
ของแรย์ 2 มติ ิ คือ Array[l1..u1, l2..u2] ซึ่งมี u1-l1+ 1 แถว และ u2+l2+1 หลัก ในหน่วยความจำ
c ไบต์แล้ว อาเรย์น้จี ะใชเ้ นอื้ ท่ี mnc ไบต์ และถา้ กำหนดให้ L เป็นท่ีอย่ขู อง A[1,1] แล้ว การพิจารณา
ตำแหน่งที่อยูข่ อง A[i,j] จะมี 2 ลกั ษณะตามการแทนท่ีดังนี้
แบบคอลัมน์เมเจอร์ loc ( A[i,j] ) = L + c(u1 - l1 + 1) (j-l2) + c(i-l1)
แบบโรวเ์ มเจอร์ loc ( A[i,j] ) = L + c(u2 - l2 + 1) (i-l1) + c(j-l2)
โดยท่ี L คือ ท่ีอยูข่ องสมาชิกตัวแรก (A[1,1])
c คือ การใช้เนอื้ ทใี่ นหน่วยความจำ (หนว่ ยเป็นไบต์)
l1 คอื ขอบเขตต่ำสุดของของแถว
u1 คอื ขอบเขตสูงสุดของแถว
l2 คือ ขอบเขตต่ำสุดของของหลัก
u2 คือ ขอบเขตสูงสดุ ของหลกั
41
ตัวอย่างที่ 3.5 กำหนด Array A[ -3...5 , 3...8] จองท่ีในหน่วยความจำ โดยสมาชิกแต่ละตัว
ใช้เนื้อที่ 4 ไบต์ และ loc( A[-3,3] ) = 4836 จงหาที่อยู่ของ A[ 4 , 5] ท้ังแบบคอลัมน์เมเจอร์ และโรว์
เมเจอร์
แบบคอลัมน์เมเจอร์ : loc(A[4,5]) = 4836 + 4(5-(-3)+1)(5-3) + 4(4-(-3))
= 4836+72+28
= 4936
แบบโรว์เมเจอร์ : loc(A[4,5]) = 4836 + 4(8-3+1)(4-(-3) + 4(5-3)
= 4836+168+8
= 5012
3.2 การเขา้ ถงึ ข้อมูลในอาเรย์
เมอ่ื ให้ A เปน็ อาเรย์แบบตอ่ เน่ืองเกบ็ ข้อมูลอยูใ่ นหน่วยความจำหากต้องการพิมพร์ ายการของ
ข้อมูลของสมาชิกหรือหากต้องการนบั จำนวนสมาชกิ ของอาเรย์ สามารถทำโดยการเขา้ ถึงข้อมลู ในแต่ละ
ตวั ของอาเรย์ A ดงั ข้นั ตอนวิธที ่ี 3.1 แสดงการเข้าถึงข้อมลู ในอาเรย์
Pseudo Code 3.1 : (Traversing a Liner Array) LA is a linear array with
lower bound : LB and upper bound : UB. This is algorithms traverses LA
applying an operation PROCESS to each element of LA.
Step 1 [Initialize counter] Set K = LB.
Step 2 Repeat Step 3 and Step 4 While (K<= UB) do
Step 3 [Visit element.] Apply PROCESS to LA[K].
Step 4 [Increase Counter] Set K = K+1.
[End of Step 2 Loop.]
Step 5 Exit.
จากข้นั ตอนวธิ ที ่ี 3.1 สามารถใช้ repeat-for แทน repeat –while สำหรบั ควบคุมการวนรอบ
ได้ดังนี้
Pseudo Code 3.2 : (Traversing a Liner Array) LA is a linear array with
lower bound :LB and upper bound : UB. This is algorithms traverses LA
applying an operation PROCESS to each element of LA.
Step 1 [Initialize counter] Set K = LB.
Step 2 Repeat for K = LB to UB do
Step 3 [Visit element.] Apply PROCESS to LA[K].
42
Step 4 [Increase Counter] Set K = K+1.
[End of Step 2 Loop.]
Step 5 Exit.
ตัวอย่างท่ี 3.6 กำหนดอาเรย์ AUTO เปน็ อาเรย์ 1 มติ เิ ก็บจำนวนรถทข่ี ายในแต่ละปจี ากปี
1900-2013 ในแต่ละโมดูลต่อไปน้ีจะให้ค่าการทำงานออกมา โดยมีการเข้าถึงข้อมูลในสามารถแต่ละตวั
ของอาเรย์
(1) หาคา่ NUM ซ่ึงเป็นปที ่ีสามารถขายรถได้มากกว่า 300
Step 1 [Initialization Step] Set NUM = 0. Set K = 1900.
Step 2 Repeat for K = 1900 to 2013 do
If AUTO[K] > 300 then
Set NUM = NUM + 1.
Set K = K + 1.
[End of loop].
Step 3 Return.
(2) พิมพป์ ีทข่ี ายและยอดขายท้งั หมด
Step 1 [Initialization Step] Set K = 1900
Step 2 Repeat for K = 1990 to 2013 do
Write K, AUTO[K].
Set K = K + 1.
[End of loop].
Step 3 Return.
3.3 การแทรกและการลบข้อมูลในอาเรย์
เม่ือกำหนดให้ A เป็นอาเรย์ที่อยู่ในหน่วยความจำของคอมพิวเตอร์ การแทรกเป็นการเพ่ิม
ข้อความ 1 ตวั เข้าไปในอาเรย์ A และการลบเป็นการเอาข้อมลู 1 ตวั ออกจากอาเรย์ A
สำหรบั การเพม่ิ ขอ้ มูลในอาเรยใ์ นส่วนท้ายของอาเรย์ทำได้ง่าย หากพื้นทขี่ องหนว่ ยความจำที่
จดั เตรียมไว้ใหญ่พอ ถ้าหากต้องการเพ่ิมข้อมูลเข้าตรงกลางของอาเรย์จะต้องมีการเคล่ือนย้ายสมาชิกลง
ดา้ นลา่ งเพอ่ื ใหเ้ กดิ ชอ่ งว่างสำหรับเพม่ิ สามาชิกใหม่
ในทำนองเดียวกบั การลบขอ้ มูลสมาชิกใดๆ ในอาเรย์ทอี่ ยทู่ ้ายสุดของอาเรยท์ ำได้งา่ ย แตถ่ า้ ต้อง
การลบสมาชิกอาเรยท์ ีอ่ ยตู่ รงกลางของอาเรยจ์ ะต้องมกี ารย้ายสมาชิกตา่ งๆ ท่ีอย่ดู ้านลา่ งขึ้นมา
43
ตัวอยา่ งที่ 3.7 กำหนดให้ TEST เปน็ อาเรย์ขนาด 6 สมาชิก แตม่ ีข้อมลู เก็บอยู่เพียง TEST[1],
TEST[2], TEST[3] ดังภาพประกอบที่ 3.6 (a) ถ้ากำหนดให้ X, Y และ Z เป็นคา่ สมาชกิ อาเรย์ TEST
สามารถเพิ่ม X, Y และ Z ลงในอาเรย์ไดโ้ ดยใช้การกำหนดคา่ ตามลำดบั คอื
TEST[4] = X
TEST[5] = Y
TEST[6] = Z
หลงั จากเพ่มิ ขอ้ มูลจะได้ดงั ภาพประกอบท่ี 3.6 (b)
เมื่อมีคา่ ใหม่เข้ามาอีกไม่สามารถเพม่ิ เข้าไปในอาเรย์ TEST ได้
TEST TEST
1B 1B
2C 2C
3D 3D
4 4X
5 5Y
6 6Z
(a) กอ่ นการเพิ่มขอ้ มลู (b) หลังจากเพม่ิ ขอ้ มูล
ภาพประกอบท่ี 3.6 การเพิ่มขอ้ มูลในอาเรย์
จากภาพประกอบท่ี 3.6 (b) หากต้องการลบข้อมลู D ออกจากอาเรย์ จะต้องมกี ารยา้ ย X, Y
และ Z ข้นึ 1 ตำแหนง่ ดังแสดงในภาพประกอบที่ 3.7
TEST TEST
1B 1B
2C 2C
3D 3X
4X 4Y
5Y 5Z
6Z 6
(a) กอ่ นการลบขอ้ มลู (b) หลังจากลบขอ้ มลู
ภาพประกอบที่ 3.7 การลบข้อมูลในอาเรย์
44
สามารถเขยี นขนั้ ตอนวธิ ใี นการแทรกข้อมลู ITEM ท่ีตำแหน่ง K เข้าสอู่ าเรย์ LA ไดด้ ังนี้
Pseudo Code 3.3 : (Inserting into a linear Array) INSERT(LA,N,K,ITEM)
LA is a linear array with N elements and K is a positive integer that K<=N.
This algorithm inserts an element ITEM into the K position in LA.
Step 1 [Initialize counter] Set J = N.
Step 2 Repeat Step 3 and Step 4 while (J>= K) do
Step 3 [Move J element downward] Set LA[J+1] = LA[J].
Step 4 [Decrease counter] Set J = J -1.
Step 5 [Insert element] Set LA[K] = ITEM.
Step 6 [Reset N] Set N = N + 1.
Step 7 Exit.
สำหรบั ขัน้ ตอนวิธีในการลบสมาชิกท่ี K ออกจากอาเรย์ LA และกำหนดคา่ ใหก้ ับ ITEM ดังนี้
Pseudo Code 3.4 : (Deleting from a linear Array) DELETE(LA,N,K,ITEM)
LA is a linear array with N elements and K is a positive integer that K <=N.
This algorithm deletes the K element from LA.
Step 1 Set ITEM= LA[K].
Step 2 Repeat for J= K to N-1 do
[Move J +1 element upward] Set LA[J] = LA[J+1].
[End of loop].
Step 3 [Reset the number N of element in LA] Set N = N-1.
Step 4 Exit.
3.4 สรปุ
อาเรย์ (Array) หรือแถวลำดับเป็นโครงสร้างที่มีการจองพื้นท่ีหน่วยความจำก่อนล่วงหน้า
เมื่อต้องการใชง้ านนยิ มในการเก็บขอ้ มลู ท่ีต่อเน่ืองและเปน็ ลำดับซง่ึ ชนิดข้อมูลเชิงโครงสร้างท่ีสมาชิก
ของอาเรย์จะต้องมีชนิดเดียวกนั เท่านั้นและมีความสัมพันธ์กันแบบเชิงเส้น โดยเก็บข้อมูลในรูปแบบใดก็
ได้ เช่น ตัวเลข ตัวอักษร ข้อความ จำนวนจริง เป็นต้น รูปแบบของอาเรย์ท่ีนิยมนำมาเขียนโปรแกรม
ประยกุ ตใ์ ช้ คอื อาเรย์ 1 มติ ิ (One-dimensional Array) อาเรย์ 2 มติ ิ (Two-dimensional Array)
อาเรย์ 1 มิติเป็นแบบท่ีการอ้างอิงหรือการเข้าถึงสมาชิกตัวใดจะใช้ตัวบอกลำดับ (Subscript)
ซง่ึ จำนวนของตัวบอกลำดับ ของอาเรยท์ ั้งหมดจะเรียกว่า ความยาว (Length) หรือขนาด (Size) ของ
45
อาเรย์ท่มี ีตัวบอกลำดบั ต่ำสุด (Lower Bound : LB) และตัวบอกลำดบั สงู สดุ (Upper Bound : UB)
ภาษาคอมพวิ เตอรบ์ างภาษาจะกำหนดเฉพาะตวั บอกลำดับสูงสุดเทา่ นนั้ โดยตัวบอกลำดบั ต่ำสดุ จะถกู
กำหนดคงทเี่ ตรยี มไวอ้ ยู่แล้วซงึ่ อาจถกู กำหนดเรม่ิ ต้นไว้ที่ 0 หรือ 1 ขนึ้ อยู่กบั คอมไพเลอร์ของภาษานัน้ ๆ
อาเรย์ 2 มติ ิ เป็นแบบทกี่ ารอ้างอิงหรอื การเข้าถงึ สมาชิกตัวใดจะใช้บอกลำดับ 2 ตวั โดย
โครงสร้างข้อมูลแบบน้ี สามารถมองได้ในลักษณะของเมตริกซ์ (Matrix) หรือตาราง (Table) กล่าวคือ
สมาชิกแต่ละตวั จะถูกจัดเรียงใหอ้ ยูเ่ ปน็ แถว (Row) และหลัก (Column)
อาเรย์ทีจ่ ัดเกบ็ ในหนว่ ยความจำคอมพิวเตอร์จะมีลักษณะเป็นลำดบั ตอ่ เนื่องและใชเ้ นื้อที่ในการ
จัดเก็บข้อมูลสมาชิกของแต่ละตัวในขนาดเท่าๆ กัน ทำให้สามารถเข้าถึงข้อมูลในอาเรย์ได้โดยตรงเม่ือ
ทราบตำแหน่งท่ีต้องการ ผู้ใช้งานสามารถอ้างอิงเพื่อเข้าถึงข้อมูลท่ีต้องการได้ทันที การจัดเก็บข้อมูล
การเข้าถึงข้อมูลในอาเรย์ รวมถึงการแทรกการลบข้อมูลในอาเรย์จะสามารถทำได้ง่าย แต่มีข้อเสียคือ
การใช้พืน้ ที่ถูกจำกดั ไม่ยืดหยนุ่
46
คำถามท้ายบทที่ 3
1. อธิบายความหมายและยกตัวอย่างอาเรยต์ ามความเข้าใจมาพอสงั เขป
2. อธิบายขอ้ ดีและข้อเสยี ของอาเรย์มาพอสังเขป
3. คณุ สมบตั ิของอาเรยป์ ระกอบด้วยอะไรบา้ ง
4. อธบิ ายความแตกตา่ งกันของรูปแบบอาเรย์ 1 มิติกับ อาเรย์ 2 มิติ
5. อธบิ ายข้อแตกตา่ งของการจดั เกบ็ ข้อมูลในอาเรย์ 2 มิติแบบคอลัมนเ์ มเจอร์และแบบโรว์เมเจอร์
พรอ้ มวาดรปู ประกอบ
6.การทเี่ ราสามารถคำนวณท่อี ยเู่ พือ่ หาตำแหนง่ ข้อมลู ที่จัดเก็บในหน่วยความจำแบบอาเรย์ไดเ้ พราะอะไร
จงอธิบาย
7. กำหนดอาเรย์ AAA [5:50], BBB [-5:10] และ CCC[18]
7.1 หาจำนวนอลี เี มนต์ในแต่ละอาเรย์
7.2 กำหนดอาเรย์ AAA จองเนือ้ ที่ในหน่วยความจำโดย สมาชิกแตล่ ะตัวใชเ้ นื้อท่ี 4 ไบต์
และ loc ( AAA[5] ) = 300 จงหาทอี่ ยู่ของ AAA [15], AAA[35] และ AAA[55]
8. กำหนดให้ B เป็นตัวแปรชนิดอาเรย์ 2 มติ ิท่มี กี ารนยิ าม ดังนี้
VAR B : ARRAY [2..54, 1..6] Of Integer; เม่ือกำหนดให้ใชเ้ นือ้ ที่ 6 ไบต์ในการเก็บข้อมลู
ประเภท Integer
จงตอบคำถามต่อไปนี้
8.1 จะตอ้ งใชเ้ นื้อท่ีเท่าใดในการจดั เก็บ B
8.2 ถา้ ใหเ้ ก็บ B ทตี่ ำแหน่งเร่ิมตน้ ที่ 500 ตัวแปร B[34,2] จะจดั เกบ็ ท่ตี ำแหนง่ ใด
9. กำหนดบรษิ ัทเก็บข้อมูลในอาเรย์ YEAR [1955: 2013] ซง่ึ YEAR[K] เป็นท่ีเกบ็ จำนวนพนักงาน
ท่ีเกิดในปี K จงเขยี นข้ันตอนวธิ ีของโมดูสำหรบั งานต่อไปนี้
9.1 พมิ พ์รายการจำนวนพนักงานแต่ละปี
9.2 ค้นหาจำนวน N ของปที ี่ไม่มพี นักงาน
9.3 ค้นหาจำนวน N50 ซึง่ เป็นจำนวนพนกั งานท่ีมอี ายุ 50 ปขี ้นึ ไป
10. จงเขียนขนั้ ตอนวธิ ใี นการอ่านคา่ ตวั เลขจำนวนเต็ม 10 คา่ เพ่ือเกบ็ ไว้ในตัวแปรอาเรย์ แลว้ แสดง
ตำแหน่งของข้อมลู ที่มคี ่ามากท่สี ดุ ทอี่ ยู่ในอารเ์ รยน์ ั้น
ตวั อย่าง
ขอ้ มลู ในอาเรย์ 24 1 9 30 18 0 4 1 3 20
ตำแหน่งของข้อมลู ที่มีคา่ มากทสี่ ดุ คอื อารยต์ ำแหนง่ ที่ 4