หนวยทีี่ 2
                
ความรูเบืองตนเกีี่ยวกัับอัลกอริิทม
          ื้                 ั      ึ
ความรููเบื้องตนเกี่ยวกับอัลกอริทึม
                    

• อัลกอริทึม (Algorithm) คือ ขันตอนในการแกปญหาอยางมีขั้นตอน
  อลกอรทม                คอ ขนตอนในการแกปญหาอยางมขนตอน
                               ้
  มีเปาหมายและมีแนวทางในการปฏิบัติอยางชัดเจน
ลักษณะของอัลกอริทึม
• อัลกอริทึมแบบแตกยอย (Divide-and-conquer) เปนอัลกอริทึมที่
  อลกอรทมแบบแตกยอย (Divide and conquer) เปนอลกอรทมท
  มีการนําปญหาหลักที่ไดมาทําการแยกออกเปนปญหายอยๆ แลว
  รวมกน ั
• อัลกอริทึมแบบเคลือนที่ (Dynamic Algorithm) เปนการแกปญหา
                      ่
  ยอยๆ เพียงครั้งเดียวแลวเก็บผลลัพธไว หากแกไขปญหายอยซ้า
                                                             ํ
  อีก ก็นําคําตอบที่เคยคํานวณเก็บไวมาใชได
• อัลกอริทึมแบบทางเลือก (Greedy Algorithm) เปนอัลกอริทึมหา
  คํําตอบโดยทางเลืือกทีี่ดีที่สุด
          โ
เครองมอทแสดงการทางานของอลกอรทม (ขนตอนวธ)
   เครื่องมือที่แสดงการทํางานของอัลกอริทึม (ขั้นตอนวิธี)

• ผังงานโครงสราง เปนแผนภาพที่แทนตรรกะของโครงสราง
ผังงาน
ผงงาน
ผังงาน
เหตผลที่ตองใชผงงาน
                    ุ            ั
• เนื่องจากผังงานเปนภาพ จะมองเห็นการทํางานของโปรแกรมได
  เนองจากผงงานเปนภาพ จะมองเหนการทางานของโปรแกรมได
  อยางดี
• ผังงานจะทําหนาที่เสมือนเปนเอกสารประกอบโปรแกรม สามารถ
  ใชสื่อสารระหวางโปรแกรมเมอรดวยกัน
• ผังงานอนุญาตใหโปรแกรมเมอรทดสอบโปรแกรมไดหลายๆ
  ตรวจสอบการทางาน กอนเขยนโปรแกรม
  ตรวจสอบการทํางาน กอนเขียนโปรแกรม
ขอเสียของการใชผงงาน
                                  ั
• การสรางผังงานจะตองใชเวลานาน
  การสรางผงงานจะตองใชเวลานาน
• ผังงานโครงสรางจะแสดงวิธีการนําขอมูลเขาจนถึงขอมูลออก แตไม
  แสดงเหตุผลของการทํางานในแตละขันตอน
                                    ้
• การสรางผังงาน โปรแกรมเมอรจะสรางโดยการนึกคิดเอาเอง
ขอแนะนําในการเขียนผังงาน
• การเขียนผังงานจะวาดจากบนลงลาง และซายไปขวา โดยการใชหัว
  การเขยนผงงานจะวาดจากบนลงลาง และซายไปขวา โดยการใชหว
  ลูกศรบนเสนเชื่อม
• การเขียนผังงานจะตองสะอาด ควรใชดินสอแทนการใชหมึกเพื่อลบ
                                     
  งาย
• ควรหลีกเลี่ยงไมใหเสนติดกัน โดยอาจใชสัญลักษณของการเชื่อมตอ
  เขามาชวยเมอจาเปน
  เขามาชวยเมื่อจําเปน
การเขียนขันตอนวิธี
                               ้   ว
