หนวยการเรียนรูที่ 1 เทคโนโลยีการสื่อสาร
การเรียนรูที่ 1วัตถุประสงคของการจัดการขอมูล หนวย
ขอมูลและเขตขอมูลคีย .
การเรียนรูที่ 2 ชนิดขอมูลและประเภทของแฟมขอมูล
การเรียนรูที่ 3 ลักษณะการประมวลผลขอมูล
การเรียนรูที่ 4 แฟมโปรแกรมและแฟมขอมูล

หนวยการเรียนรูที่ 2 โครงสรางขอมูล
การเรียนรูที่ 5 ชนิดของโครงสรางขอมูล
การเรียนรูที่ 6 ลักษณะของขอมูล
การเรียนรูที่ 7 การเรียงลําดับขอมูล
การเรียนรูที่ 8 การคนหาขอมูล
หนวยการเรียนรูที่ 1 เทคโนโลยีการสื่อสาร

การเรียนรูที่ 1วัตถุประสงคของการจัดการขอมูล หนวยขอมูลและเขต
ขอมูลคีย .

         วัตถุประสงคในการจัดการขอมูล
     1. การเก็บขอมูล ตองเก็บขอมูลเพื่อใหสามารถนํากลับมาใชไดในภายหลัง

     2. การจัดขอมูล ตองจัดขอมูลใหอยูในรูปแบบที่สามารถเรียกใชงานได
อยางมีประสิทธิภาพ

     3. การปรับปรุงขอมูล ตองปรับขอมูลใหมีความถูกตองสมบูรณอยูเสมอ

     4. การปกปองขอมูล ตองปกปองขอมูลจากการทําลาย ลักลอบใช หรือ
แกไขโดยมิชอบ รวมทั้งปกปองขอมูลจากอุบัติเหตุที่อาจเกิดจากวินาศภัย หรือ
ความบกพรองภายในระบบคอมพิวเตอร
หนวยขอมูล (DATA UNITS)
หนวยของขอมูลคอมพิวเตอรสามารถจัดเรียงเปน
ลําดับชั้นเล็กไปขนาดใหญไดดังนี้

         1.บิต (bit)
       เลขฐาน 2 หนึ่งหลักซึ่งมีคาเปน 0 หรือ 1

         2.ตัวอักษร (charecter)
       กลุมของบิตสามารถแทนคาตัวอักษรได ในชุดอักขระ ASCII 1 ไบต (
8 บิต) แทนตัวอักษรตัว 1 ตัว เชน 01000001 แทนตัวอักษร A ในปจจุบันมี
ชุดอักขระที่ใชเลขฐานสอง 16 บิต แทนคาตัวอักษร คือ รหัส Unicode เชน
0000 0000 1110 0110 แทนอักษรตัว ?

           3.เขตขอมูล (Field)
       ซึ่งประกอบดวยกลุมตัวอักษรที่แทนขอเท็จจริง

          4.ระเบียน (Record)
       ระเบียน คือโครงสรางขอมูลที่แทนตัววัตถุชิ้นหนึ่ง เชน ระเบียนขอมูล
นักศึกษาเลขทะเบียน 431999999
5.แฟม (file)
         ตารางที่เปนกลุมของระเบียนที่มีโครงสรางเดียวกัน เชน ตารางการ
สั่งซื้อสินคาของลูกคา

         6.ฐานขอมูล (Database)
       กลุมของตาราง (และความสัมพันธ)

         การเรียงลําดับชั้นของหนวยขอมูลดังนี้
เขตขอมูลคีย (Key field) คือเขตขอมูลที่ใชสําหรับระบุระเบียนขอมูลอยาง
เฉพาะเจาะจงขอมูลที่อยูในเขตขอมูลนี้จะไมซ้ํากับระเบียนอื่น ๆ เชน
แฟมขอมูลพนักงานอาจใชเลขที่พนักงานเปนตัวระบุระเบียบ
การเรียนรูที่ 2 ชนิดขอมูลและประเภทของแฟมขอมูล
                
ชนิดของขอมูล

ขอมูลที่ตองการจัดเก็บนั้นอาจจะมีรูปแบบไดหลายอยาง รูปแบบสําคัญ ๆ ไดแก

          3.1 ขอมูลแบบรูปแบบ (formatted data) เปนขอมูลที่รวมอักขระซึ่งอาจ
หมายถึงตัวอักษร ตัวเลข ซึ่งเปนรูปแบบที่แนนอน ในแตละระเบียน ทุกระเบียนที่อยูใน
แฟมขอมูลจะมีรูปแบบที่เหมือนกันหมด ขอมูลที่เก็บนั้นอาจเก็บในรูปของรหัสโดยเมื่อ
อานขอมูลออกมาอาจจะตองนํารหัสนั้นมาตีความหมายอีกครั้ง เชน แฟมขอมูลประวัติ
นักศึกษา

          3.2 ขอมูลแบบขอความ (text)เปนขอมูลที่เปนอักขระในแบบขอความ ซึง
อาจหมายถึงตัวอักษร ตัวเลข สมการฯ แตไมรวมภาพตาง ๆ นํามารวมกันโดยไมมี
รูปแบบที่แนนอนในแตละระเบียน เชน ระบบการจัดเก็บขอความตาง ๆ ลักษณะการ
จัดเก็บแบบนี้จะไมตองนําขอมูลที่เก็บมาตีความหมายอีก ความหมายจะถูกกําหนดแลว
ในขอความ

          3.3 ขอมูลแบบภาพลักษณ (images) เปนขอมูลที่เปนภาพ ซึ่งอาจเปนภาพ
กราฟที่ถูกสรางขึ้นจากขอมูลแบบรูปแบบรูปภาพ หรือภาพวาด คอมพิวเตอรสามารถ
เก็บภาพและจัดสงภาพเหลานี้ไปยังคอมพิวเตอรอื่นได เหมือนกับการสงขอความ โดย
คอมพิวเตอรจะทําการแปลงภาพเหลานี้ ซึ่งจะทําใหคอมพิวเตอรสามารถที่จะปรับ
ขยายภาพและเคลื่อนยายภาพเหลานั้นไดเหมือนกับขอมูลแบบขอความ
3.4 ขอมูลแบบเสียง (audio) เปนขอมูลที่เปนเสียง ลักษณะ
ของการจัดเก็บก็จะเหมือนกับการจัดเก็บขอมูลแบบภาพ คือ
คอมพิวเตอรจะทําการแปลงเสียงเหลานี้ใหคอมพิวเตอรสามารถนําไป
เก็บได ตัวอยางไดแก การตรวจคลื่นหัวใจ จะเก็บเสียงเตนของหัวใจ

         3.5 ขอมูลแบบภาพและเสียง (video) เปนขอมูลที่เปนเสียง
และรูปภาพ ทีถูกจัดเก็บไวดวยกัน เปนการผสมผสานรูปภาพและเสียง
               ่
