[Recap] ประเภทของอัลกอริทึม (Types of Algorithm)
มาทำความรู้จักกับ 10 ประเภทของอัลกอริทึมฉบับสายย่อกัน
อัลกอริทึม (Algorithm) เป็นขั้นตอนวิธีในการทำงาน/การแก้ปัญหาอย่างใดอย่างหนึ่ง ที่ช่วยเพิ่มประสิทธิภาพในการทำงานของโปรแกรมให้ใช้ Memory น้อย แต่ประมวลผลได้เร็ว
ย่ออัลกอริทึม 10 ประเภท
Set 1 :: เริ่มที่แบบเบสิก ไม่ต้องคิดอะไรลึกลับซับซ้อน เจออะไรก็ วน, ซ้ำ, สุ่ม เดี๋ยวก็ได้คำตอบเอง
1.Brute Force Algorithm
แก้ปัญหาโดยสั่งให้ทำงาน ‘วน’ ไปเรื่อยๆจนกว่าจะได้คำตอบ
เช่น การเรียงข้อมูลแบบ Bubble sort, Selection sort
Note: ไม่เหมาะกับปัญหาที่มีข้อมูลจำนวนมาก เพราะมันจะช้า!
2.Recursive Algorithm
แก้ปัญหาด้วยการเรียกใช้ตัวเอง ‘ซ้ำ’ ๆ
เช่น การหาค่า Factorial, การบวกข้อมูลตัวเลขที่อยู่ในกลุ่ม
3.Randomized Algorithm
แก้ปัญหาด้วยการ ‘สุ่ม’ ข้อมูล เพื่อให้ได้ผลตามที่ต้องการ
เช่น หาข้อมูลที่สำคัญที่สุดโดยสุ่มด้วยการหาร, การจัดเรียงข้อมูลแบบ Quick sort ด้วยการสุ่มตัวเลขในข้อมูลเพื่อเปรียบเทียบในการเรียงลำดับ
Set 2 :: แบบขยักขย่อน แบ่งท่อนเป็น 2 step ทั้ง แยก, ลด, เปลี่ยน ทำหนึ่งแล้วค่อยทำสอง
4.Divide and Conquer Algorithm
ใช้หลักการ ‘แยก’ ปัญหาเป็น 2 ส่วน
ส่วนที่ 1 : แบ่งปัญหาออกเป็นส่วนเล็กๆ แล้วแก้ปัญหาส่วนเล็กๆนั้นก่อน
ส่วนที่ 2 : นำผลที่ได้จากส่วนที่ 1 กลับมารวมกันใหม่
เช่น การเรียงข้อมูลแบบ Quick sort, Merge sort
5.Decrease and Conquer Algorithm
แก้ปัญหาด้วยการ ‘ลด’ ขนาดของปัญหาลง แล้วเลือกขนาดที่ต้องการแก้ก่อน ที่เหลือเว้นไว้ก่อน ยึดความเชื่อที่ว่า “เล็กกว่า แก้ง่ายกว่า”
เช่น การค้นหาข้อมูลแบบไบนารี
6.Transform and Conquer Algorithm
แก้ปัญหาด้วยการ ‘เปลี่ยน’ รูปแบบของปัญหา ยึดความเชื่อที่ว่า “เปลี่ยนให้อยู่ในรูปแบบที่แก้ง่าย ก็จะแก้ได้เร็วขึ้น”
เช่น นำข้อมูลที่ต้องการค้นหา มาจัดเรียงก่อน แทนที่จะค้นหาจากข้อมูลที่กระจัดกระจายอยู่
Set 3:: แบบมีจุดยืนเป็นของตัวเอง โดยเริ่มจากจุดหนึ่งไปยังจุดอื่นๆ ไม่ว่าจะเป็น ล่างขึ้นบน, ย้อนรอย ถอยหลัง, หรือแก้เป็น Nodeๆ
7.Dynamic programming Algorithm
แก้ปัญหาจาก ‘ล่างขึ้นบน’ ด้วยการแบ่งปัญหาเป็นส่วนเล็กๆ แล้วนำผลที่ดีที่สุดมาแก้ปัญหาใหญ่
เช่น หาค่าตัวเลข Fibonacci
8.Backtracking Algorithm
แก้ปัญหาด้วยการ “ย้อนรอย ถอยหลัง” ค้นหาทุกเส้นทางที่เป็นไปได้ เพื่อหาว่าคำตอบนั้นถูกไหม ถ้าไม่ก็จะถอยหลังกลับมาที่จุดเดิมแล้วค้นหาคำตอบใหม่
เช่น การกำหนดสีให้กับเมืองในแผนที่, การหาความเป็นไปได้ทั้งหมดของการเดินหมากกระดาน
9.Branch and bound Algorithms
แก้ปัญหาโดยใช้โครงสร้าง ‘Tree’ หรือเก็บปัญหาเป็น node ย่อยๆนั่นเอง โดยให้ปัญหาหลักอยู่บนสุด เป็น root node แต่ละ node ก็แก้ปัญหาของตัวเอง
- ถ้าแก้ปัญหาถูก จะใช้ผลนั้นในการแก้ปัญหาทั้งหมด
- ถ้าแก้ไม่ถูก ให้แบ่งเป็น 2 node ย่อย แล้วแก้ปัญหาที่ย่อยโหนดนั้น
แก้จนครบทุกโหนดใน Tree
เช่น การหาเส้นทางที่เหมาะสมให้พนักงานขายสินค้าให้สามารถเดินทางไปได้ครบทุกที่และเร็วที่สุด
Set 4:: แบบ Optimization
10.Greedy Algorithm
แก้ปัญหาด้วยการ ‘เพิ่มประสิทธิภาพ’ ของการแก้ปัญหา คือ “หาคำตอบที่ดีและคุ้มค่าที่สุด”
เช่น เลือกทอนเหรียญในหน่วยที่มีขนาดเล็กที่สุดก่อน
สรุปจบ
ครบ จบแว้ว! อัลกอริทึมมันเป็นเรื่องของการแก้ปัญหา คนเราทุกคนก็มีปัญหามากมายหลากหลายเรื่อง ไม่ว่าจะเป็น.. ปัญหาชีวิต สุขภาพ การเงิน การเรียน การทำงาน หรือปัญหาหัวใจ ก็สามารถหยิบเอาอัลกอริทึมรูปแบบต่างๆไปปรับใช้ได้นะ ไม่ใช่เป็นแค่เรื่องในโลก Programming หรอก จำไว้ว่า.. “ทุกปัญหามีทางออก” และอัลกอริทึมจะช่วยให้เราค้นพบทางออกที่ดีและมีประสิทธิภาพมากที่สุด แค่ Save Time ได้ก็เจ๋งแล้ว เพราะ ‘เวลา’ เป็นสิ่งที่มีค่ามากที่สุด แถมหมดแล้วหมดเลยนะจ๊ะ.
ปล. หากดีและมีประโยชน์ กดปุ่ม👏🏻ปรบมือ เพื่อเป็นกำลังใจให้ด้วยน๊า ^^