• การเขียนผังงาน เปนการทํางานแบบเชิงเสน หรือการทํางานแบบ
  การเขยนผงงาน เปนการทางานแบบเชงเสน หรอการทางานแบบ
  ลําดับ ไมเปนโครงสราง การทํางานจะเริ่มตังแตจุดเริ่มตนไปจนถึง
                                             ้
  จุดสิ้ สด เหมาะกบโปรแกรมสนๆ ไ  ั 
     สนสุ           ั โป       สั้ ไมซบซอน
• การพัฒนาตรรกะโปรแกรมที่ทํางานซับซอน จะเขียนในรูป
  อัลกอริทึม (ขั้นตอนวิธี) หรือเรียกวา รหัสเทียม (Pseudo code)
รหัสเทียม
• การเขียนขั้นตอนวิธีจะใชภาษาอังกฤษแบบโครงสรางในการบรรยาย
  การเขยนขนตอนวธจะใชภาษาองกฤษแบบโครงสรางในการบรรยาย
  ขั้นตอนการทํางาน โดยมี keyword ดังนี้
• BEGIN..END IF..THEN..ELSE         CASE..OF
• WHILE..DO REPEAT..UNTIL           FOR
ความสัมพันธของขันตอนการทํางาน
                             ้
• การทํางานแบบเปนลําดับ (Sequence Process)
  การทางานแบบเปนลาดบ
  การทํางานตามการเรียงลําดับกอนหลัง
คว มสมพนธของขนตอนก รท งาน
                   ความสัมพันธของขันตอนการทําง น
                                    ้
• โครงสรางที่มีการทํางานแบบเลือกทํา
  โครงสรางทมการทางานแบบเลอกทา
  (Selection Proecss)
  จะทํํางานแบบใหเลือกทํําอยางใดอยาง
                 ใ ื           ใ
  หนึ่ง
คว มสมพนธของขนตอนก รท งาน
             ความสัมพันธของขันตอนการทําง น
                              ้
• การทํางานแบบเลือกทําไดหลายทาง คอ ทางานจากการพจารณาเงอนไข
  การทางานแบบเลอกทาไดหลายทาง คือ ทํางานจากการพิจารณาเงื่อนไข
  ตางๆ ที่มากกวา 2 ทาง โดยใหเลือกทําอยางใดอยางหนึ่งเทานั้น
คว มสมพนธของขนตอนก รท งาน
            ความสัมพันธของขันตอนการทําง น
                             ้
• การทํางานแบบทําซ้ํา ในขณะทเงอนไข
  การทางานแบบทาซา ในขณะที่เงื่อนไข
  เปนจริง (While –do Process) จะทา
                                  ํ
  การตรวจสอบ งอนไขของการทางาน
  การตรวจสอบเงื่อนไขของการทํางาน
  กอนการทํางานทุกครั้ง จะทํางาน
  เฉพาะเงื่อนไขที่เปนจริง
   ฉพ งอนไขท ปนจรง
คําสั่งเทียม (Pseudo Code)
                                            )
• คําสั่งเทียม (Pseudo code) เปนเครื่องมือใชอธิบายรายละเอียดของ
  คาสงเทยม                     เปนเครองมอใชอธบายรายละเอยดของ
  อัลกอริทึม (ขั้นตอนวิธี) การทํางาน โดยจะอธิบายดวยชุดคําสั่งที่ใกลเคียง
  กบภาษามนุษย ซึ่งชดคําสั่งตามรปแบบไวยากรณ
  กับภาษามนษย ซงชุดคาสงตามรูปแบบไวยากรณ (Syntax) ของ
  ภาษาคอมพิวเตอรใดๆ ตามความตองการ
ตัวอยาง ขั้นตอนการทํางาน (Algorithm)
                                       g      )
• 1 รับคาขอมลเปนตัวเลข
  1. รบคาขอมูลเปนตวเลข