เขาดวยกัน ลักษณะของการจัดเก็บขอมูล คอมพิวเตอรจะทําการแปลง
เสียงและรูปภาพนี้ เชนเดียวกับขอมูลแบบเสียงและขอมูลแบบภาพ
ลักษณะซึ่งจะนํามารวมเก็บไวในแฟมขอมูลเดียวกัน
ประเภทของแฟมขอมูล
ประเภทของแฟมขอมูลจําแนกตามลักษณะของการใชงานไดดังนี้

          6.1แฟมขอมูลหลัก (master file)แฟมขอมูลหลักเปนแฟมขอมูลที่บรรจุ
ขอมูลพื้นฐานที่จําเปนสําหรับระบบงาน และเปนขอมูลหลักที่เก็บไวใชประโยชน
ขอมูลเฉพาะเรื่องไมมีรายการเปลี่ยนแปลงในชวงปจจุบัน มีสภาพคอนขางคงที่ไม
เปลี่ยนแปลงหรือเคลื่อนไหวบอยแตจะถูกเปลี่ยนแปลงเมื่อมีการสิ้นสุดของขอมูล
เปนขอมูลที่สําคัญที่เก็บไวใชประโยชน ตัวอยาง เชน แฟมขอมูลหลักของ
นักศึกษาจะแสดงรายละเอียดของนักศึกษา ซึ่งมี ชื่อนามสกุล ที่อยู ผลการศึกษา
แฟมขอมูลหลักของลูกคาในแตละระเบียนของแฟมขอมูลนี้จะแสดงรายละเอียด
ของลูกคา เชน ชื่อสกุล ที่อยู หรือ ประเภทของลูกคา

           6.2 แฟมขอมูลรายการเปลี่ยนแปลง (transaction file)แฟมขอมูล
รายการเปลี่ยนแปลงเปนแฟมขอมูลที่ประกอบดวยระเบียนขอมูลที่มีการเคลื่อนไหว
ซึ่งจะถูกรวบรวมเปนแฟมขอมูลรายการเปลี่ยนแปลงที่เกิดขึ้นในแตละงวดในสวนที่
เกี่ยวของกับขอมูลนั้น แฟมขอมูลรายการเปลี่ยนแปลงนี้จะนําไปปรับรายการใน
แฟมขอมูลหลัก ใหไดยอดปจจุบัน ตัวอยางเชน แฟมขอมูลลงทะเบียนเรียนของ
นักศึกษา
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) จากแฟมขอมูลตาราง
การจัดแฟมขอมูลแบบนี้จะทําใหประหยัดเนื้อที่ในอุปกรณเก็บ
ขอมูลของแฟมขอมูลหลัก กลาวคือในแฟมขอมูลหลักไมตองมี 2 ฟลด
คือ ฟลดรายการสินคาและฟลดราคาสินคา มีแตเพียงฟลดรหัสสินคาก็
เพียงพอแลว เมื่อใดที่ตองการใชฟลดรายการสินคาในการแสดงผลก็อาน
คาออกมาจากแฟมขอมูลตารางได นอกจากนั้นยังเปนการลดความ
ซ้ําซอนของขอมูลและเมื่อผูใชระบบตองการเปลี่ยนแปลงรายการสินคา
หรือราคาสินคาก็จะเปลี่ยนในแฟมขอมูลตารางทีเดียว โดยไมตองไป
เปลี่ยนแปลงในแฟมขอมูลอื่น

             6.4 แฟมขอมูลเรียงลําดับ (sort file)แฟมขอมูลเรียงลําดับ
เปนการจัดเรียงระเบียนที่จะบรรจุในแฟมขอมูลนั้นใหม โดยเรียง
ตามลําดับคาของฟลดขอมูลหรือคาของขอมูลคาใดคาหนึ่งในระเบียนนัน     ้
ก็ได เชน จัดเรียงลําดับตาม วันเดือนป ตามลําดับตัวอักขระเรียงลําดับ
จากมากไปหานอยหรือจากนอยไปหามาก เปนตน
            แฟมขอมูลรายงาน (report file)เปนแฟมขอมูลที่ถูกจัดเรียง
ระเบียบตามรูปแบบของรายงานที่ตองการแลวจัดเก็บไวในรูปของ
แฟมขอมูล ตัวอยาง เชน แฟมขอมูลรายงานควบคุมการปรับเปลี่ยนขอมูล
ที่เกิดขึ้นในขณะปฏิบัติงานแตละวัน
การเรียนรูที่ 3 ลักษณะการประมวลผลขอมูล
          
ขอมูลและการประมวลผลขอมูล
           ขอมูล คือขอเท็จจริงที่เราสนใจ สวน สารสนเทศ คือขอมูลที่ผานการ
ประมวลผลดวยวิธีการที่เหมาะสมถูกตอง จนไดรูปแบบผลลัพธ ตรงความตองการ
ของผูใช
ขอมูลที่จะนํามาประมวลผลใหเปนสารสนเทศ จะตองมีคุณสมบัติพื้นฐาน
ดังตอไปนี้
  ความถูกตอง หากมีการเก็บรวบรวมขอมูลและขอมูลเหลานั้นเชื่อถือไมได จะ
ทําใหเกิดผลเสียหายมาก ผูใชจะไมกลาอางอิงหรือนําเอาไปใชประโยชน ซึ่งเปน
เหตุใหการตัดสินใจของผูบริหารขาดความแมนยํา และมีโอกาสผิดพลาดได
โครงสรางขอมูลที่ออกแบบตองคํานึงถึงกรรมวิธีการดําเนินงานเพื่อใหไดความถูก
ตองแมนยํามากที่สุด โดยปกติความผิดพลาดของการประมวลผลสวนใหญ มาจาก
ขอมูลที่ไมมีความถูกตองซึ่งมีสาเหตุมาจากคนหรือเครื่องจักร การออกแบบระบบ
จึงตองคํานึงถึงในเรื่องนี้
  ความรวดเร็วและเปนปจจุบัน การไดมาของขอมูลจําเปนตองใหทันตอความ
ตองการของผูใช มีการตอบสนองตอผูใชไดเร็ว ตีความหมายสารสนเทศไดทันตอ
เหตุการณหรือความตองการ มีการออกแบบระบบการเรียกคนและรายงาน ตาม
ความตองการของผูใช
 ความสมบูรณ ความสมบูรณของสารสนเทศขึ้นกับการรวบรวมและวิธีการทาง
ปฏิบัติ ในการดําเนินการจัดทําสารสนเทศ ตองสํารวจและสอบถามความตองการ
ของผูใช เพื่อใหไดขอมูลที่มีความสมบูรณเหมาะสม
ความชัดเจนกะทัดรัด การจัดเก็บขอมูลตองใชพื้นที่ในการจัดเก็บขอมูลมาก จึง
จําเปนตองออกแบบโครงสรางขอมูลใหกะทัดรัด สื่อความหมายได มีการใชรหัสหรือ
ยอขอมูลใหเหมาะสม เพื่อที่จะจัดเก็บเขาไวในระบบคอมพิวเตอร
  ความสอดคลอง ความตองการเปนเรื่องสําคัญ ดังนั้นจึงตองมีการสํารวจเพื่อหา
