• Like
งานคอม ชลธิดา ประยูร ม.5
Upcoming SlideShare
Loading in...5
×

งานคอม ชลธิดา ประยูร ม.5

  • 2,092 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,092
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. หนวยการเรียนรูที่ 1 เทคโนโลยีการสื่อสาร การเรียนรูที่ 1วัตถุประสงคของการจัดการขอมูล หนวยขอมูลและเขต ขอมูลคีย . วัตถุประสงคในการจัดการขอมูล 1. การเก็บขอมูล ตองเก็บขอมูลเพื่อใหสามารถนํากลับมาใชไดในภายหลัง 2. การจัดขอมูล ตองจัดขอมูลใหอยูในรูปแบบที่สามารถเรียกใชงานได อยางมีประสิทธิภาพ 3. การปรับปรุงขอมูล ตองปรับขอมูลใหมีความถูกตองสมบูรณอยูเสมอ 4. การปกปองขอมูล ตองปกปองขอมูลจากการทําลาย ลักลอบใช หรือ แกไขโดยมิชอบ รวมทั้งปกปองขอมูลจากอุบัติเหตุที่อาจเกิดจากวินาศภัย หรือ ความบกพรองภายในระบบคอมพิวเตอร หนวยขอมูล (DATA UNITS)
  • 2. หนวยของขอมูลคอมพิวเตอรสามารถจัดเรียงเปน ลําดับชั้นเล็กไปขนาดใหญไดดังนี้ 1.บิต (bit) เลขฐาน 2 หนึ่งหลักซึ่งมีคาเปน 0 หรือ 1 2.ตัวอักษร (charecter) กลุมของบิตสามารถแทนคาตัวอักษรได ในชุดอักขระ ASCII 1 ไบต ( 8 บิต) แทนตัวอักษรตัว 1 ตัว เชน 01000001 แทนตัวอักษร A ในปจจุบันมี ชุดอักขระที่ใชเลขฐานสอง 16 บิต แทนคาตัวอักษร คือ รหัส Unicode เชน 0000 0000 1110 0110 แทนอักษรตัว ? 3.เขตขอมูล (Field) ซึ่งประกอบดวยกลุมตัวอักษรที่แทนขอเท็จจริง 4.ระเบียน (Record) ระเบียน คือโครงสรางขอมูลที่แทนตัววัตถุชิ้นหนึ่ง เชน ระเบียนขอมูล นักศึกษาเลขทะเบียน 431999999
  • 3. 5.แฟม (file) ตารางที่เปนกลุมของระเบียนที่มีโครงสรางเดียวกัน เชน ตารางการ สั่งซื้อสินคาของลูกคา 6.ฐานขอมูล (Database) กลุมของตาราง (และความสัมพันธ) การเรียงลําดับชั้นของหนวยขอมูลดังนี้ เขตขอมูลคีย (Key field) คือเขตขอมูลที่ใชสําหรับระบุระเบียนขอมูลอยาง เฉพาะเจาะจงขอมูลที่อยูในเขตขอมูลนี้จะไมซ้ํากับระเบียนอื่น ๆ เชน แฟมขอมูลพนักงานอาจใชเลขที่พนักงานเปนตัวระบุระเบียบ
  • 4. การเรียนรูที่ 2 ชนิดขอมูลและประเภทของแฟมขอมูล ชนิดของขอมูล ขอมูลที่ตองการจัดเก็บนั้นอาจจะมีรูปแบบไดหลายอยาง รูปแบบสําคัญ ๆ ไดแก 3.1 ขอมูลแบบรูปแบบ (formatted data) เปนขอมูลที่รวมอักขระซึ่งอาจ หมายถึงตัวอักษร ตัวเลข ซึ่งเปนรูปแบบที่แนนอน ในแตละระเบียน ทุกระเบียนที่อยูใน แฟมขอมูลจะมีรูปแบบที่เหมือนกันหมด ขอมูลที่เก็บนั้นอาจเก็บในรูปของรหัสโดยเมื่ออาน ขอมูลออกมาอาจจะตองนํารหัสนั้นมาตีความหมายอีกครั้ง เชน แฟมขอมูลประวัตินักศึกษา 3.2 ขอมูลแบบขอความ (text)เปนขอมูลที่เปนอักขระในแบบขอความ ซึงอาจ หมายถึงตัวอักษร ตัวเลข สมการฯ แตไมรวมภาพตาง ๆ นํามารวมกันโดยไมมีรูปแบบที่ แนนอนในแตละระเบียน เชน ระบบการจัดเก็บขอความตาง ๆ ลักษณะการจัดเก็บแบบนี้จะ ไมตองนําขอมูลที่เก็บมาตีความหมายอีก ความหมายจะถูกกําหนดแลวในขอความ 3.3 ขอมูลแบบภาพลักษณ (images) เปนขอมูลที่เปนภาพ ซึ่งอาจเปนภาพ กราฟที่ถูกสรางขึ้นจากขอมูลแบบรูปแบบรูปภาพ หรือภาพวาด คอมพิวเตอรสามารถเก็บ ภาพและจัดสงภาพเหลานี้ไปยังคอมพิวเตอรอื่นได เหมือนกับการสงขอความ โดย คอมพิวเตอรจะทําการแปลงภาพเหลานี้ ซึ่งจะทําใหคอมพิวเตอรสามารถที่จะปรับขยาย ภาพและเคลื่อนยายภาพเหลานั้นไดเหมือนกับขอมูลแบบขอความ
  • 5. 3.4 ขอมูลแบบเสียง (audio) เปนขอมูลที่เปนเสียง ลักษณะ ของการจัดเก็บก็จะเหมือนกับการจัดเก็บขอมูลแบบภาพ คือ คอมพิวเตอรจะทําการแปลงเสียงเหลานี้ใหคอมพิวเตอรสามารถนําไป เก็บได ตัวอยางไดแก การตรวจคลื่นหัวใจ จะเก็บเสียงเตนของหัวใจ 3.5 ขอมูลแบบภาพและเสียง (video) เปนขอมูลที่เปนเสียง และรูปภาพ ที่ถูกจัดเก็บไวดวยกัน เปนการผสมผสานรูปภาพและเสียง เขาดวยกัน ลักษณะของการจัดเก็บขอมูล คอมพิวเตอรจะทําการแปลง เสียงและรูปภาพนี้ เชนเดียวกับขอมูลแบบเสียงและขอมูลแบบภาพ ลักษณะซึ่งจะนํามารวมเก็บไวในแฟมขอมูลเดียวกัน
  • 6. ประเภทของแฟมขอมูล ประเภทของแฟมขอมูลจําแนกตามลักษณะของการใชงานไดดังนี้ 6.1แฟมขอมูลหลัก (master file)แฟมขอมูลหลักเปนแฟมขอมูลที่บรรจุ ขอมูลพื้นฐานที่จําเปนสําหรับระบบงาน และเปนขอมูลหลักที่เก็บไวใชประโยชน ขอมูลเฉพาะเรื่องไมมีรายการเปลี่ยนแปลงในชวงปจจุบัน มีสภาพคอนขางคงที่ไม เปลี่ยนแปลงหรือเคลื่อนไหวบอยแตจะถูกเปลี่ยนแปลงเมื่อมีการสิ้นสุดของขอมูล เปนขอมูลที่สําคัญที่เก็บไวใชประโยชน ตัวอยาง เชน แฟมขอมูลหลักของ นักศึกษาจะแสดงรายละเอียดของนักศึกษา ซึ่งมี ชื่อนามสกุล ที่อยู ผลการศึกษา แฟมขอมูลหลักของลูกคาในแตละระเบียนของแฟมขอมูลนี้จะแสดงรายละเอียด ของลูกคา เชน ชื่อสกุล ที่อยู หรือ ประเภทของลูกคา 6.2 แฟมขอมูลรายการเปลี่ยนแปลง (transaction file)แฟมขอมูล รายการเปลี่ยนแปลงเปนแฟมขอมูลที่ประกอบดวยระเบียนขอมูลที่มีการเคลื่อนไหว ซึ่งจะถูกรวบรวมเปนแฟมขอมูลรายการเปลี่ยนแปลงที่เกิดขึ้นในแตละงวดในสวนที่ เกี่ยวของกับขอมูลนั้น แฟมขอมูลรายการเปลี่ยนแปลงนี้จะนําไปปรับรายการใน แฟมขอมูลหลัก ใหไดยอดปจจุบัน ตัวอยางเชน แฟมขอมูลลงทะเบียนเรียนของ นักศึกษา
  • 7. 6.3 แฟมขอมูลตาราง (table file)แฟมขอมูลตารางเปนแฟมขอมูลที่มีคาคงที่ ซึ่ง ประกอบดวยตารางที่เปนขอมูลหรือชุดของขอมูลที่มีความเกี่ยวของกันและถูกจัดใหอยู รวมกันอยางมีระเบียบ โดยแฟมขอมูลตารางนี้จะถูกใชในการประมวลผลกับแฟมขอมูลอื่น เปนประจําอยูเสมอ เชน ตารางอัตราภาษี ตารางราคาสินคา ตัวอยางเชน ตารางราคาสินคาของบริษัทขายอะไหลเครื่องคอมพิวเตอรดังนี้ รหัสสินคา รายชื่อสินคา ราคา 51 จอภาพ 4,500 52 แปนพิมพ 1,200 53 แรม 4 M 4,500 54 แรม 8 M 7,000 55 กระดาษตอเนื่อง 500 56 แฟมคอมพิวเตอร 200 ในแฟมขอมูลนี้จะประกอบดวยระเบียนแฟมขอมูลตารางของสินคาที่มีฟลดตางๆ ไดแก รหัสสินคา รายชื่อ สินคา และราคาสินคาตอหนวย แฟมขอมูลตารางรายการสินคา จะใช รวมกับแฟมขอมูลหลายแฟมขอมูลในระบบสินคา ไดแก แฟมขอมูลคลังสินคา (inventory master file) แฟมขอมูลใบสั่งซื้อของลูกคา (customer order master file) และแฟมขอมูล รายการสิตคาของฝายผลิต (production master file) มีขอควรสังเกตวาแฟมขอมูลตาราง แฟมขอมูลรายการเปลี่ยนแปลง และแฟมขอมูลหลัก ทั้ง 3 แฟม จะมีฟลดที่เกี่ยวกับตัว สินคารวมกัน คือ ฟลดรหัสสินคา (product code) ฟลดรวมกันนี้จะเปนตัวเชื่องโยงระหวาง แฟมขอมูลตารางกับแฟมขอมูลอื่น ๆ ทั้งหมดที่ตองการจะใชคาของฟดลรายชื่อสินคา (product description) และราคาสินคา (product price) จากแฟมขอมูลตาราง
  • 8. การจัดแฟมขอมูลแบบนี้จะทําใหประหยัดเนื้อที่ในอุปกรณเก็บขอมูล ของแฟมขอมูลหลัก กลาวคือในแฟมขอมูลหลักไมตองมี 2 ฟลด คือ ฟลด รายการสินคาและฟลดราคาสินคา มีแตเพียงฟลดรหัสสินคาก็เพียงพอแลว เมื่อใดที่ตองการใชฟลดรายการสินคาในการแสดงผลก็อานคาออกมาจาก แฟมขอมูลตารางได นอกจากนั้นยังเปนการลดความซ้ําซอนของขอมูลและเมื่อ ผูใชระบบตองการเปลี่ยนแปลงรายการสินคาหรือราคาสินคาก็จะเปลี่ยนใน แฟมขอมูลตารางทีเดียว โดยไมตองไปเปลี่ยนแปลงในแฟมขอมูลอื่น 6.4 แฟมขอมูลเรียงลําดับ (sort file)แฟมขอมูลเรียงลําดับเปนการ จัดเรียงระเบียนที่จะบรรจุในแฟมขอมูลนั้นใหม โดยเรียงตามลําดับคาของฟลด ขอมูลหรือคาของขอมูลคาใดคาหนึ่งในระเบียนนั้นก็ได เชน จัดเรียงลําดับตาม วันเดือนป ตามลําดับตัวอักขระเรียงลําดับจากมากไปหานอยหรือจากนอยไปหา มาก เปนตน แฟมขอมูลรายงาน (report file)เปนแฟมขอมูลที่ถูกจัดเรียงระเบียบ ตามรูปแบบของรายงานที่ตองการแลวจัดเก็บไวในรูปของแฟมขอมูล ตัวอยาง เชน แฟมขอมูลรายงานควบคุมการปรับเปลี่ยนขอมูลที่เกิดขึ้นในขณะปฏิบัติงาน แตละวัน
  • 9. การเรียนรูที่ 3 ลักษณะการประมวลผลขอมูล ขอมูลและการประมวลผลขอมูล ขอมูล คือขอเท็จจริงที่เราสนใจ สวน สารสนเทศ คือขอมูลที่ผานการ ประมวลผลดวยวิธีการที่เหมาะสมถูกตอง จนไดรูปแบบผลลัพธ ตรงความตองการของ ผูใช ขอมูลที่จะนํามาประมวลผลใหเปนสารสนเทศ จะตองมีคุณสมบัติพื้นฐานดังตอไปนี้ ความถูกตอง หากมีการเก็บรวบรวมขอมูลและขอมูลเหลานั้นเชื่อถือไมได จะทําให เกิดผลเสียหายมาก ผูใชจะไมกลาอางอิงหรือนําเอาไปใชประโยชน ซึ่งเปนเหตุใหการ ตัดสินใจของผูบริหารขาดความแมนยํา และมีโอกาสผิดพลาดได โครงสรางขอมูลที่ ออกแบบตองคํานึงถึงกรรมวิธีการดําเนินงานเพื่อใหไดความถูกตองแมนยํามากที่สุด โดย ปกติความผิดพลาดของการประมวลผลสวนใหญ มาจากขอมูลที่ไมมีความถูกตองซึ่งมี สาเหตุมาจากคนหรือเครื่องจักร การออกแบบระบบจึงตองคํานึงถึงในเรื่องนี้ ความรวดเร็วและเปนปจจุบัน การไดมาของขอมูลจําเปนตองใหทันตอความตองการ ของผูใช มีการตอบสนองตอผูใชไดเร็ว ตีความหมายสารสนเทศไดทันตอเหตุการณหรือ ความตองการ มีการออกแบบระบบการเรียกคนและรายงาน ตามความตองการของผูใช ความสมบูรณ ความสมบูรณของสารสนเทศขึ้นกับการรวบรวมและวิธีการทางปฏิบัติ ใน การดําเนินการจัดทําสารสนเทศ ตองสํารวจและสอบถามความตองการของผูใช เพื่อให ไดขอมูลที่มีความสมบูรณเหมาะสม
  • 10. ความชัดเจนกะทัดรัด การจัดเก็บขอมูลตองใชพื้นที่ในการจัดเก็บขอมูลมาก จึง จําเปนตองออกแบบโครงสรางขอมูลใหกะทัดรัด สื่อความหมายได มีการใชรหัสหรือยอขอมูล ใหเหมาะสม เพื่อที่จะจัดเก็บเขาไวในระบบคอมพิวเตอร ความสอดคลอง ความตองการเปนเรื่องสําคัญ ดังนั้นจึงตองมีการสํารวจเพื่อหาความ ตองการของหนวยงานและองคการ ดูสภาพการใชขอมูล ความลึกหรือความกวางของ ขอบเขตขอมูล ที่สอดคลองกับความตองการ ในการนําขอมูลไปใชประโยชน หรือการทําขอมูลใหเปนสารสนเทศ ที่จะนําไปใช ประโยชนได จําเปนตองมีการประมวลผลขอมูลกอน การประมวลผลขอมูล เปนกระบวนการที่ มีกระบวนการยอยหลายอยาง ประกอบกันคือ การรวบรวมขอมูล การแยกแยะ การตรวจสอบความถูกตอง การคํานวณ การจัดลําดับหรือการเรียงลําดับ การรายงานผล การสื่อสารขอมูลหรือการแจกจายขอมูลนั้น การประมวลผลขอมูล จึงเปนกิจกรรมที่มีความสําคัญ เพราะขอมูลที่มีอยู รอบๆ ตัวเรามีเปน จํานวนมากในการใชงานจึงตองมีการประมวลผล เพื่อใหเกิดประโยชน กิจกรรมหลักของการ ใหไดมาซึ่งสารสนเทศ จึงประกอบดวยกิจกรรมการ เก็บรวบรวมขอมูล ซึ่งตองมีการตรวจสอบ ความถูกตองดวย กิจกรรมการประมวลผลซึ่งอาจจะเปนการแบงแยกขอมูล การจัดเรียงขอมูล การคํานวณ และกิจกรรมการเก็บรักษาขอมูลซึ่งอาจตอง มีการทําสําเนา ทํารายงาน เพื่อ แจกจาย
  • 11. วิธีการประมวลผล มี 2 ลักษณะ คือ (1) การประมวลผลแบบเชื่อมตรง (online processing) หมายถึง การทํางานในขณะที่ขอมูลวิ่งไปบนสายสัญญาณเชื่อมตอจากเครื่อง ปลายทาง (terminal) ไปยังฐานขอมูลของเครื่องหลักที่ใชในการประมวลผล การประมวลผลแบบเชื่อมตรงจึงเปนการประมวลผลโดยทันทีทันใด เชน การ จองตั๋วเครื่องบิน การซื้อสินคาในหางสรรพสินคา การฝากถอนเงินเอทีเอ็ม การ ประมวลผลแบบเชื่อมตรงจึงเปนวิธีที่ใชกันมากวิธีหนึ่ง (2) การประมวลผลแบบกลุม (batch processing) หมายถึง การประมวลผลในเรื่องที่สนใจเปนครั้งๆ เชน เมื่อตองการทราบขอมูล ผลสํารวจความนิยมของประชาชนตอการเลือกตั้งสมาชิกสภาผูแทน หรือที่ เรียกวา โพล (poll) ก็มีการสํารวจขอมูลเพื่อเก็บรวบรวมขอมูล เมื่อเก็บรวบรวม ขอมูลไดแลวก็นํามาปอนเขาเครื่องคอมพิวเตอร แลวนําขอมูล นั้นมาประมวลผล ตามโปรแกรมที่ไดกําหนดไว เพื่อรายงานหรือสรุปผลหาคําตอบ กรณีการ ประมวลผลแบบกลุมจึงกระทําในลักษณะเปนครั้งๆ เพื่อใหไดผลลัพธโดย จะตองมีการรวบรวมขอมูลไวกอน
  • 12. การเรียนรูที่ 4 แฟมโปรแกรมและแฟมขอมูล แฟมโปรแกรมและแฟมขอมูล ถาจะแบงประเภทของแฟมในคอมพิวเตอรอีกนัยหนึ่ง อาจแบงเปนแฟม โปรแกรม และ แฟมขอมูล แฟมโปรแกรมประกอบดวยชุดคําสั่งตางๆ ที่ทํางานอยาง ใดอยางหนึ่งเชน โปรแกรมประมวลคํา (word processor) ใชสําหรับพิมพเอกสาร และจัดรูปแบบขอความ และโปรแกรมบีบอัดขอมูล (compression utility) ใช สําหรับบีบอัดขอมูลที่มีขนาดเล็กลง เปนตน แฟมที่จัดเก็บหรือบันทึกโดยโปรแกรมเหลานี้ จัดเปนประเภทแฟมขอมูล ซึ่ง ตามปกติจะมีสวนขยาย (file extension) เปนตัวบอกประเภทเชน เอกสารที่สราง ดวยโปรแกรมประมวลคํา Microsoft Word จะมีสวนขยายหลักเปน .doc สวน แฟมขอมูลที่สรางดวยโปรแกรมบีบอัดขอมูล Winzip จะมีสวนขยายเปน .zip เปน ตน ที่กลาววาสวนขยายหลักหมายความวา โปรแกรมหนึ่งอาจสรางแฟมขอมูลที่มี สวนขยายไดหลายหยาง ตัวอยางโปรแกรมลักษณะนี้ไดแก Microsoft Word2000 ซึ่งสามารถสรางแฟมขอมูลที่มีสวนขยายเปน .doc .htm .html .rtf .txt .mcw และ .wps แต จะเปนสวนขยายหลักเปน .doc
  • 13. แฟมขอมูลบางประเภทสรางและเปดดวยโปรแกรมใดโปรแกรมหนึ่งโดยเฉพาะ เชนแฟมที่สรางดวยโปรแกรมแตงภาพ Adobe Photoshop ซึ่งมีสวนขยายเปน .psd ในขณะที่แฟมขอมูลบางประเภทเปนประเภทที่มีรูปแบบมาตรฐานที่สามารถสรางและเปด ไดโดยโปรแกรมตางๆ เชน ประเภทแฟม Bitmap ( BMP) Graphics Interchange Format (GIF) และ Joint Photographic Experts Group (JPEG) สามารถสรางและเปด แกไขไดโดย Windows PaintBrush , Adobe Photoshop หรือ Microsoft Photo Editor ก็ได แฟมที่มีรูปแบบมาตรฐานเหลานี้มีประโยชนมากในการแลกเปลี่ยนขอมูลระหวาง โปรแกรมตางๆ แฟมโปรคแกรมที่ประกอบดวยชุดคําสั่งที่ทํางานได ไดแกประเภท .exe , .com , .bat , .dll
  • 14. หนวยการเรียนรูที่ 2 โครงสรางขอมูล การเรียนรูที่ 5 ชนิดของโครงสรางขอมูล ประเภทของโครงสรางขอมูล แบงออกเปน 2 ประเภท คือ - โครงสรางขอมูลทางกายภาพ (Physical Data Structure)
  • 15. เปนโครงสรางขอมูลที่ใชโดยทั่วไปในภาษาคอมพิวเตอร แบงออกเปน 2 ประเภท 1.ขอมูลเบื้องตน (Primitive Data Types) - จํานวนเต็ม (Integer) - จํานวนทศนิยม (Floating point) - ขอมูลบูลีน (Boolean) - จํานวนจริง (Real) - ขอมูลอักขระ (Character) 2.ขอมูลโครงสราง (Structure Data Types) - แถวลําดับ (Array) - ระเบียนขอมูล (Record) - แฟมขอมูล (File)
  • 16. - โครงสรางขอมูลทางตรรกะ (Logical Data Structure) เปนโครงสรางขอมูลที่เกิดจากการจินตนาการของผูใช เพื่อใชในการแกปญหาใน โปรแกรมที่สรางขึ้น แบงเปน 2 ประเภท 1. โครงสรางขอมูลแบบเชิงเสน (Linear Data Structure) ความสัมพันธของขอมูลจะเรียงตอเนื่องกัน - ลิสต (List) - สแตก (Stack) - คิว (Queue) - สตริง (String) 2. โครงสรางขอมูลแบบไมเชิงเสน (Non-Linear Data Structure) ขอมูลแตละตัวสามารถมีความสัมพันธกับขอมูลอื่นไดหลายตัว - ทรี (Tree) - กราฟ (Graph)
  • 17. 3. การดําเนินการกับโครงสรางขอมูล(Data Structure Operation) วิธีดําเนินการกับขอมูลที่นิยมใชกันมากมี 4 แบบ คือ 1. การเขาถึงเรคคอรด (Traversing) 2. การคนหา (Searching) 3. การเพิ่ม (Inserting) 4. การลบ (Deleting) ยังมีการจัดการกับขอมูลอีก 2 อยาง คือ 1. การเรียงขอมูล (Sorting) 2. การรวมขอมูล (Merging) 4. การแทนที่ขอมูลในหนวยความจํา มีอยู 2 วิธี คือ การแทนที่ขอมูลแบบสแตติก (Static Memory Representation) เปน การแทนที่ขอมูลที่มีการจองเนื้อที่แบบคงที่แนนอน ตองมีการกําหนดขนาดกอน การใชงาน แตมีขอเสีย คือ ไมสามารถปรับขนาดใหเพิ่มขึ้นหรือลดลงได โครงสรางขอมูลที่ มีการแทนที่หนวยความจําหลักแบบสแตติก คือแถวลําดับ (Array) การแทนทีขอมูลแบบไดนามิก (Dynamic Memory Representation) เปน การแทนที่ขอมูลที่ไมตองจองเนื้อที่ ขนาดของเนื้อที่ยืดหยุนได ตามความตองการ ของผูใช โครงสรางขอมูลที่มีการแทนที่หนวยความจําหลักแบบไดนามิก คือ ตัวชี้หรือพอย เตอร (Pointer)
  • 18. 5. ลักษณะของโปรแกรมแบบที่มีโครงสรางที่ดี 5.1 โครงสรางโปรแกรมแบบคําสั่งตามลําดับ เปน โครงสรางพื้นฐานที่ประกอบดวยคําสั่งทั่วๆไป เปนโครงสรางที่มีลักษณะการ ทํางานแบบเรียงลําดับ คือ จะทํางานตั้งแตตนจนจบโดยไมมีการขามขั้นตอนใดๆ 5.2 โครงสรางโปรแกรมแบบมีการตัดสินใจ (Decision) มี การตรวจสอบเงื่อนไข เพื่อตัดสินใจวาจะทําการประมวลผลสวนใด โดยผลลัพธ ของเงื่อนไขจะมีคาของความเปนไปไดอยู 2 ลักษณะ คือ จริงและเท็จ เทานั้น 5.3 โครงสรางโปรแกรมแบบเปนวงจรปด (Loop) มีลักษณะการทํางานซ้ําๆกัน อยูในสวนใดสวนหนึ่งของโปรแกรม 6. อัลกอริทึม (Algorithm) อัลกอรึทึม คือ วิธีการแกปญหาตางๆ อยางมีระบบ มีลําดับขั้นตอนตั้งแตตนจน ไดผลลัพธ สามารถเขียนไดหลายแบบ การเลือกใชตองเลือกใชขั้นตอนวิธีที่เหมาะสม กระชับ และรัดกุม อัลกอริทึมที่นิยมใชกันมาก ไดแก 1. อัลกอริทึมแบบแตกยอย (Divide and conquer) 2. อัลกอริทึมแบบเคลื่อนที่ (Dynamic Programming) 3. อัลกอริทึมแบบทางเลือก (Greedy Algorithm)
  • 19. การเขียนผังงาน (Flowchart) Flow Chart เปนการอธิบายขั้นตอนการประมวลผลโดยใชสัญลักษณในการ แสดงความหมาย การใชกรอบรูปสัญลักษณที่สื่อความหมาย อธิบายขั้นตอนการ ทํางาน การเขียนรหัสเทียม (Pseudo Code) Pseudo Code การอธิบายขั้นตอนการประมวลผลโดยใชวลีภาษาอังกฤษในการ แสดงอธิบาย ใชคําสั้นๆ กะทัดรัด อธิบายขั้นตอนการทํางานของโปรแกรม พัฒนาการของภาษาโปรแกรม - ภาษาเครื่อง (Machine Language) - ภาษาแอสเซมบลี (Assembly Language) - ภาษาระดับสูง (High Level Language) - ภาษายุคที่ 4 (Fourth Generation Language หรือ 4GL) การบํารุงรักษาโปรแกรม (Program Maintenance) หมาย ถึง การแกไขขอผิดพลาดที่พบระหวางการทดสอบหรือระหวางการใชงาน ซึ่งอาจเปนการเปลี่ยนขอมูลที่ตองการใชใหมการปรับปรุงขอมูล ใหทันเหตุการณอยู เสมอ การปรับเปลี่ยนโครงสรางบนหนาจอ เปนตน
  • 20. การเรียนรูที่ 6 ลักษณะของขอมูล ลักษณะของขอมูลที่ดี ขอมูลที่ดีควรเปนขอมูลที่มีคุณลักษณะดังตอไปนี้ • ขอมูลที่มีความถูกตองและเชื่อถือได (accuracy) ขอมูลจะมีความถูกตองและเชื่อถืไดมาก นอยเพียงใดนั้น ขึ้นกับวิธีการที่ใชในการควบคุมขอมูลนําเขา และการควบคุมการประมวลผล การควบคุมขอมูลนําเขาเปนการกระทําเพื่อใหเกิดความมั่นใจวาขอมูลนําเขามีความถูกตอง เชื่อถือได เพราะถาขอมูลนําเขาไมมีความถูกตองแลวถึงแมจะใชวิธีการวิเคราะหและ ประมวลผลขอมูลที่ดีเพียงใด ผลลัพธที่ไดก็จะไมมีความถูกตอง หรือนําไปใชไมได ขอมูล นําเขาจะตองเปนขอมูลที่ผานการตรวจสอบวาถูกตองแลว ขอมูลบางอยางอาจตองแปลงใหอยู ในรูปแบบที่เครื่องคอมพิวเตอรสามารถเขาใจไดอยางถูกตอง ซึ่งอาจตองพิมพขอมูลมา ตรวจเช็คดวยมือกอน การประมวลผลถึงแมวาจะมีการตรวจสอบขอมูลนําเขาแลวก็ตาม ก็อาจ ทําใหไดขอมูลที่ผิดพลาดได เชน เกิดจากการเขียนโปรแกรมหรือใชสูตรคํานวณผิดพลาดได ดังนั้นจึงควรกําหนดวิธีการควบคุมการประมวลผลซึ่งไดแก การตรวจเช็คยอดรวมที่ไดจากการ ประมวลผลแตละครั้ง หรือการตรวจสอบผลลัพธที่ไดจากการประมวลผลดวยเครื่อง คอมพิวเตอรกับขอมูลสมมติที่มีการคํานวณดวยวามีความถูกตองตรงกันหรือไม • ขอมูลตรงตามความตองการของผูใช (relevancy) ไดแก การเก็บเฉพาะขอมูลที่ผูใช ตองการเทานั้น ไมควร เก็บขอมูลอื่น ๆ ที่ไมจําเปนหรือไมเกี่ยวของกับการใชงาน เพราะจะทํา ใหเสียเวลาและเสียเนื้อที่ในหนวยเก็บขอมูล แตทั้งนี้ขอมูลที่เก็บจะตองมีความครบถวน สมบูรณดวย • ขอมูลมีความทันสมัย (timeliness) ขอมูลที่ดีนั้นนอกจากจะเปนขอมูลที่มีความถูกตอง เชื่อถือไดแลวจะ ตองเปนขอมูลที่ทันสมัย ทั้งนี้เพื่อใหผูใชสามารถนําเอาผลลัพธที่ไดไปใชได ทันเวลา นั่นคือจะตองเก็บขอมูลไดรวดเร็วเพื่อทันความตองการของผูใช
  • 21. การเรียนรูที่ 7 การเรียงลําดับขอมูล การเรียงลําดับขอมูล การเรียงลําดับขอมูลเปนเรื่องสําคัญมากเรื่องหนึ่งเนื่องจากทําใหผูตองการใชขอมุลเชน ผู บริหาร,ผูปฏิบัติงาน (พนักงาน) สามารถทําความเขาใจกับขอมูลหรือทําการคนหาขอมูลได งายและเร็วยิ่งขึ้นตามที่ตองการ ประเภทของการจัดการจัดเรียงขอมูลในระบบคอมพิวเตอร แบงเปน 2 ประเภทคือ 1. Internal Sorting คือ การเรียงลําดับขอมูลโดยเก็บไวในหนวยความจําหลัก และ ขอมูลของสมาชิกจะถูกเก็บ อยูในโครงสรางอะเรย 2. External Sorting คือ การเรียงลําดับขอมูลโดยเก็บไวในหนวยความจําสํารอง ขอมูล สวนใหญมีจํานวนมาก จึงไม สามารถเก็บไวในหนวยความจําหลักไดทั้งหมด ในหัวขอการเรียงลําดับ นี้จะอธิบายวิธีการเรียงลําดับขอมูลในแตละวิธีโดยสรุปอยางยอ ๆ เพื่อใชเปนแนวทางในการศึกษาใน ระดับชั้นสูงขึ้นไป คงจะไมไดกลาวถึงวิธีการขั้นตอนใน การจัดเรียงอยางละเอียดแตจะพยายามชี้ใหเห็นถึงจุดเดนตาง ๆ ของการจัด เรียงลําดับใน แตละวิธี วิธีหรือชนิดของการเรียงลําดับ มีวิธีตาง ๆ ที่มักจะไดพบโดยทั่วไปดังนี้ 1. SELECTION SORT 2. INSERTION SORT / LINEAR INSERTION SORT 3. BUBBLE SORT 4. SHELL SORT 5. BUCKET SORT /RADIX SORT 6. QUICK SORT 7. HEAP SORT / TREE SORT
  • 22. 1. การเรียงลําดับแบบเลือก (Selection Sort) เปนวิธีที่งายที่สุดในการเรียงลําดับขอมูล โดยเริ่มจาก - หาตําแหนงของขอมูลที่มีคานอยที่สุดแลวสลับคาของตําแหนงขอมูลนั้นกับคาขอมูลใน ตําแหนง A(1) จะได A(1) มีคานอยที่สุด - หาตําแหนงของขอมูลที่มีคานอยที่สุดในกลุม A(2), A(3),....,A(n) แลวทํากับสลับคา ขอมูลในตําแหนง A(2) อยางนี้เรื่อยไปจน กระทั่งไมเกิน N-1 รอบ ก็จะไดขอมูลที่เรียงลําดับ จากนอยไปมาก 2. การเรียงลําดับแบบแทรก (Insertion Sort) หลักการ คือ 1. อานขอมุลที่ตองการเรียงลําดับเขามาทีละตัวโดยเริ่มจากตัวแรกกอน และหาตําแหนง ของขอมูลที่ควรจะอยู 2. หาที่วางสําหรับขอ 1. 3. Insert หรือแทรกขอมูล ณ ตําแหนงในขอ 2. 3. การเรียงลําดับแบบบับเบิล (Bubble Sort) วิธัการเรียงลําดับแบบบับเบิลจะทําการเปรียบเทียบขอมูลที่อยูในตําแหนงที่ติดกัน ถาขอมูล ไมอยูใลําดับที่ถูกตอง ก็จะทําการสลับตําแหนงของขอมูลที่เปรียบเทียบโดยที่การ เปรียบเทียบจะเริ่มที่ตําแหนงที่ 1 กับตําแหนงที่ 2 กอน ตอไปนี้เทียบกับ ตําแหนงที่ 2 และ ตําแหนงที่ 3 จนถึงตําแหนงที่จัดเรียงแลว จากนั้นจะกลับไปเริ่มตนการเปรียบเทียบอีก จนกระทั่งจัดเรียง เรียบรอยหมดทุกตําแหนง ในวิธีแบบ Bubble Sort คาในการเปรียบเทียบที่นอยที่สุดหรือมากที่สุด จะลอยขึ้นขางบน เหมือนกับฟองอากาศ
  • 23. 4. การรียงลําดับแบบเชลล(shell sort) เปนรูปแบบของการ sort ขอมูลโดยการนําเอาขอดีของการคนหาขอมูลแบบ แทรกและ แบบเลือกและหลีกเลี่ยง การเกิดปญหาของทั้งแบบแทรกและแบบเลือก ซึ่งการ เปรียบเทียบขอมูลในการเรียงลําดับแบบแทรก โดยการเปรียบเทียบ ขอมูลที่อยูไกล ออกไป ซึ่งจะทําใหเราสามารถเรียงดับขอมูลในตําแหนงที่อยูไกลออกไปหลังจากนั้นก็ จะเรียงลําดับขอมูล ที่อยูใกลกันเขามา(กวาในครั้งแรก) และความหางของขอมูลที่ เปรียบเทียบก็จะนอยลงจนเหลือ 1 วิธีนี้คิดคนเมื่อป ค.ศ.1959 โดย ดี.แอล.เชลล(D.L.SHELL) เรียกวา การเรียงลําดับ แบบเชลล(shell sort) 5. การเรียงลําดับโดยการใชฐานเลข(radix sort) การเรียงลําดับแบบนี้การเรียงลําดับ จะอยูบนพื้นฐานของการแทนตําแหนงของตัว เลขที่ตองการนํามาเรียงลําดับ จะเริ่มจากตัวที่มีเลขนัยสําคัญสูงที่สุด ดําเนินจนกระทั่ง ถึงตัวเลขที่มีเลขนัยสําคัญต่ําสุด การเรียงลําดับในวิธีนี้การเรียงลําดับ จะเรียงจากตัว เลขที่มีนัยสําคัญนอยที่สุดกอน เมื่อตัวเลขทั้งหมดถูกนํามาเรียงลําดับตามเลข นัยสําคัญที่สูงขึ้น ตัวเลขที่เหมือนกัน ในตําแหนงนน จะตางกันในตําแหนงของเลข นัยสําคัญที่นอยกวา การประมวลผลแบบนี้จะประมวลผลกับขอมูลทั้งหมดได โดยที่ไม ตองมีการแบงขอมูลแบบกลุมยอย
  • 24. 6. การเรียงลําดับอยางเร็ว(quick sort) ถูกสรางและตั้งชื่อโดย ซี.เอ.อาร.ฮารเวร (C.A.R HOARE) การเรียงลําดับอยางเร็ว จะ แบงขอมูลเปนสองกลุม โดยใน การจัดเรียงจะเลือกขอมุลตัวใดตัวหนึ่งออกมา ซึ่งจะ เปนตัวที่แบงขอมูลออกเปนสองกลุม โดยกลุมแรกจะตองมีขอมูลนอยกวา ตัวแบง และ กลุมที่มีขอมูลนอยกวาตัวแบง และอีกกลุมจะมีขอมูลที่มากกวาตัวแบง ซึ่งเราเรียกตัว แบงวา ตัวหลัก(pivot) ในการเลือกตัวหลักจะมีอิสระในการเลือกขอมูลตัวใดก็ไดที่เรา ตองการ การเรียงลําดับแบบเร็วเหมาะกับขอมูลที่มีการเรียกซ้ํา 7.การเรียงลําดับฮีพ(heapsort) เปนการเรียงลําดับที่อยูบนพื้นฐานบนพื้นฐานของโครงสรางแบบไบนารี จะดําเนินการ 2 ขั้นตอน คือ 1. การจัดขอมูลในอะเรยใหสอดคลองกับความตองการของฮีพ 2. การขจัดหนือการเคลื่อนยายขอมูลในตําแหนงสูงสุดหรือตําแหนงยอดของของฮี พออกไปและสนับสนุนขอมูลขอมูล ตัวอื่นไปแทนตําแหนงนั้น
  • 25. การเรียนรูที่ 8 การคนหาขอมูล การคนหาขอมูล (searching) การคนหาคําตอบ หรือการคนหาขอมูลในทางคอมพิวเตอรมักจะกระทําบน โครงสรางขอมูลแบบตนไม และกราฟ ทั้งนี้เพราะโครงสรางขอมูลในลักษณะนี้ สามารถทําใหการคนหาทําไดสะดวกและสามารถพลิกแพลงการคนหาไดงาย ใน ความเปนจริงแลว การคนหาขอมูลบางครั้งสามารถกระทําบนโครงสรางขอมูลชนิด อื่นก็ไดเชน อาเรย แสตก และคิว แตการจัดขอมูลในโครงสรางเชนนี้ มีขอจํากัดใน การคนหาขอมูลมาก การคนหาทําไดแบบเรียงลําดับ(Sequencial Search) เทานั้น ซึ่งใชไดกับขอมูลที่มีขนาดเล็ก ดังนั้นในการคนหาขอมูลที่มีขนาดใหญ กอนการ คนหา หรือระหวางการคนหา ขอมูลที่จะถูกคนจะตองถูกจัดใหอยูในรูปแบบของ ตนไม หรือกราฟเทานั้น การคนหาขอมูลบนโครงสรางตนไมและกราฟสามารถจํ าแนกได 2 แบบคือ การคนหาแบบไบลด(Blind Search) และการคนหาแบบฮิวริ สติก(Heuristic Search)
  • 26. การคนหาแบบไบลด(Blind Search) การคนหาแบบไบลด(Blind search) เปนการคนหาแบบที่เดินทางจากโหนดหนึ่งไปยัง อีกโหนดหนึ่ง โดยอาศัยทิศทางเปนตัวกําหนดการคนหา ไมตองมีขอมูลอะไรมาชวยเสริม การตัดสินใจวาจะเดินทางตอไปอยางไร หรือกลาวอยางงาย ๆ คือการจะหยิบขอมูลใดมา ชวยในการคนหาตอไป ไมตองอาศัยขอมูลใด ๆ ทั้งสิ้น นอกจากทิศทางซึ่งเปนรูปแบบ ตายตัว การคนหาแบบไบลดสามารถแบงยอยไดดังนี้ คือ การคนหาทั้หมด และการคนหา บางสวน - การคนหาทั้งหมด(exhaustive search) คือ การคนหาทั้งหมดของปริภูมิสถานะ - การคนหาบางสวน (partial search) การคนหาเพียงบางสวนของปริภูมิสถานะ ซึ่งใน ความเปนจริงการคนหาสวนมากใชการคนหาเฉพาะบางสวนเทานั้นเนื่องจากปริภูมิสถานะมัก มีขนาดใหญ เทาใหไมสามารถคนหาไดทั้งหมด ดังนั้นจึงมีความเปนไปไดวาคําตอบที่ได อาจไมใชคําตอบที่ดีที่สุด การคนหาแบบนี้สามารถแบงไดเปน 2 ประเภทคือ การคนหาแบบ ลึกกอน(Depth first search) และการคนหาแบบกวางกอน (Breadth first search) การคนหาแบบลึกกอน(Depth first search) การคนหาแบบลึกกอนเปนการคนหาทีกําหนดทิศทางจากรูปของโครงสรางตนไม ที่ ่ เริ่มตนจากโหนดราก(Root node) ที่อยูบนสุด แลวเดินลงมาใหลึกที่สุด เมื่อถึงโหนดลางสุด (Terminal node) ใหยอนขึ้นมาที่จุดสูงสุดของกิ่งเดี่ยวกันที่มีกิ่งแยกและยังไมไดเดินผาน แลวเริ่มเดินลงจนถึงโหนดลึกสุดอีก ทําเชนนี้สลับไปเรื่อยจนพบโหนดที่ตองการหาหรือ สํารวจครบทุกโหนดแลวตามรูปที่ 1 การคนหาแบบลึกกอนจะมีลําดับการเดินตามโหนดดัง ตัวเลขทีกํากับไวในแตละโหนด ่
  • 27. รูปที่ 1 ลําดับการเดินทางบนโหนดของการคนหาแบบลึกกอนบนโครงสรางตนไม ดังทีไดกลาวมาแลววา โครงสรางขอมูลที่ใชสําหรับการคนหานี้สามารถใชกับ ่ โครงสรางกราฟไดดวย โดยอาศัยหลักการเดียวกัน แตสําหรับการเดินทางบนกราฟนั้นจะ ไมมีโหนดลึกสุดดังนั้นการเดินทางบนกราฟจะตองปรับวิธีการเปนดังนี้ โดยเริ่มจาก โหนดเริ่มตน จากนั้นใหนําโหนดที่อยูติดกับโหนดที่กําลังสํารวจอยู(ที่ยังไมไดทําการ สํารวจและยังไมไดอยูในแสต็กมาใสแสต็ก) มาเก็บไวในสแต็กเมื่อสํารวจโหนดนั้นเสร็จ ให พอพ(pop) ตัวบนสุดของโหนดออกมาทําการสํารวจ แลวนําโหนดขางเคียงทั้งหมดที่ยัง ไมไดสํารวจมาตอทายแสต็ก แลวพอพตัวบนสุดออกมาสํารวจ ทําเชนนี้เรื่อย ๆ จนกระทั้ง พบโหนดที่ตองการ หรือสํารวจครบทุดโหนด
  • 28. รูปที่ 2 โครงสรางขอมูลแบบกราฟ การสํารวจจะเริ่มตนที่ A และนําโหนดขางเคียง B และ C มาเก็บไวในแสต็ก เมื่อสํารวจ A เสร็จพอพขอมูลจากแสต็กออกมาได C ทําการสํารวจ C และนําโหนดขางเคียงกับ C ที่ยัง ไมไดทําการสํารวจและยังไมไดอยูในแสต็กมาใสแสต็ก Dและ F พุช(Push) ใสแสต็ก ดังนั้นในแสต็กตอนนี้มี B D F อยู เมื่อสํารวจ C เสร็จพอพFออกมาทํา การสํารวจ แลวนําโหนดขางเคียงที่ยังไมไดสํารวจและยังไมไดอยูในแสต็กมาใสแสต็ก ซึ่งก็ คือ G ดังนั้นขอมูลในแสต็กจะเปน B D G ทํ าเชนนี้ไปเรื่อย ๆ จนจบการทํางานก็จะไดลําดับ การสํารวจคือ (A C F G H E D B) ตามตาราง 1 ดังตอไปนี้ ตารางที่ 1 ลําดับการคนหาแบบลึกกอน
  • 29. ในการคนหาขอมูลแบบนี้บนโครงสรางของกราฟ มีขอที่นาสังเกตุคือ โหนดที่เริ่มตน การสํารวจจะตองมีการกําหนดมาใหวาโหนดใดเปนโหนดเริ่มตน และขอสังเกตุอีกประการ หนึ่งคือวิธีการคนหาแบบลึกกอนที่ใชสําหรับโครงสรางขอมูลแบบกราฟ สามารถใชกับ โครงสรางขอมูลแบบตนไมไดดวย การคนหาแบบกวางกอน (Breadth first search) การคนหาแบบกวางกอนเปนการกําหนดทิศทางการคนหาแบบที่ละระดับของ โครงสรางตนไมโดยเริ่มจากโหนดราก(ระดับที่ 0) แลวลงมาระดับที่ 1 จากซายไปขวา เมื่อ เสร็จระดับที่ 1 ไประดับที่ 2จากซายไปขวาเชนกัน ทําเชนนี้เรื่อย ๆ จนพบโหนดที่ตองการ ตามรูปที่ 3 ลําดับการเดินทางของโหนดเปนไปตามหมายเลขทีกํากับไวบนโหนด ่ รูปที่ 3 ลําดับการคนหาแบบกวางกอนบนโครงสรางตนไม
  • 30. สําหรับการคนหาแบบกวางกอนบนโครงสรางตนไม จะอาศัยโครงสรางขอมูลแบบคิว (Queue)มาชวย และดวยวิธีการเชนเดียวกับการคนหาแบบลึกกอนคือ ใหเริ่มตนสํารวจที่ โหนดเริ่มตน แลวนําโหนดขางเคียงเก็บไวในคิว เมื่อสํารวจโหนดเริ่มตนเสร็จ ใหนําขอมูล ในคิวออกมาสํารวจ แลวนําโหนดขางเคียงที่ยังไมไดสํารวจและไมไดอยูในคิวใสคิวไว ทําเชนนี้ไปเรื่อย ๆ จนพบโหนดที่ตองการ หรือเมื่อสํารวจครบทุกโหนด รูปที่ 4 โครงสรางขอมูลแบบกราฟ
  • 31. การสํารวจเริ่มตนที่ A นําโหนดขางเคียง B C ไวในคิว เมื่อสํารวจ A เสร็จ นําขอมูลในคิว คือ Bออกมาสํารวจ แลวนําขอมูลขางเคียงคือ D E ใสคิว ตอนนี้คิวจะมี B D E อยู แลว นํา B ออกมาสํารวจทําเชนนี้เรื่อย ๆ จะไดลําดับการสํารวจขอมูลคือ (A B C D E F G H) ตามตารางที่ 2 ตาราง 2 ลําดับการคนหาแบบกวางกอน เชนเดียวกับการคนหาแบบลึกกอน การคนหาแบบกวางกอนโดยใชโครงสรางขอมูลคิว มาชวยตองมีการกําหนดโหนดเริ่มตน และวิธีการนี้สามารถใชไดกับขอมูลบนโครงสราง แบบตนไมดวย
  • 32. ตารางเปรียบเทียบ การคนหาแนวลึกกอนและแนวกวางกอน การคนหาแนวลึกกอน การคนหาแนวกวางกอน 1.ใชหนวยความจํานอยกวา 1.ใชหนวยความจํามากเพราะ เพราะวาสถานะในเสนทางคนหา ตองเก็บสถานะไวทุกตัวเพื่อ ปจจุบันเทานั้นที่ถูกเก็บ(ในขณะ หาเสนทางจากสถานะเริ่มตน ใดๆ จะเก็บเสนทางเดียว พอจะ ไปหาคําตอบ ไปเสนทางอื่นเสนทางที่ผานมาก็ ไมจําเปนตองเก็บ) 2. อาจจะติดเสนทางที่ลึกมาก 2. จําไมติดเสนทางที่ลึกมาก โดยไมพบคําตอบ เชนในกรณีที่ ๆ โดยไมพบคําตอบ เสนทางนั้นไมมีคําตอบและเปน เสนทางที่ยาวไมสิ้นสุด จะทําไม สามารถไปเสนทางอื่นได 3. ถาคําตอบอยูในระดับ n+1 3. ถาคําตอบอยูในระดับ สถานะอื่นทุกตัวที่ระดับ 1ถึง n+1 สถานะทุกตัวที่ระดับ 1 ระดับ n ไมจําเปนตองถูกกระจาย ถึงระดับ n จะตองถูกกระจาย จนหมด จนหมด ทําใหมีสถานะที่ไม จําเปนในเสนทางที่จะไปสู คําตอบถูกกระจายออกดวย 4. เมื่อพบคําตอบไมสามารถ 4. ถามีคําตอบจะรับประกันได รับประกันไดวาเสนที่ไดเปน วาจะพบคําตอบแน ๆ และจะ เสนทางที่สั้นที่สุดหรือไม ไดเสนทางสั้นที่สุดดวย
  • 33. การคนหาแบบฮิวริสติก(Heuristic Search) การคนหาคําตอบอาศัยวิธีการทางฮิวริสติก (heuristic search) มีความความ แตกตางจากการคนหาขอมูลแบบธรรมดาและแบบฮิวริสติกนั้นอยูที่การคนหาขอมูล ธรรมดา ผูททําการคนขอมูลจะตองตรวจสอบขอมูลทีละตัวทุกตัวจนครบ แตฮิวริสติกจะ ี่ ไมลงไปดู ขอมูลทุกตัว วิธีการนี้จะเลือกไดคําตอบที่เหมาะสมใหกับการคนหา ซึ่งมีขอดี คือ สามารถทําการ คนหาคําตอบจาก ขอมูลที่มีขนาดใหญมาก ๆ ได แตมีขอเสียคือ คําตอบที่ไดเปนเพียงคําตอบที่ดี เทานั้นไมแนวาจะดีที่สุด แตเนื่องจากวาปญหาในบาง ลักษณะนั้นใหญมาก และเปนไปไมไดที่จะทํา การคนหาดวยวิธี ธรรมดากระบวนการของ ฮิวริสติกจึงเปนสิ่งที่จําเปนในเรื่องของฮิวริสติกนั้น นอกจากจะมีการคนหาแบบฮิวริสติก แลว ยังมีอีกสิ่งหนึ่งที่สําคัญคือ ฮิวริสติกฟงกชัน (heuristic function) ซึ่งหมายถึง ฟงกชันทีทําหนาที่ในการวัดขนาดของความเปน ไปไดในการแกปญหาซึ่งจะแสดงดวย ่ ตัวเลข วิธีการดังกลาวจะกระทํ าไดโดยการพิจารณาถึงวิธีการ (aspects) ตาง ๆ ที่ใช ในการแกปญหา ณ สถานะหนึ่งวาจะสามารถแกปญหาไดตามที่ตองการหรือไม โดย กําหนดเปนนํ้าหนักที่ใหกับการแกปญหาของแตละวิธี นํ้าหนักเหลานี้จะถูกแสดงดวยตัว เลขที่กํากับไวกับโหนดตาง ๆ ในกระบวนการ คนหา และคาเหลานี้จะเปนตัวที่ใชในการ ประมาณความเปนไปไดวาเสนทางที่ผานโหนดนั้นจะมี ความเปนไปไดในการนําไปสู หนทางการแกปญหาไดมากนอยแคไหน
  • 34. จุดประสงคที่แทจริงของฮิวริสติก ฟงกชันก็คือ การกํากับทิศทางของกระบวนการ คนหา เพื่อใหอยูในทิศทางที่ไดประโยชนสูงสุด โดยการบอกวาเราควรเลือกเดินเสน ทางไหนกอน ในกรณีที่มีเสน ทางมากกวาหนึ่งเสนทางตองเลือกกระบวนการคนหา แบบฮิวริสติก โดยปกติแลวจะตองอาศัยฮิวริสติกฟงกชัน ทําใหการแกปญหาหนึ่ง ๆ จะดีหรือไม ก็ขึ้นอยูกับฮิวริสติกฟงกชันดังนั้นการคนหาแบบนี้จึงไมมีอะไรเปน หลักประกันวาจะไดสิ่งที่ไมดีออกมาดวยเหตุนี้เอง เราจึงเรียกการ คนหาแบบฮิวริสติก นี้วา Weak Methods หรือจะกลาวอีกนัยหนึ่งคือ Weak Methodsเปนกระบวนการ ควบคุมโดยทั่วไป (general-purpose control stategies) ซึ่งการคนหาแบบนี้ สามารถแบงไดเปน
  • 35. การคนหาแบบปนเขา(Hill climbing) ฟงกชันฮิวริสติกสามารถนํามาชวยในกระบวนการคนหาเพื่อใหไดคําตอบอยางรวดเร็ว และมีประสิทธิภาพ วิธีการที่จะนําฟงกชันฮิวริสติกมาใชมีหลายวิธีดวยกันขึ้นอยูกับวาจะใช ในลักษณะใด เชนเลือกสถานะที่มคาฮิวริสติกดีขึ้น แลวเดินไปยังสถานะนั้นเลยโดยไม ี ตองสนใจสถานะที่มีคาฮิวริสติกแยกวาสถานะปจจุบันหรือวาจะเก็บสถานะทุกตัวไวแมวา คาฮิวริสติกจะแยลงแลวพิจารณาสถานะเหลานี้ทีหลัง เปนตน ในสวนตอไปนี้จะกลาวถึง อัลกอริทึมตาง ๆ ที่นําฟงกชันฮิวริสติกมาชวยในการคนหาคําตอบ โดยเริ่มจากอัลกอริทึม ปนเขา (Hill climbing algorithm) รูปที่ 5 แสดงลักษณะการคนหาแบบ Hill climbing การคนหาแบบฮิลไคลบิง(Hill climbing) เปนวิธีการคนหาขอมูลที่มีลักษณะคลายกับ การปนภูเขา การที่นักปนภูเขาจะเดินทางไปถึงยอดภูเขา นักปนเขาจะตองมองกอนวายอด เขาอยูที่ใด แลวนักปนเขาจะตองพยายามไปจุดนั้นใหได ลองนึกภาพของการปนภูเขาโลน ที่มองเห็นแตยอด และนักปเขากําลังปนภูเขาอยูเบื้องลางที่มีเสนทางเต็มไปหมด เพื่อที่จะ เดินทางไปถึงยอดภูเขาโดยเร็วที่สุด นักปน เขาจะมองไปที่ยอดเขาแลวสังเกตวาทิศทางใดที่เมื่อปนแลวจะยิ่งใกลยอดเขา และ หลีกเลี่ยงทิศทางที่เมื่อไปแลวจะทําใหตัวเองหางจากยอดเขา นักปนเขาจะตองทําเชนนี้ไป เรื่อย ๆ จนกระทั่งถึงยอดเขา
  • 36. ตัวอยางการใชฟงกชันฮิวริสติก โดยอัลกอริทึมปนเขาอยางงายโดยปญหาโลกของ บลอก รูปที่ 6 การคนหาแบบ Hill climbing
  • 37. ตัวเลข h(i) ในรูปแสดงวา สถานะที่ i มีคาฮิวริสติกเทากับ h จากรูจะเห็นไดวา เริ่มตนจากสถานะที่ 1 ที่มีคาฮิวริสติกเทากับ -1 อัลกอริทึมปนเขาใชตัวกระทําการเพื่อ สรางสถานะลูกตัวแรกของสถานะที่ 1 แลววัดคาฮิวริสติกได 0 ซึ่งมีคาดีขึ้น ถาสังเกตจาก รูปที่ จะพบวาสถานะที่ 1 มีสถานะลูกทั้งหมด 3 ตัว แตในกรณีของอัลกอริทึมปนเขานี้ เมื่อไดสถานะลูกตัวแรกซึ่งมีคาอิวริสติกดีขึ้น อัลกอริทึมจะไมสรางสถานะลูกที่เหลืออีก 2 ตัว และจะไมยอนกลับมาที่สถานะลูกทั้ง 2 นี้ แมวาหลังจากนี้อัลกอริทึมจะคนไมพบ คําตอบกลาวคือเปนการตัดทางเลือกทิ้ง ซึ่งการทําเชนนี้แมวาจะมีโอกาสไมพบคําตอบแต ก็มีขอดีที่เปนการชวยลดเวลาอยางมาก จากนั้นอัลกอริทึมมาสถานะที่ 2 แลวเริ่มสราง สถานะลูกไดสถานะที่ 3 ที่มีคาฮิวริสติก -1 ซึ่งแยลงในกรณีที่แยลงเชนนี้ อัลกอริทึมจะไม ไปยังสถานะลูกตัวนี้และสรางสถานะลูกตัวตอไปโดยใชตัวกระทําการที่เหลือไดสถานะที่ 4 มีคาฮิวริสติกเทากับ -1 ไมดีขึ้นเชนกันจึงสรางสถานะลูกตัวถัดไป เปนสถานะที่5 มีคาฮิวริ สติกเทากับ 1 เปนคาที่ดีขึ้น อัลกอริทึมจะมายังสถานะนี้และคนพบคําตอบในที่สุด อัลกอริทึมปนเขานี้จะมีประสิทธิภาพมากดังเชนแสดงในตัวอยางนี้ซึ่งกระจาย สถานะทั้งสิ้นเพียง 6 ตัวแลวพบคําตอบ เปรียบเทียบกับอัลกอริทึมการคนหาแนวกวาง กอนซึ่งใชสถานะทั้งสิ้นถึง 11 ตัว อยางไรก็ดีอัลกอริทึมนี้จะมีประสิทธิภาพมาก ถาใช ฟงกชันฮิวริสติกที่ดีมาก ๆ ในกรณีที่ฟงกชันฮิวริสติกไมดีนัก อัลกอริทึมนี้ก็อาจหลง เสนทางได และอาจไมพบคําตอบแมวาปริภูมิที่กําลังคนหามีคําตอบอยูดวยก็ตาม สาเหตุ การหลงเสนทางประการหนึ่งมาจากการเลือกสถานะลูก ซึ่งอัลกอริทึมจะไมไดพิจารณา สถานะลูกทุกตัวโดยเมื่อพบสถานะลูกตัวใดที่ดีขึ้นก็จะเลือกทางนั้น อัลกอริทึมนี้สามารถ ดัดแปลงเล็กนอยใหพิจารณาสถานะลูกทุกตัวใหครบกอน แลวเลือกสถานะลูกตัวที่มีคาฮิว ริสติกสูงสุด เมื่อทําเชนนี้ก็จะทําใหอัลกอริทึมไดพิจารณาเสนทางที่ดีที่สุด ณ ขณะหนึ่ง ๆ ไดดีขึ้นเราเรียกอัลกอริทึมที่ดัดแปลงนี้วาอัลกอริทึมปนเขาชันสุด (Steepest ascent hill climbing)
  • 38. การคนหาดีสุดกอน(Best-first search) เปนกระบวนการคนหาขอมูลที่ไดนําเอาขอดีของทั้งการคนหาแบบลึกกอน(Depth firstsearch) และการคนหาแบบกวางกอน(Breadth first search) มารวมกันเปนวิธีการ เดียว โดยที่แตละขั้นของการคนหาในโหนดลูกนั้น การคนหาแบบดีที่ดีกอนจะเลือกเอา โหนดที่ดีที่สุด (most promising)และการที่จะทราบวาโหนดใดดีที่สุดนี้สามารถทําได โดยอาศัยฮิวริสติกฟงกชัน ซึ่งฮิวริสติก ฟงกชันนี้จะทําหนาที่เหมือนตัววัดผล และใหผล ของการวัดนี้ออกมาเปนคะแนน รูปที่ 2.7 เปนตัวอยางของการคนหาแบบดีที่สุดกอน ขั้นตอนนี้เริ่มจากตอน 1 สรางโหนดราก(root node) ในขั้นตอน 2สรางโหนดลูก B และ C แลวตรวจสอบโหนด B และ C ดวยฮิวริสติกฟงกชัน ไดผลออกมาเปนคะแนน คือ 3 และ 1ตามลํ าดับ จากนั้นใหเลือกโหนด C เปนโหนดตอไปที่เราสนใจ เพราะมีคา นอยกวา (หมายเหตุ ในการเลือกนี้จะเลือกคามากสุด หรือนอยสุดก็ได ขึ้นอยูกับลักษณะ ของปญหา) แลวสรางโหนด ลูกใหกับโหนด C ในขั้นตอน 3 ไดโหนด D และ Eแลว ตรวจสอบคะแนนได 4 และ 6 ตามลํ าดับ จากนั้นทํ าการเปรียบเทียบคาของโหนด ทายสุด หรือเทอรมินอล โหนด(terminal node) ทุกโหนด วาโหนด ใดมีคาดีที่สุด ในที่นี้ จะตองเลือกโหนด B เพราะมีคะแนนเพียง 3 (เลือกคะแนนตํ่าสุด) แลวสรางโหนด ลูกตาม ขั้นตอน 4 ได F และ G แลวตรวจ สอบคะแนนได 6 และ 5 คะแนนตามลํ าดับ ทําเชนนี้ เรื่อย ๆ จนพบคําตอบหรือจนไมสามารถ สรางโหนดตอไปไดอีก
  • 39. รูปที่ 7 ขั้นตอนของการคนหาแบบดีที่สุดกอน รูปที่ 8 การคนหาแบบดีสุดกอน
  • 40. อัลกอริธึม: การคนหาแบบดีที่สุดกอน 1. เริ่มดวย OPEN ที่มีเพียงโหนดเริ่มตน 2. ทําจนกวาจะพบเปาหมาย หรือวาไมมีโหนดเหลืออยูใน OPEN � เลือกโหนดที่ดีที่สุดใน OPEN � สรางโหนดลูกใหกับโหนดที่ดีที่สุดนั้น � สําหรับโหนดลูกแตละตัวใหทําดังตอไปนี้ i) ถาโหนดนั้นยังไมเคยถูกสรางมากอนหนานั้น ใหตรวจสอบคาของมันโดย ใชฮิวริสติกฟงชัน แลวเพิ่มเขาไปใน OPEN แลวบันทึกวาเปนโหนดแม ii) ถาโหนดนั้นถูกสรางมากอนหนานี้แลว ใหเปลี่ยนโหนดแมของมัน ถาเสน ทางใหมที่ไดดีกวาโหนดแมตัวเดิม ในกรณีนี้ ใหปรับเปลี่ยนคาตามเสน ทางที่อาจจะเกิดขึ้น
  • 41. การคนหาแบบ Greedy (Greedy Algorithm) กรีดีอัลกอริธึม เปนการคนหาแบบดีที่สุดกอน(Best first search) ที่งายที่สุด หลักการ ของการคนหาแบบนี้คือ การเลือกโหนดที่ดีที่สุดตลอดเวลาอัลกอริธึม กรีดี 1. เลือกโหนดเริ่มตนมาหนึ่งโหนด 2. ใหโหนดที่เลือกมานี้เปนสถานะปจจุบัน 3. ใหทําตามขบวนการขางลางนี้จนกวาจะไมสามารถสรางโหนดลูกไดอีก 3.1 สรางสถานะใหมที่เปนโหนดลูกที่เปนไปไดทั้งหมดจากสถานะปจจุบัน 3.2 จากสถานะใหมที่สรางขึ้นมาทั้งหมด ใหเลือกสถานะ หรือ โหนดลูก ที่ดีที่สุด ออกมาเพียงโหนดเดียว 4. กลับไปที่ขึ้นตอนที่ 2 ตัวอยาง จากเรื่องการเดินทางของเซลแมนที่จะตองเดินทางไปยังเมือง A B C D ซึ่งมี ระยะทางตามตารางที่ 3 เราจะแกปญหานี้ดวยวิธีการของกรีดีบาง รูปที่ 9 การแกปญหาการ เดินทางของเซลแมนดวยกรีดี อัลกอริธึม
  • 42. จากรูปที่ 9 การแกปญหาเริ่มจาก การเลือก A เปนเมืองเริ่มแรก จากนั้นทําการสราง โหนดลูกB C และ D หารระยะทางระหวาง A ถึงเมืองเหลานี้ได 20 30 และ 50 ตามลําดับ เลือก B เปนเมืองที่จะเดินทางตอมา จากนั้นสรางโหนดลูกของ B ได C และ D และไดระยะทางเทากับ 15 และ 20 ตามลําดับ เลือก C เปนเมืองที่จะ เดินทางตอไป จากนั้นสรางโหนดลูกให C ได D มีคาเทากับ 10 เลือกเดินมาที่ D เปน เมืองสุดทายกอนกลับไป A รวมระยะทางเทากับ 20 + 15 + 10 + 50 = 95 รูปที่ 10 ขอมูลในรูปแบบกราฟ
  • 43. ตาราง 3 การคนหาแบบกรีดี
  • 44. การคนหาแบบ A* การคนหาแบบ A* เปนอีกแบบของการคนหาแบบดีที่สุดกอน วิธีการเลือกโหนดที่จะใช ในการดําเนินการตอจะพิจารณาจากโหนดที่ดีที่สุด แตในกรณีของ A* นี้จะมีลักษณะพิเศษ กวาคือ ในสวนของฮิวริสติกฟงกชัน ในกรณีของการคนหาแบบดีที่สุดกอนนั้น คาที่ไดจากฮิว ริสติก ฟงกชัน จะเปนคาที่วัดจาก โหนดปจจุบัน แตในกรณีของ A* คาของฮิวริสติก ฟงกชัน จะวัดจากคา 2 คาคือ คาที่วัดจากโหนดปจจุบันไปยังโหนดราก และจากโหนดปจจุบันไปยัง โหนดเปาหมาย ถาเราใหตัวแปร f แทนคาของฮิวริสติก ฟงกชัน g เปนฟงกชันที่ใชวัด คา cost จากสถานะเริ่มตนจนถึงสถานะปจจุบัน h' เปนฟงกชันที่ใชวัดคา cost จาก สถานะปจจุบันถึงสถานะเปาหมาย ดังนั้น f = g + h’ อัลกอริทึม A* (A* Search) เปนการขยายอัลกอริทึมดีสุดกอนโดยพิจารณาเพิ่มเติมถึง ตนทุนจากสถานะเริ่มตนมายังสถานะปจจุบันเพื่อใชคํานวณคาฮิวริสติกดวย ในกรณีของ อัลกอริทึม A* เราตองการหาคาต่ําสุดของฟงกชัน f'ของสถานะ s นิยามดังนี้ f'(s)=g(s)+h'(s) โดยที่ g คือฟงกชันที่คํานวณตนทุนจากสถานะเริ่มตนมายังสถานะปจจุบัน h' คือฟงกชันที่ ประมาณตนทุนจากสถานะปจจุบันไปยังคําตอบ ดังนั้น f' จึงเปนฟงกชันที่ประมาณตนทุน จากสถานะเริ่มตนไปยังคําตอบ (ยิ่งนอยยิ่งดี) เรามองไดวาฟงกชัน h' คือฟงกชันฮิวริสติกที่ เราเคยใชในการคนหาอื่น ๆ กอนหนานี้เชนอัลกอริทึมปนเขา อัลกอริทึมดีสุดกอน เปนตน
  • 45. ในที่นี้เราใสเครื่องหมาย ' เพื่อแสดงวาฟงกชันนี้เปนฟงกชันประมาณของฟงกชันจริงที่ไม รู (เราทําไดแคประมาณวา h' คือตนทุนจากสถานะปจจุบันไปยังคําตอบ เราจะรูตนทุนจริง ก็ตอเมื่อเราไดทําการคนหาจริงจนไปถึงคําตอบแลว) สวน g เปนฟงกชันที่คํานวณ ตนทุนจริงจากสถานะเริ่มตนมายังสถานะปจจุบัน (จึงไมไดใสเครื่องหมาย ' ) เพราะเรา สามารถหาตนทุนจริงไดเนื่องจากไดคนหาจากสถานะเริ่มตนจนมาถึงสถานะปจจุบันแลว สวน f' ก็เปนเพียงแคฟงกชันประมาณโดยการรวมตนทุนทั้งสอง คือ h' กับ g อัลกอริทึม A* จะทําการคนหาโดยวิธีเดียวกันกับอัลกอริทึมดีสุดกอนทุกประการ ยกเวน ฟงกชันฮิวริสติกที่ใชเปลี่ยนมาเปน f' (ตางจากอัลกอริทึมดีสุดกอนที่ใช h') โดย การใช f' อัลกอริทึม A* จึงใหความสําคัญกับสถานะหนึ่ง ๆ 2 ประการ คือ (1) สถานะที่ ดีตองมี h' ดีคือตนทุนเพื่อจะนําไปสูคําตอบหลังจากนี้ตองนอย และ (2) ตนทุนที่จายไป แลวกวาจะถึงสถานะนี้ (g) ตองนอยดวย เราจึงไดวา A* จะคนหาเสนทางที่ใหตนทุน โดยรวมนอยที่สุดตามคา f' ซึ่งตางจากอัลกอริทึมดีสุดกอน ที่เนนความสําคัญของ สถานะที่ตนทุนหลังจากนี้ที่จะนําไปสูคําตอบตองนอย โดยไมสนใจวาตนทุนที่จายไปแลว กวาจะนํามาถึงสถานะนี้ตองเสียไปเทาไหร
  • 46. รูปที่ 11 แสดงการคนหาดวยอัลกอริทึม A* กันสถานะในรูปที่ 8 โดยสมมติใหตนทุนหรือ ระยะหางระหวางสถานะพอแมไปยังสถานะลูกเทากับ 1 หนวย เชนตน ทุนจริง (g) จาก A ไปยัง B,C หรือ D มีคาเทากับ 1 หนวย จากรูปจะเห็นไดวาในขั้นตอนที่ 4 สถานะ C จะถูกเลือกมากระจายโดย อัลกอริทึม A* เนื่องจากมีคา f' นอยสุดเทากับ 3.5 ซึ่งนอยกวา E ที่มีคาเทากับ 4 แมวา คา h' ของ E จะนอยกวาซึ่งตางจากการสรางสถานะของอัลกอริทึมดีสุดกอน
  • 47. จัดทําโดย นางสาวชลธิดา ประยูร ชั้น ม.5 เลขที่ 14