• 2. ตรวจสอบวาตัวเลขทีไดมีคาเปนอยางไร โดยที่
                        ่
   – ถามีคาเปนศูนย       ใหพิมพคาวา “Zero”
                                       ํ
   – ถาไมมีคาเปนศููนย   ใหตรวจสอบวาตัวเลขนั้นเปนเลขจํานวนบวกหรือไม
       • ถาเปน             ใหพิมพคาวา “Positive”
                                         ํ
       • ถาไมเปน
         ถาไมเปน             ใหพมพคาวา “Negative”
                             ใหพิมพคําวา “N ti ”
• 3. สิ้นสุดการทํางาน
ฝกหัดการเขียน Pseudo Code และ Flowchart
ขั้นตอนการวิเคราะหปญหาโจทย
• การวิเคราะหปญหา อะไรคือปญหา คาตอบควรเปนอยางไร สิ่งใด
  การวเคราะหปญหา อะไรคอปญหา คําตอบควรเปนอยางไร สงใด
  เปนขอมูล และวิธีการแกปญหาควรเปนอยางไร
การวิเคราะหอลกอริทึม
                                ั
• การคนหา (Searching) คือ การหาตําแหนงของขอมลที่ตองการ
  การคนหา                   คอ การหาตาแหนงของขอมูลทตองการ
  หรือขอมูลที่ตรงกับเงื่อนไขที่กําหนด
• การเพิม (Inserting) คือ การเพิ่มขอมูลใหมเขาไปในโครงสราง
         ่
  ขอมูล
• การลบ (Deleting) คือ การลบขอมูลที่ตองการจากโครงสรางขอมูล
• การจัดเรีียง ( i ) คือ การจััดเรีียงขอมูล
       ั        (Sorting) ื               
• การเมิรจ (Merging) คือ การรวมขอมูล 2 ชุดเขาดวยกัน
การวัดประสิทธิภาพของอัลกอริทมและ Big-O Notation
                               ึ      g
• สาเหตที่ตองวัดประสิทธิภาพ เพอการตดสนใจเลอกอลกอรทมทมี
  สาเหตุทตองวดประสทธภาพ เพื่อการตัดสินใจเลือกอัลกอริทึมที่ม
  การทํางานที่เร็วกวา
• Big –O Notation ฟงกชันวัดประสิทธิภาพอัลกอริทึม
                         
   สามารถใชฟงกชนมาตรฐานทําการเปรียบเทียบกับฟงกชัน f(n)
                  ั
   Log, n, n, nlog n, n2, n2 ,…, nk ,2n , n!
ขั้นตอนการเปลียน f(n) มาใช big-O Notation
                    ่     )         g
• 1 ปรับคาของฟงกชันที่ไดจากการประมวลผลใหอยในรปสัมประสิทธิ์
  1. ปรบคาของฟงกชนทไดจากการประมวลผลใหอยู นรูปสมประสทธ
  อยางงาย
• 2. ตัดคาของตัวประกอบออกโดยใหอยูในรูปแบบฟงกชันมาตรฐาน
                                                  
• 3. เลือกรููปแบบฟงกชันจากฟงกชันมาตรฐาน Log, n, n, nlog n, n2, n2
  ,…, nk ,2n , n! ซึ่งจัดเรียงตามรอบการทํางานที่นอยที่สุดไปถึงรอบการ
  ทํางานที่มากที่สุด
วิเคราะหประสิทธิภาพของอัลกอริทึม
ประสิทธิภาพของ     รูปแบบ Big-o จํานวนรอบ เวลาในการทํางาน
ฟงกชน
     ั
ลอการิทม  ึ        O(log n)      1.4       Microsecond
เสนตรง (linear)
เสนตรง (li )      O(n)
                   O( )          1,000
                                 1 000     0.01 วนาท
                                           0 01 วินาที
ลอการิทมเชิงเสน
        ึ          O(n(log n))   14,000    0.2 วินาที