ความตองการของหนวยงานและองคการ ดูสภาพการใชขอมูล ความลึกหรือความ
กวางของขอบเขตขอมูล ที่สอดคลองกับความตองการ

    ในการนําขอมูลไปใชประโยชน หรือการทําขอมูลใหเปนสารสนเทศ ที่จะ
นําไปใชประโยชนได จําเปนตองมีการประมวลผลขอมูลกอน การประมวลผลขอมูล
เปนกระบวนการที่มีกระบวนการยอยหลายอยาง ประกอบกันคือ
การรวบรวมขอมูล
การแยกแยะ
การตรวจสอบความถูกตอง
การคํานวณ
การจัดลําดับหรือการเรียงลําดับ
การรายงานผล
การสื่อสารขอมูลหรือการแจกจายขอมูลนั้น
การประมวลผลขอมูล จึงเปนกิจกรรมที่มีความสําคัญ เพราะขอมูลที่มีอยู รอบๆ ตัว
เรามีเปนจํานวนมากในการใชงานจึงตองมีการประมวลผล เพื่อใหเกิดประโยชน
กิจกรรมหลักของการใหไดมาซึ่งสารสนเทศ จึงประกอบดวยกิจกรรมการ เก็บ
รวบรวมขอมูล ซึ่งตองมีการตรวจสอบ ความถูกตองดวย กิจกรรมการประมวลผลซึ่ง
อาจจะเปนการแบงแยกขอมูล การจัดเรียงขอมูล การคํานวณ และกิจกรรมการเก็บ
รักษาขอมูลซึ่งอาจตอง มีการทําสําเนา ทํารายงาน เพื่อแจกจาย
วิธีการประมวลผล มี 2 ลักษณะ คือ

  (1) การประมวลผลแบบเชื่อมตรง (online processing)
หมายถึง การทํางานในขณะที่ขอมูลวิ่งไปบนสายสัญญาณเชื่อมตอจากเครื่อง
ปลายทาง (terminal) ไปยังฐานขอมูลของเครื่องหลักที่ใชในการประมวลผล
การประมวลผลแบบเชื่อมตรงจึงเปนการประมวลผลโดยทันทีทันใด เชน การ
จองตั๋วเครื่องบิน การซื้อสินคาในหางสรรพสินคา การฝากถอนเงินเอทีเอ็ม การ
ประมวลผลแบบเชื่อมตรงจึงเปนวิธีที่ใชกันมากวิธีหนึ่ง

   (2) การประมวลผลแบบกลุม (batch processing)
หมายถึง การประมวลผลในเรื่องที่สนใจเปนครั้งๆ เชน เมื่อตองการทราบขอมูล
ผลสํารวจความนิยมของประชาชนตอการเลือกตั้งสมาชิกสภาผูแทน หรือที่
เรียกวา โพล (poll) ก็มีการสํารวจขอมูลเพื่อเก็บรวบรวมขอมูล เมื่อเก็บรวบรวม
ขอมูลไดแลวก็นํามาปอนเขาเครื่องคอมพิวเตอร แลวนําขอมูล นั้นมาประมวลผล
ตามโปรแกรมที่ไดกําหนดไว เพื่อรายงานหรือสรุปผลหาคําตอบ กรณีการ
ประมวลผลแบบกลุมจึงกระทําในลักษณะเปนครั้งๆ เพื่อใหไดผลลัพธโดย
จะตองมีการรวบรวมขอมูลไวกอน
การเรียนรูที่ 4 แฟมโปรแกรมและแฟมขอมูล
          

                      แฟมโปรแกรมและแฟมขอมูล
      ถาจะแบงประเภทของแฟมในคอมพิวเตอรอีกนัยหนึ่ง อาจแบงเปนแฟม
โปรแกรม และ แฟมขอมูล แฟมโปรแกรมประกอบดวยชุดคําสั่งตางๆ ที่ทํางาน
อยางใดอยางหนึ่งเชน โปรแกรมประมวลคํา (word processor) ใชสําหรับ
พิมพเอกสารและจัดรูปแบบขอความ และโปรแกรมบีบอัดขอมูล
(compression utility) ใชสําหรับบีบอัดขอมูลที่มีขนาดเล็กลง เปนตน

       แฟมที่จัดเก็บหรือบันทึกโดยโปรแกรมเหลานี้ จัดเปนประเภทแฟมขอมูล
ซึ่งตามปกติจะมีสวนขยาย (file extension) เปนตัวบอกประเภทเชน เอกสาร
ที่สรางดวยโปรแกรมประมวลคํา Microsoft Word จะมีสวนขยายหลักเปน
.doc สวนแฟมขอมูลที่สรางดวยโปรแกรมบีบอัดขอมูล Winzip จะมีสวนขยาย
เปน .zip เปนตน ที่กลาววาสวนขยายหลักหมายความวา โปรแกรมหนึ่งอาจ
สรางแฟมขอมูลที่มีสวนขยายไดหลายหยาง ตัวอยางโปรแกรมลักษณะนี้
ไดแก Microsoft Word2000 ซึ่งสามารถสรางแฟมขอมูลที่มีสวนขยายเปน
.doc .htm .html .rtf .txt .mcw และ .wps แต จะเปนสวนขยายหลักเปน
.doc
แฟมขอมูลบางประเภทสรางและเปดดวยโปรแกรมใดโปรแกรมหนึ่ง
โดยเฉพาะ เชนแฟมที่สรางดวยโปรแกรมแตงภาพ 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
หนวยการเรียนรูที่ 2 โครงสรางขอมูล

การเรียนรูที่ 5 ชนิดของโครงสรางขอมูล

ประเภทของโครงสรางขอมูล
    แบงออกเปน 2 ประเภท คือ




- โครงสรางขอมูลทางกายภาพ (Physical Data Structure)
เปนโครงสรางขอมูลที่ใชโดยทั่วไปในภาษาคอมพิวเตอร แบงออกเปน 2 ประเภท

1.ขอมูลเบื้องตน (Primitive Data Types)
 - จํานวนเต็ม (Integer)
 - จํานวนทศนิยม (Floating point)
 - ขอมูลบูลีน (Boolean)
 - จํานวนจริง (Real)
 - ขอมูลอักขระ (Character)


2.ขอมูลโครงสราง (Structure Data Types)
 - แถวลําดับ (Array)
 - ระเบียนขอมูล (Record)
 - แฟมขอมูล (File)
- โครงสรางขอมูลทางตรรกะ (Logical Data Structure)




      เปนโครงสรางขอมูลที่เกิดจากการจินตนาการของผูใช เพื่อใชในการแกปญหา
ในโปรแกรมที่สรางขึ้น แบงเปน 2 ประเภท
1. โครงสรางขอมูลแบบเชิงเสน (Linear Data Structure)
     ความสัมพันธของขอมูลจะเรียงตอเนื่องกัน
   - ลิสต (List)
   - สแตก (Stack)
   - คิว (Queue)
   - สตริง (String)
2. โครงสรางขอมูลแบบไมเชิงเสน (Non-Linear Data Structure)
        ขอมูลแตละตัวสามารถมีความสัมพันธกับขอมูลอื่นไดหลายตัว
   - ทรี (Tree)
   - กราฟ (Graph)
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)
5. ลักษณะของโปรแกรมแบบที่มีโครงสรางที่ดี
5.1 โครงสรางโปรแกรมแบบคําสั่งตามลําดับ
         เปน โครงสรางพื้นฐานที่ประกอบดวยคําสั่งทั่วๆไป เปนโครงสรางที่มี
ลักษณะการทํางานแบบเรียงลําดับ คือ จะทํางานตั้งแตตนจนจบโดยไมมีการ
ขามขันตอนใดๆ
       ้
5.2 โครงสรางโปรแกรมแบบมีการตัดสินใจ (Decision)
         มี การตรวจสอบเงื่อนไข เพื่อตัดสินใจวาจะทําการประมวลผลสวนใด โดย
ผลลัพธของเงื่อนไขจะมีคาของความเปนไปไดอยู 2 ลักษณะ คือ จริงและเท็จ
เทานั้น
5.3 โครงสรางโปรแกรมแบบเปนวงจรปด (Loop)
         มีลักษณะการทํางานซ้ําๆกัน อยูในสวนใดสวนหนึ่งของโปรแกรม
6. อัลกอริทึม (Algorithm)
       อัลกอรึทึม คือ วิธีการแกปญหาตางๆ อยางมีระบบ มีลําดับขั้นตอนตั้งแต
ตนจนไดผลลัพธ สามารถเขียนไดหลายแบบ การเลือกใชตองเลือกใชขั้นตอนวิธี
ที่เหมาะสม กระชับ และรัดกุม
อัลกอริทึมที่นิยมใชกันมาก ไดแก
1. อัลกอริทึมแบบแตกยอย (Divide and conquer)
2. อัลกอริทึมแบบเคลื่อนที่ (Dynamic Programming)
3. อัลกอริทึมแบบทางเลือก (Greedy Algorithm)
การเขียนผังงาน (Flowchart)
      Flow Chart เปนการอธิบายขั้นตอนการประมวลผลโดยใชสัญลักษณใน
การแสดงความหมาย การใชกรอบรูปสัญลักษณที่สื่อความหมาย อธิบาย
ขั้นตอนการทํางาน
การเขียนรหัสเทียม (Pseudo Code)
      Pseudo Code การอธิบายขั้นตอนการประมวลผลโดยใชวลีภาษาอังกฤษ
ในการแสดงอธิบาย ใชคําสั้นๆ กะทัดรัด อธิบายขั้นตอนการทํางานของ
โปรแกรม

พัฒนาการของภาษาโปรแกรม
- ภาษาเครื่อง (Machine Language)
- ภาษาแอสเซมบลี (Assembly Language)
- ภาษาระดับสูง (High Level Language)
- ภาษายุคที่ 4 (Fourth Generation Language หรือ 4GL)
การบํารุงรักษาโปรแกรม (Program Maintenance)
      หมาย ถึง การแกไขขอผิดพลาดที่พบระหวางการทดสอบหรือระหวาง
การใชงาน ซึ่งอาจเปนการเปลี่ยนขอมูลที่ตองการใชใหมการปรับปรุงขอมูล ให
ทันเหตุการณอยูเสมอ การปรับเปลี่ยนโครงสรางบนหนาจอ เปนตน
การเรียนรูที่ 6 ลักษณะของขอมูล

             ลักษณะของขอมูลที่ดี