กําลังสอง
   ล อ             O(n2)
                    (            1,0002
                                  ,000     1.5-2.0 วินาที
                                                 0 วน
โพลิโนเมียน        O(nk)         1,000k    ชั่วโมง
เอ็กซโพแนนเชียล   O(cn)         21,000    ใชเวลามาก ไมสามารถระบุได
                                           แนนอน
แฟกทอเรียล         O(n!)         1,000!    ใชเวลามาก ไมสามารถระบุได
                                           แนนอน
22

22

  • 1.
    หนวยทีี่ 2  ความรูเบืองตนเกีี่ยวกัับอัลกอริิทม ื้ ั ึ
  • 2.
    ความรููเบื้องตนเกี่ยวกับอัลกอริทึม  • อัลกอริทึม (Algorithm) คือ ขันตอนในการแกปญหาอยางมีขั้นตอน อลกอรทม คอ ขนตอนในการแกปญหาอยางมขนตอน ้ มีเปาหมายและมีแนวทางในการปฏิบัติอยางชัดเจน
  • 3.
    ลักษณะของอัลกอริทึม • อัลกอริทึมแบบแตกยอย (Divide-and-conquer)เปนอัลกอริทึมที่ อลกอรทมแบบแตกยอย (Divide and conquer) เปนอลกอรทมท มีการนําปญหาหลักที่ไดมาทําการแยกออกเปนปญหายอยๆ แลว รวมกน ั • อัลกอริทึมแบบเคลือนที่ (Dynamic Algorithm) เปนการแกปญหา ่ ยอยๆ เพียงครั้งเดียวแลวเก็บผลลัพธไว หากแกไขปญหายอยซ้า ํ อีก ก็นําคําตอบที่เคยคํานวณเก็บไวมาใชได • อัลกอริทึมแบบทางเลือก (Greedy Algorithm) เปนอัลกอริทึมหา คํําตอบโดยทางเลืือกทีี่ดีที่สุด โ
  • 4.
    เครองมอทแสดงการทางานของอลกอรทม (ขนตอนวธ) เครื่องมือที่แสดงการทํางานของอัลกอริทึม (ขั้นตอนวิธี) • ผังงานโครงสราง เปนแผนภาพที่แทนตรรกะของโครงสราง
  • 5.
  • 6.
  • 7.
    เหตผลที่ตองใชผงงาน ุ ั • เนื่องจากผังงานเปนภาพ จะมองเห็นการทํางานของโปรแกรมได เนองจากผงงานเปนภาพ จะมองเหนการทางานของโปรแกรมได อยางดี • ผังงานจะทําหนาที่เสมือนเปนเอกสารประกอบโปรแกรม สามารถ ใชสื่อสารระหวางโปรแกรมเมอรดวยกัน • ผังงานอนุญาตใหโปรแกรมเมอรทดสอบโปรแกรมไดหลายๆ ตรวจสอบการทางาน กอนเขยนโปรแกรม ตรวจสอบการทํางาน กอนเขียนโปรแกรม
  • 8.
    ขอเสียของการใชผงงาน ั • การสรางผังงานจะตองใชเวลานาน การสรางผงงานจะตองใชเวลานาน • ผังงานโครงสรางจะแสดงวิธีการนําขอมูลเขาจนถึงขอมูลออก แตไม แสดงเหตุผลของการทํางานในแตละขันตอน ้ • การสรางผังงาน โปรแกรมเมอรจะสรางโดยการนึกคิดเอาเอง
  • 9.
    ขอแนะนําในการเขียนผังงาน • การเขียนผังงานจะวาดจากบนลงลาง และซายไปขวาโดยการใชหัว การเขยนผงงานจะวาดจากบนลงลาง และซายไปขวา โดยการใชหว ลูกศรบนเสนเชื่อม • การเขียนผังงานจะตองสะอาด ควรใชดินสอแทนการใชหมึกเพื่อลบ  งาย • ควรหลีกเลี่ยงไมใหเสนติดกัน โดยอาจใชสัญลักษณของการเชื่อมตอ เขามาชวยเมอจาเปน เขามาชวยเมื่อจําเปน
  • 10.
    การเขียนขันตอนวิธี ้ ว • การเขียนผังงาน เปนการทํางานแบบเชิงเสน หรือการทํางานแบบ การเขยนผงงาน เปนการทางานแบบเชงเสน หรอการทางานแบบ ลําดับ ไมเปนโครงสราง การทํางานจะเริ่มตังแตจุดเริ่มตนไปจนถึง ้ จุดสิ้ สด เหมาะกบโปรแกรมสนๆ ไ  ั  สนสุ ั โป สั้ ไมซบซอน • การพัฒนาตรรกะโปรแกรมที่ทํางานซับซอน จะเขียนในรูป อัลกอริทึม (ขั้นตอนวิธี) หรือเรียกวา รหัสเทียม (Pseudo code)
  • 11.
    รหัสเทียม • การเขียนขั้นตอนวิธีจะใชภาษาอังกฤษแบบโครงสรางในการบรรยาย การเขยนขนตอนวธจะใชภาษาองกฤษแบบโครงสรางในการบรรยาย ขั้นตอนการทํางาน โดยมี keyword ดังนี้ • BEGIN..END IF..THEN..ELSE CASE..OF • WHILE..DO REPEAT..UNTIL FOR
  • 12.
    ความสัมพันธของขันตอนการทํางาน ้ • การทํางานแบบเปนลําดับ (Sequence Process) การทางานแบบเปนลาดบ การทํางานตามการเรียงลําดับกอนหลัง
  • 13.
    คว มสมพนธของขนตอนก รทงาน ความสัมพันธของขันตอนการทําง น ้ • โครงสรางที่มีการทํางานแบบเลือกทํา โครงสรางทมการทางานแบบเลอกทา (Selection Proecss) จะทํํางานแบบใหเลือกทํําอยางใดอยาง ใ ื ใ หนึ่ง
  • 14.
    คว มสมพนธของขนตอนก รทงาน ความสัมพันธของขันตอนการทําง น ้ • การทํางานแบบเลือกทําไดหลายทาง คอ ทางานจากการพจารณาเงอนไข การทางานแบบเลอกทาไดหลายทาง คือ ทํางานจากการพิจารณาเงื่อนไข ตางๆ ที่มากกวา 2 ทาง โดยใหเลือกทําอยางใดอยางหนึ่งเทานั้น
  • 15.
    คว มสมพนธของขนตอนก รทงาน ความสัมพันธของขันตอนการทําง น ้ • การทํางานแบบทําซ้ํา ในขณะทเงอนไข การทางานแบบทาซา ในขณะที่เงื่อนไข เปนจริง (While –do Process) จะทา ํ การตรวจสอบ งอนไขของการทางาน การตรวจสอบเงื่อนไขของการทํางาน กอนการทํางานทุกครั้ง จะทํางาน เฉพาะเงื่อนไขที่เปนจริง ฉพ งอนไขท ปนจรง
  • 16.
    คําสั่งเทียม (Pseudo Code) ) • คําสั่งเทียม (Pseudo code) เปนเครื่องมือใชอธิบายรายละเอียดของ คาสงเทยม เปนเครองมอใชอธบายรายละเอยดของ อัลกอริทึม (ขั้นตอนวิธี) การทํางาน โดยจะอธิบายดวยชุดคําสั่งที่ใกลเคียง กบภาษามนุษย ซึ่งชดคําสั่งตามรปแบบไวยากรณ กับภาษามนษย ซงชุดคาสงตามรูปแบบไวยากรณ (Syntax) ของ ภาษาคอมพิวเตอรใดๆ ตามความตองการ
  • 17.
    ตัวอยาง ขั้นตอนการทํางาน (Algorithm) g ) • 1 รับคาขอมลเปนตัวเลข 1. รบคาขอมูลเปนตวเลข • 2. ตรวจสอบวาตัวเลขทีไดมีคาเปนอยางไร โดยที่ ่ – ถามีคาเปนศูนย ใหพิมพคาวา “Zero” ํ – ถาไมมีคาเปนศููนย ใหตรวจสอบวาตัวเลขนั้นเปนเลขจํานวนบวกหรือไม • ถาเปน ใหพิมพคาวา “Positive” ํ • ถาไมเปน ถาไมเปน ใหพมพคาวา “Negative” ใหพิมพคําวา “N ti ” • 3. สิ้นสุดการทํางาน
  • 18.
  • 19.
    ขั้นตอนการวิเคราะหปญหาโจทย • การวิเคราะหปญหา อะไรคือปญหาคาตอบควรเปนอยางไร สิ่งใด การวเคราะหปญหา อะไรคอปญหา คําตอบควรเปนอยางไร สงใด เปนขอมูล และวิธีการแกปญหาควรเปนอยางไร
  • 20.
    การวิเคราะหอลกอริทึม ั • การคนหา (Searching) คือ การหาตําแหนงของขอมลที่ตองการ การคนหา คอ การหาตาแหนงของขอมูลทตองการ หรือขอมูลที่ตรงกับเงื่อนไขที่กําหนด • การเพิม (Inserting) คือ การเพิ่มขอมูลใหมเขาไปในโครงสราง ่ ขอมูล • การลบ (Deleting) คือ การลบขอมูลที่ตองการจากโครงสรางขอมูล • การจัดเรีียง ( i ) คือ การจััดเรีียงขอมูล ั (Sorting) ื  • การเมิรจ (Merging) คือ การรวมขอมูล 2 ชุดเขาดวยกัน
  • 21.
    การวัดประสิทธิภาพของอัลกอริทมและ Big-O Notation ึ g • สาเหตที่ตองวัดประสิทธิภาพ เพอการตดสนใจเลอกอลกอรทมทมี สาเหตุทตองวดประสทธภาพ เพื่อการตัดสินใจเลือกอัลกอริทึมที่ม การทํางานที่เร็วกวา • Big –O Notation ฟงกชันวัดประสิทธิภาพอัลกอริทึม  สามารถใชฟงกชนมาตรฐานทําการเปรียบเทียบกับฟงกชัน f(n) ั Log, n, n, nlog n, n2, n2 ,…, nk ,2n , n!
  • 22.
    ขั้นตอนการเปลียน f(n) มาใชbig-O Notation ่ ) g • 1 ปรับคาของฟงกชันที่ไดจากการประมวลผลใหอยในรปสัมประสิทธิ์ 1. ปรบคาของฟงกชนทไดจากการประมวลผลใหอยู นรูปสมประสทธ อยางงาย • 2. ตัดคาของตัวประกอบออกโดยใหอยูในรูปแบบฟงกชันมาตรฐาน  • 3. เลือกรููปแบบฟงกชันจากฟงกชันมาตรฐาน Log, n, n, nlog n, n2, n2 ,…, nk ,2n , n! ซึ่งจัดเรียงตามรอบการทํางานที่นอยที่สุดไปถึงรอบการ ทํางานที่มากที่สุด
  • 23.
    วิเคราะหประสิทธิภาพของอัลกอริทึม ประสิทธิภาพของ รูปแบบ Big-o จํานวนรอบ เวลาในการทํางาน ฟงกชน ั ลอการิทม ึ O(log n) 1.4 Microsecond เสนตรง (linear) เสนตรง (li ) O(n) O( ) 1,000 1 000 0.01 วนาท 0 01 วินาที ลอการิทมเชิงเสน ึ O(n(log n)) 14,000 0.2 วินาที กําลังสอง ล อ O(n2) ( 1,0002 ,000 1.5-2.0 วินาที 0 วน โพลิโนเมียน O(nk) 1,000k ชั่วโมง เอ็กซโพแนนเชียล O(cn) 21,000 ใชเวลามาก ไมสามารถระบุได แนนอน แฟกทอเรียล O(n!) 1,000! ใชเวลามาก ไมสามารถระบุได แนนอน