ขอมูลที่ดีควรเปนขอมูลที่มีคุณลักษณะดังตอไปนี้
• ขอมูลที่มีความถูกตองและเชื่อถือได (accuracy) ขอมูลจะมีความถูกตองและเชื่อถืไดมาก
นอยเพียงใดนั้น ขึ้นกับวิธีการที่ใชในการควบคุมขอมูลนําเขา และการควบคุมการประมวลผล
การควบคุมขอมูลนําเขาเปนการกระทําเพื่อใหเกิดความมั่นใจวาขอมูลนําเขามีความถูกตอง
เชื่อถือได เพราะถาขอมูลนําเขาไมมีความถูกตองแลวถึงแมจะใชวิธีการวิเคราะหและ
ประมวลผลขอมูลที่ดีเพียงใด ผลลัพธที่ไดก็จะไมมีความถูกตอง หรือนําไปใชไมได ขอมูล
นําเขาจะตองเปนขอมูลที่ผานการตรวจสอบวาถูกตองแลว ขอมูลบางอยางอาจตองแปลงให
อยูในรูปแบบที่เครื่องคอมพิวเตอรสามารถเขาใจไดอยางถูกตอง ซึ่งอาจตองพิมพขอมูลมา
ตรวจเช็คดวยมือกอน การประมวลผลถึงแมวาจะมีการตรวจสอบขอมูลนําเขาแลวก็ตาม ก็
อาจทําใหไดขอมูลที่ผิดพลาดได เชน เกิดจากการเขียนโปรแกรมหรือใชสูตรคํานวณ
ผิดพลาดได ดังนั้นจึงควรกําหนดวิธีการควบคุมการประมวลผลซึ่งไดแก การตรวจเช็คยอด
รวมที่ไดจากการประมวลผลแตละครั้ง หรือการตรวจสอบผลลัพธที่ไดจากการประมวลผล
ดวยเครื่องคอมพิวเตอรกับขอมูลสมมติที่มีการคํานวณดวยวามีความถูกตองตรงกันหรือไม
• ขอมูลตรงตามความตองการของผูใช (relevancy) ไดแก การเก็บเฉพาะขอมูลที่ผูใช
ตองการเทานั้น ไมควร เก็บขอมูลอื่น ๆ ที่ไมจําเปนหรือไมเกี่ยวของกับการใชงาน เพราะจะ
ทําใหเสียเวลาและเสียเนื้อที่ในหนวยเก็บขอมูล แตทั้งนี้ขอมูลที่เก็บจะตองมีความครบถวน
สมบูรณดวย
• ขอมูลมีความทันสมัย (timeliness) ขอมูลที่ดีนั้นนอกจากจะเปนขอมูลที่มีความถูกตอง
เชื่อถือไดแลวจะ ตองเปนขอมูลที่ทันสมัย ทั้งนี้เพื่อใหผูใชสามารถนําเอาผลลัพธที่ไดไป
ใชไดทันเวลา นั่นคือจะตองเก็บขอมูลไดรวดเร็วเพื่อทันความตองการของผูใช
การเรียนรูที่ 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
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 คาในการเปรียบเทียบที่นอยที่สุดหรือมากที่สุด จะลอยขึ้น
ขางบน เหมือนกับฟองอากาศ
4. การรียงลําดับแบบเชลล(shell sort)
เปนรูปแบบของการ sort ขอมูลโดยการนําเอาขอดีของการคนหาขอมูลแบบ
แทรกและแบบเลือกและหลีกเลี่ยง การเกิดปญหาของทั้งแบบแทรกและแบบ
เลือก ซึ่งการเปรียบเทียบขอมูลในการเรียงลําดับแบบแทรก โดยการ
เปรียบเทียบ ขอมูลที่อยูไกลออกไป ซึ่งจะทําใหเราสามารถเรียงดับขอมูลใน
ตําแหนงที่อยูไกลออกไปหลังจากนั้นก็จะเรียงลําดับขอมูล ที่อยูใกลกันเขามา
(กวาในครั้งแรก) และความหางของขอมูลที่เปรียบเทียบก็จะนอยลงจนเหลือ
1
วิธีนี้คิดคนเมื่อป ค.ศ.1959 โดย ดี.แอล.เชลล(D.L.SHELL) เรียกวา การ
เรียงลําดับแบบเชลล(shell sort)
5. การเรียงลําดับโดยการใชฐานเลข(radix sort)
การเรียงลําดับแบบนี้การเรียงลําดับ จะอยูบนพื้นฐานของการแทนตําแหนง
ของตัวเลขที่ตองการนํามาเรียงลําดับ จะเริ่มจากตัวที่มีเลขนัยสําคัญสูงที่สุด
ดําเนินจนกระทั่งถึงตัวเลขที่มีเลขนัยสําคัญต่ําสุด การเรียงลําดับในวิธีนี้การ
เรียงลําดับ จะเรียงจากตัวเลขที่มีนัยสําคัญนอยที่สุดกอน เมื่อตัวเลขทั้งหมด
ถูกนํามาเรียงลําดับตามเลขนัยสําคัญที่สูงขึ้น ตัวเลขที่เหมือนกัน ในตําแหนง
นน จะตางกันในตําแหนงของเลขนัยสําคัญที่นอยกวา การประมวลผลแบบนี้จะ
ประมวลผลกับขอมูลทั้งหมดได โดยที่ไมตองมีการแบงขอมูลแบบกลุมยอย
6. การเรียงลําดับอยางเร็ว(quick sort)
ถูกสรางและตั้งชื่อโดย ซี.เอ.อาร.ฮารเวร (C.A.R HOARE) การเรียงลําดับ
อยางเร็ว จะแบงขอมูลเปนสองกลุม โดยใน การจัดเรียงจะเลือกขอมุลตัวใดตัว
หนึ่งออกมา ซึ่งจะเปนตัวที่แบงขอมูลออกเปนสองกลุม โดยกลุมแรกจะตองมี
ขอมูลนอยกวา ตัวแบง และกลุมที่มีขอมูลนอยกวาตัวแบง และอีกกลุมจะมี
ขอมูลที่มากกวาตัวแบง ซึ่งเราเรียกตัวแบงวา ตัวหลัก(pivot) ในการเลือกตัว
หลักจะมีอิสระในการเลือกขอมูลตัวใดก็ไดที่เราตองการ การเรียงลําดับแบบ
เร็วเหมาะกับขอมูลที่มีการเรียกซ้ํา

7.การเรียงลําดับฮีพ(heapsort)
เปนการเรียงลําดับที่อยูบนพื้นฐานบนพื้นฐานของโครงสรางแบบไบนารี จะ
ดําเนินการ 2 ขั้นตอน คือ
  1. การจัดขอมูลในอะเรยใหสอดคลองกับความตองการของฮีพ
  2. การขจัดหนือการเคลื่อนยายขอมูลในตําแหนงสูงสุดหรือตําแหนงยอด
ของของฮีพออกไปและสนับสนุนขอมูลขอมูล ตัวอื่นไปแทนตําแหนงนั้น
การเรียนรูที่ 8 การคนหาขอมูล
           
การคนหาขอมูล (searching)

            การคนหาคําตอบ หรือการคนหาขอมูลในทางคอมพิวเตอรมักจะกระทําบน
โครงสรางขอมูลแบบตนไม และกราฟ ทั้งนี้เพราะโครงสรางขอมูลในลักษณะนี้
สามารถทําใหการคนหาทําไดสะดวกและสามารถพลิกแพลงการคนหาไดงาย ใน
ความเปนจริงแลว การคนหาขอมูลบางครั้งสามารถกระทําบนโครงสรางขอมูลชนิด
อื่นก็ไดเชน อาเรย แสตก และคิว แตการจัดขอมูลในโครงสรางเชนนี้ มีขอจํากัดใน
การคนหาขอมูลมาก การคนหาทําไดแบบเรียงลําดับ(Sequencial Search) เทานั้น
ซึ่งใชไดกับขอมูลที่มีขนาดเล็ก ดังนั้นในการคนหาขอมูลที่มีขนาดใหญ กอนการ
คนหา หรือระหวางการคนหา ขอมูลที่จะถูกคนจะตองถูกจัดใหอยูในรูปแบบของ
ตนไม หรือกราฟเทานั้น การคนหาขอมูลบนโครงสรางตนไมและกราฟสามารถจํ
าแนกได 2 แบบคือ การคนหาแบบไบลด(Blind Search) และการคนหาแบบฮิวริ
สติก(Heuristic Search)
การคนหาแบบไบลด(Blind Search)
     การคนหาแบบไบลด(Blind search) เปนการคนหาแบบที่เดินทางจากโหนดหนึ่ง
ไปยังอีกโหนดหนึ่ง โดยอาศัยทิศทางเปนตัวกําหนดการคนหา ไมตองมีขอมูลอะไรมา
ชวยเสริมการตัดสินใจวาจะเดินทางตอไปอยางไร หรือกลาวอยางงาย ๆ คือการจะ
หยิบขอมูลใดมาชวยในการคนหาตอไป ไมตองอาศัยขอมูลใด ๆ ทั้งสิ้น นอกจาก
ทิศทางซึ่งเปนรูปแบบตายตัว การคนหาแบบไบลดสามารถแบงยอยไดดังนี้ คือ การ
คนหาทั้หมด และการคนหาบางสวน
     - การคนหาทั้งหมด(exhaustive search) คือ การคนหาทั้งหมดของปริภูมิสถานะ
     - การคนหาบางสวน (partial search) การคนหาเพียงบางสวนของปริภูมิสถานะ
ซึ่งในความเปนจริงการคนหาสวนมากใชการคนหาเฉพาะบางสวนเทานั้นเนื่องจาก
ปริภูมิสถานะมักมีขนาดใหญ เทาใหไมสามารถคนหาไดทั้งหมด ดังนั้นจึงมีความ
เปนไปไดวาคําตอบที่ไดอาจไมใชคําตอบที่ดีที่สุด การคนหาแบบนี้สามารถแบงได
เปน 2 ประเภทคือ การคนหาแบบลึกกอน(Depth first search) และการคนหาแบบ
กวางกอน (Breadth first search)

การคนหาแบบลึกกอน(Depth first search)
       การคนหาแบบลึกกอนเปนการคนหาที่กําหนดทิศทางจากรูปของโครงสราง
ตนไม ที่เริ่มตนจากโหนดราก(Root node) ที่อยูบนสุด แลวเดินลงมาใหลึกที่สุด เมื่อ
ถึงโหนดลางสุด(Terminal node) ใหยอนขึ้นมาที่จุดสูงสุดของกิ่งเดี่ยวกันที่มีกิ่งแยก
และยังไมไดเดินผาน แลวเริ่มเดินลงจนถึงโหนดลึกสุดอีก ทําเชนนี้สลับไปเรื่อยจนพบ
โหนดที่ตองการหาหรือสํารวจครบทุกโหนดแลวตามรูปที่ 1 การคนหาแบบลึกกอนจะมี
ลําดับการเดินตามโหนดดังตัวเลขที่กํากับไวในแตละโหนด
รูปที่ 1 ลําดับการเดินทางบนโหนดของการคนหาแบบลึกกอนบนโครงสรางตนไม


           ดังที่ไดกลาวมาแลววา โครงสรางขอมูลที่ใชสําหรับการคนหานี้สามารถ
ใชกับโครงสรางกราฟไดดวย โดยอาศัยหลักการเดียวกัน แตสําหรับการเดินทาง
บนกราฟนั้นจะไมมีโหนดลึกสุดดังนั้นการเดินทางบนกราฟจะตองปรับวิธีการเปน
ดังนี้ โดยเริ่มจาก
โหนดเริ่มตน จากนั้นใหนําโหนดที่อยูติดกับโหนดที่กําลังสํารวจอยู(ที่ยังไมไดทํา
การสํารวจและยังไมไดอยูในแสต็กมาใสแสต็ก) มาเก็บไวในสแต็กเมื่อสํารวจโหนด
นั้นเสร็จ ใหพอพ(pop) ตัวบนสุดของโหนดออกมาทําการสํารวจ แลวนําโหนด
ขางเคียงทั้งหมดที่ยังไมไดสํารวจมาตอทายแสต็ก แลวพอพตัวบนสุดออกมา
สํารวจ ทําเชนนี้เรื่อย ๆ จนกระทั้งพบโหนดที่ตองการ หรือสํารวจครบทุดโหนด
รูปที่ 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 ลําดับการคนหาแบบลึกกอน
ในการคนหาขอมูลแบบนี้บนโครงสรางของกราฟ มีขอที่นาสังเกตุคือ โหนดที่
เริ่มตนการสํารวจจะตองมีการกําหนดมาใหวาโหนดใดเปนโหนดเริ่มตน และขอ
สังเกตุอีกประการหนึ่งคือวิธีการคนหาแบบลึกกอนที่ใชสําหรับโครงสรางขอมูลแบบ
กราฟ สามารถใชกับโครงสรางขอมูลแบบตนไมไดดวย

การคนหาแบบกวางกอน (Breadth first search)
      การคนหาแบบกวางกอนเปนการกําหนดทิศทางการคนหาแบบที่ละระดับของ
โครงสรางตนไมโดยเริ่มจากโหนดราก(ระดับที่ 0) แลวลงมาระดับที่ 1 จากซายไป
ขวา เมื่อเสร็จระดับที่ 1 ไประดับที่ 2จากซายไปขวาเชนกัน ทําเชนนี้เรื่อย ๆ จนพบ
โหนดที่ตองการตามรูปที่ 3 ลําดับการเดินทางของโหนดเปนไปตามหมายเลขที่
กํากับไวบนโหนด




          รูปที่ 3 ลําดับการคนหาแบบกวางกอนบนโครงสรางตนไม
สําหรับการคนหาแบบกวางกอนบนโครงสรางตนไม จะอาศัยโครงสรางขอมูลแบบคิว
(Queue)มาชวย และดวยวิธีการเชนเดียวกับการคนหาแบบลึกกอนคือ ใหเริ่มตน
สํารวจที่โหนดเริ่มตน แลวนําโหนดขางเคียงเก็บไวในคิว เมื่อสํารวจโหนดเริ่มตน
เสร็จ ใหนําขอมูลในคิวออกมาสํารวจ แลวนําโหนดขางเคียงที่ยังไมไดสํารวจและ
ไมไดอยูในคิวใสคิวไว ทําเชนนี้ไปเรื่อย ๆ จนพบโหนดที่ตองการ หรือเมื่อสํารวจครบ
ทุกโหนด




                        รูปที่ 4 โครงสรางขอมูลแบบกราฟ
การสํารวจเริ่มตนที่ A นําโหนดขางเคียง B C ไวในคิว เมื่อสํารวจ A เสร็จ นําขอมูล
ในคิว คือ Bออกมาสํารวจ แลวนําขอมูลขางเคียงคือ D E ใสคิว ตอนนี้คิวจะมี B D
E อยู แลวนํา B ออกมาสํารวจทําเชนนี้เรื่อย ๆ จะไดลําดับการสํารวจขอมูลคือ (A
B C D E F G H) ตามตารางที่ 2




                     ตาราง 2 ลําดับการคนหาแบบกวางกอน


เชนเดียวกับการคนหาแบบลึกกอน การคนหาแบบกวางกอนโดยใชโครงสราง
ขอมูลคิวมาชวยตองมีการกําหนดโหนดเริ่มตน และวิธีการนี้สามารถใชไดกับ
ขอมูลบนโครงสรางแบบตนไมดวย
ตารางเปรียบเทียบ การคนหาแนวลึกกอนและแนวกวางกอน
การคนหาแนวลึกกอน                 การคนหาแนวกวางกอน
1.ใชหนวยความจํานอยกวา          1.ใชหนวยความจํามากเพราะ
เพราะวาสถานะในเสนทางคนหา        ตองเก็บสถานะไวทุกตัวเพื่อ
ปจจุบันเทานั้นที่ถูกเก็บ(ในขณะ   หาเสนทางจากสถานะเริ่มตน
ใดๆ จะเก็บเสนทางเดียว พอจะ        ไปหาคําตอบ
ไปเสนทางอื่นเสนทางที่ผานมาก็
ไมจําเปนตองเก็บ)

2. อาจจะติดเสนทางที่ลึกมาก        2. จําไมติดเสนทางที่ลึกมาก
โดยไมพบคําตอบ เชนในกรณีที่       ๆ โดยไมพบคําตอบ
เสนทางนั้นไมมีคําตอบและเปน
เสนทางที่ยาวไมสิ้นสุด จะทําไม
สามารถไปเสนทางอื่นได
3. ถาคําตอบอยูในระดับ n+1        3. ถาคําตอบอยูในระดับ
สถานะอื่นทุกตัวที่ระดับ 1ถึง       n+1 สถานะทุกตัวที่ระดับ 1
ระดับ n ไมจําเปนตองถูกกระจาย    ถึงระดับ n จะตองถูกกระจาย
จนหมด                              จนหมด ทําใหมีสถานะที่ไม
                                   จําเปนในเสนทางที่จะไปสู
                                   คําตอบถูกกระจายออกดวย
4. เมื่อพบคําตอบไมสามารถ          4. ถามีคําตอบจะรับประกันได
รับประกันไดวาเสนที่ไดเปน      วาจะพบคําตอบแน ๆ และจะ
เสนทางที่สั้นที่สุดหรือไม        ไดเสนทางสั้นที่สุดดวย
การคนหาแบบฮิวริสติก(Heuristic Search)

        การคนหาคําตอบอาศัยวิธีการทางฮิวริสติก (heuristic search) มีความ
ความแตกตางจากการคนหาขอมูลแบบธรรมดาและแบบฮิวริสติกนั้นอยูที่การ
คนหาขอมูลธรรมดา ผูที่ทําการคนขอมูลจะตองตรวจสอบขอมูลทีละตัวทุกตัวจน
ครบ แตฮิวริสติกจะไมลงไปดู ขอมูลทุกตัว วิธีการนี้จะเลือกไดคําตอบที่เหมาะสม
ใหกับการคนหา ซึ่งมีขอดีคือ สามารถทําการ คนหาคําตอบจาก ขอมูลที่มีขนาด
ใหญมาก ๆ ได แตมีขอเสียคือคําตอบที่ไดเปนเพียงคําตอบที่ดี เทานั้นไมแนวา
จะดีที่สุด แตเนื่องจากวาปญหาในบางลักษณะนั้นใหญมาก และเปนไปไมไดที่จะ
ทํา การคนหาดวยวิธี ธรรมดากระบวนการของฮิวริสติกจึงเปนสิ่งที่จําเปนในเรื่อง
ของฮิวริสติกนั้น นอกจากจะมีการคนหาแบบฮิวริสติกแลว ยังมีอีกสิ่งหนึ่งที่สําคัญ
คือ ฮิวริสติกฟงกชัน (heuristic function) ซึ่งหมายถึงฟงกชันที่ทําหนาที่ในการ
วัดขนาดของความเปน ไปไดในการแกปญหาซึ่งจะแสดงดวยตัวเลข วิธีการ
ดังกลาวจะกระทํ าไดโดยการพิจารณาถึงวิธีการ (aspects) ตาง ๆ ที่ใชในการ
แกปญหา ณ สถานะหนึ่งวาจะสามารถแกปญหาไดตามที่ตองการหรือไม โดย
กําหนดเปนนํ้าหนักที่ใหกับการแกปญหาของแตละวิธี นํ้าหนักเหลานี้จะถูกแสดง
ดวยตัวเลขที่กํากับไวกับโหนดตาง ๆ ในกระบวนการ คนหา และคาเหลานี้จะเปน
ตัวที่ใชในการประมาณความเปนไปไดวาเสนทางที่ผานโหนดนั้นจะมี ความ
เปนไปไดในการนําไปสูหนทางการแกปญหาไดมากนอยแคไหน
จุดประสงคที่แทจริงของฮิวริสติก ฟงกชันก็คือ การกํากับทิศทางของ
กระบวนการคนหา เพื่อใหอยูในทิศทางที่ไดประโยชนสูงสุด โดยการบอกวาเรา
ควรเลือกเดินเสนทางไหนกอน ในกรณีที่มีเสน ทางมากกวาหนึ่งเสนทางตอง
เลือกกระบวนการคนหาแบบฮิวริสติก โดยปกติแลวจะตองอาศัยฮิวริสติกฟงกชัน
ทําใหการแกปญหาหนึ่ง ๆ จะดีหรือไม ก็ขึ้นอยูกับฮิวริสติกฟงกชันดังนั้นการ
คนหาแบบนี้จึงไมมีอะไรเปนหลักประกันวาจะไดสิ่งที่ไมดีออกมาดวยเหตุนี้เอง
เราจึงเรียกการ คนหาแบบฮิวริสติกนี้วา Weak Methods หรือจะกลาวอีกนัยหนึ่ง
คือ Weak Methodsเปนกระบวนการควบคุมโดยทั่วไป (general-
purpose control stategies)     ซึ่งการคนหาแบบนี้ สามารถแบงไดเปน
การคนหาแบบปนเขา(Hill climbing)
    ฟงกชันฮิวริสติกสามารถนํามาชวยในกระบวนการคนหาเพื่อใหไดคําตอบอยาง
รวดเร็วและมีประสิทธิภาพ วิธีการที่จะนําฟงกชันฮิวริสติกมาใชมีหลายวิธีดวยกัน
ขึ้นอยูกับวาจะใชในลักษณะใด เชนเลือกสถานะที่มีคาฮิวริสติกดีขึ้น แลวเดินไปยัง
สถานะนั้นเลยโดยไมตองสนใจสถานะที่มีคาฮิวริสติกแยกวาสถานะปจจุบันหรือวาจะ
เก็บสถานะทุกตัวไวแมวาคาฮิวริสติกจะแยลงแลวพิจารณาสถานะเหลานี้ทีหลัง เปน
ตน ในสวนตอไปนี้จะกลาวถึงอัลกอริทึมตาง ๆ ที่นําฟงกชันฮิวริสติกมาชวยในการ
คนหาคําตอบ โดยเริ่มจากอัลกอริทึมปนเขา (Hill climbing algorithm)


                              รูปที่ 5 แสดงลักษณะการคนหาแบบ Hill climbing




        การคนหาแบบฮิลไคลบิง(Hill climbing) เปนวิธีการคนหาขอมูลที่มีลักษณะ
คลายกับการปนภูเขา การที่นักปนภูเขาจะเดินทางไปถึงยอดภูเขา นักปนเขาจะตอง
มองกอนวายอดเขาอยูที่ใด แลวนักปนเขาจะตองพยายามไปจุดนั้นใหได ลองนึก
ภาพของการปนภูเขาโลนที่มองเห็นแตยอด และนักปเขากําลังปนภูเขาอยูเบื้องลาง
ที่มีเสนทางเต็มไปหมด เพื่อที่จะเดินทางไปถึงยอดภูเขาโดยเร็วที่สุด นักปน
เขาจะมองไปที่ยอดเขาแลวสังเกตวาทิศทางใดที่เมื่อปนแลวจะยิ่งใกลยอดเขา และ
หลีกเลี่ยงทิศทางที่เมื่อไปแลวจะทําใหตัวเองหางจากยอดเขา นักปนเขาจะตองทํา
เชนนี้ไปเรื่อย ๆ จนกระทั่งถึงยอดเขา
ตัวอยางการใชฟงกชันฮิวริสติก โดยอัลกอริทึมปนเขาอยางงายโดยปญหาโลกของ
บลอก




                 รูปที่ 6 การคนหาแบบ Hill climbing
ตัวเลข 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)
การคนหาดีสุดกอน(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 คะแนนตามลํ าดับ ทํา
เชนนี้เรื่อย ๆ จนพบคําตอบหรือจนไมสามารถ สรางโหนดตอไปไดอีก
รูปที่ 7 ขั้นตอนของการคนหาแบบดีที่สุดกอน




                                  รูปที่ 8 การคนหาแบบดี
                                  สุดกอน
อัลกอริธึม: การคนหาแบบดีที่สุดกอน
1. เริ่มดวย OPEN ที่มีเพียงโหนดเริ่มตน
2. ทําจนกวาจะพบเปาหมาย หรือวาไมมีโหนดเหลืออยูใน OPEN
     � เลือกโหนดที่ดีที่สุดใน OPEN
     � สรางโหนดลูกใหกับโหนดที่ดีที่สุดนั้น
     � สําหรับโหนดลูกแตละตัวใหทําดังตอไปนี้
         i) ถาโหนดนั้นยังไมเคยถูกสรางมากอนหนานั้น ใหตรวจสอบคาของมัน
โดย
                 ใชฮิวริสติกฟงชัน แลวเพิ่มเขาไปใน OPEN แลวบันทึกวาเปน
โหนดแม
        ii) ถาโหนดนั้นถูกสรางมากอนหนานี้แลว ใหเปลี่ยนโหนดแมของมัน ถา
เสน
                 ทางใหมที่ไดดีกวาโหนดแมตัวเดิม ในกรณีนี้ ใหปรับเปลี่ยนคา
ตามเสน
                 ทางที่อาจจะเกิดขึ้น
การคนหาแบบ Greedy (Greedy Algorithm)
    กรีดีอัลกอริธึม เปนการคนหาแบบดีที่สุดกอน(Best first search) ที่งายที่สุด
หลักการของการคนหาแบบนี้คือ การเลือกโหนดที่ดีที่สุดตลอดเวลาอัลกอริธึม กรีดี
1. เลือกโหนดเริ่มตนมาหนึ่งโหนด
2. ใหโหนดที่เลือกมานี้เปนสถานะปจจุบัน
3. ใหทําตามขบวนการขางลางนี้จนกวาจะไมสามารถสรางโหนดลูกไดอีก
      3.1 สรางสถานะใหมที่เปนโหนดลูกที่เปนไปไดทั้งหมดจากสถานะปจจุบัน
      3.2 จากสถานะใหมที่สรางขึ้นมาทั้งหมด ใหเลือกสถานะ หรือ โหนดลูก ที่ดี
ที่สุดออกมาเพียงโหนดเดียว
4. กลับไปที่ขึ้นตอนที่ 2

ตัวอยาง จากเรื่องการเดินทางของเซลแมนที่จะตองเดินทางไปยังเมือง A B C D ซึ่ง
มีระยะทางตามตารางที่ 3 เราจะแกปญหานี้ดวยวิธีการของกรีดีบาง




                                               รูปที่ 9 การแกปญหาการ
                                               เดินทางของเซลแมนดวยกรีดี
                                               อัลกอริธึม
จากรูปที่ 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   ขอมูลในรูปแบบกราฟ
ตาราง 3 การคนหาแบบกรีดี
การคนหาแบบ 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' คือฟงกชันฮิวริสติกที่เราเคยใชในการคนหาอื่น ๆ กอนหนานี้เชน
อัลกอริทึมปนเขา อัลกอริทึมดีสุดกอน เปนตน
ในที่นี้เราใสเครื่องหมาย ' เพื่อแสดงวาฟงกชันนี้เปนฟงกชันประมาณของฟงกชัน
จริงที่ไมรู (เราทําไดแคประมาณวา h' คือตนทุนจากสถานะปจจุบันไปยังคําตอบ
เราจะรูตนทุนจริงก็ตอเมื่อเราไดทําการคนหาจริงจนไปถึงคําตอบ
แลว) สวน g เปนฟงกชันที่คํานวณตนทุนจริงจากสถานะเริ่มตนมายัง
สถานะปจจุบัน (จึงไมไดใสเครื่องหมาย ' ) เพราะเราสามารถหาตนทุนจริงได
เนื่องจากไดคนหาจากสถานะเริ่มตนจนมาถึงสถานะปจจุบันแลว สวน f' ก็เปน
เพียงแคฟงกชันประมาณโดยการรวมตนทุนทั้งสอง คือ h' กับ g
     อัลกอริทึม A* จะทําการคนหาโดยวิธีเดียวกันกับอัลกอริทึมดีสุดกอนทุก
ประการ ยกเวน ฟงกชันฮิวริสติกที่ใชเปลี่ยนมาเปน f' (ตางจากอัลกอริทึมดีสุด
กอนที่ใช h') โดยการใช f' อัลกอริทึม A* จึงใหความสําคัญกับสถานะหนึ่ง ๆ 2
ประการ คือ (1) สถานะที่ดีตองมี h' ดีคือตนทุนเพื่อจะนําไปสูคําตอบหลังจากนี้
ตองนอย และ (2) ตนทุนที่จายไปแลวกวาจะถึงสถานะนี้ (g) ตองนอยดวย เรา
จึงไดวา A* จะคนหาเสนทางที่ใหตนทุนโดยรวมนอยที่สุดตามคา f' ซึ่งตางจาก
อัลกอริทึมดีสุดกอน ที่เนนความสําคัญของสถานะที่ตนทุนหลังจากนี้ที่จะนําไปสู
คําตอบตองนอย โดยไมสนใจวาตนทุนที่จายไปแลวกวาจะนํามาถึงสถานะนี้ตอง
เสียไปเทาไหร
รูปที่ 11 แสดงการคนหาดวยอัลกอริทึม A* กันสถานะในรูปที่ 8 โดยสมมติให
ตนทุนหรือระยะหางระหวางสถานะพอแมไปยังสถานะลูกเทากับ 1 หนวย เชนตน
ทุนจริง (g) จาก A ไปยัง B,C หรือ D มีคาเทากับ 1 หนวย
จากรูปจะเห็นไดวาในขั้นตอนที่ 4 สถานะ C จะถูกเลือกมากระจายโดย
อัลกอริทึม A* เนื่องจากมีคา f' นอยสุดเทากับ 3.5 ซึ่งนอยกวา E ที่มีคาเทากับ 4
แมวาคา h' ของ E จะนอยกวาซึ่งตางจากการสรางสถานะของอัลกอริทึมดีสุดกอน
จัดทําโดย

นายทศพล    จอมใจ

    ชั้น ม.5

นาย ทศพล จอมใจ

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