เลือกหัวข้อจากแถบเมนูด้านซ้าย (กรณีหน้าจอเล็กเมนูจะหดกลายเป็นสัญลักษณ์สามขีดอยู่ในแถบเมนูด้านบน) หรือใส่คำค้นหาที่ช่องด้านล่างนี้ เพื่อค้นหาหัวข้อบทความหรือ Tutorial เกี่ยวกับเรื่อง optimization_problems ที่ต้องการ
ในโลกของการคำนวณและการเขียนโปรแกรม หนึ่งในสิ่งที่จำเป็นที่สุดคือการค้นหาวิธีการแก้ปัญหาที่มีประสิทธิภาพ สำหรับปัญหาบางประเภท กลยุทธ์ที่เรียกว่า Greedy Algorithm ก็มีความสำคัญและเป็นที่นิยมอย่างมาก...
Read More →Branch and Bound Algorithm เป็นทฤษฎีที่ใช้ในการแก้ปัญหาการค้นหาที่มีการจำกัดขอบเขต (constrained search problems) และ หาค่าเหมาะสมที่สุด (optimization problems) ในวิทยาการคอมพิวเตอร์ หลักการทำงานของมันคือการแบ่งปัญหาใหญ่ออกเป็นปัญหาย่อยๆ (branching) และการคำนวณขอบเขต (bounding) ที่ประกอบไปด้วยการประเมินค่าสูงสุดและต่ำสุดที่เป็นไปได้ของปัญหาย่อยนั้นๆ ซึ่งช่วยลดขนาดของการค้นหาโดยการตัดสินใจที่ฉลาดในการเลือกสาขาที่จะสำรวจต่อไปหรือทิ้งสาขาที่ไม่น่าจะมีคำตอบที่ดีที่สุดลง...
Read More →คำว่า Greedy ในแง่มุมของอัลกอริทึม (Algorithm) หมายถึงการทำการเลือกที่ดูเหมือนดีที่สุดในขณะนั้นๆ โดยไม่คำนึงถึงผลลัพธ์ระยะยาวที่อาจเกิดขึ้นจากการเลือกนั้น หรือกล่าวอีกนัยหนึ่งคือการหาคำตอบที่ดูดีที่สุดทีละขั้นตอนโดยไม่ย้อนกลับไปพิจารณาการตัดสินใจที่ผ่านมา...
Read More →Greedy Algorithm เป็นวิธีการที่ใช้หาคำตอบของปัญหาโดยตัดสินใจอย่างต่อเนื่องเพื่อหาทางเลือกที่ดีที่สุดในขณะนั้น (ตะกละ หมายถึงการเลือกสิ่งที่ดีที่สุดให้กับตนเองทันทีที่เป็นไปได้) โดยไม่ได้พิจารณาความเป็นไปได้ในอนาคต มันทำงานอย่างหลับหูหลับตาตามปริมาณหรือคุณภาพของอินพุต ในการทำงานแต่ละขั้นตอน มันจะเลือกทางเลือกที่ทำให้ได้ผลลัพธ์ที่ดีที่สุดเท่าที่จะทำได้ในขณะนั้นโดยไม่สนใจถึงผลที่อาจเกิดขึ้นในอนาคต...
Read More →ทุกวันนี้ปัญหาการตัดสินใจหรือการค้นหาคำตอบที่ดีที่สุดภายใต้ข้อจำกัดต่างๆ เป็นสิ่งที่พบเจอได้บ่อยในด้านวิทยาการคอมพิวเตอร์หรือธุรกิจต่างๆ การใช้วิธีคิดที่เป็นระบบและมีเทคนิคเฉพาะเพื่อตอบสนองปัญหาเหล่านี้จึงเป็นสิ่งจำเป็น Branch and Bound Algorithm (หรือแบบจำลองกิ่งก้านและขอบเขต) คือหนึ่งในอัลกอริทึมที่ถูกนำมาใช้เพื่อจัดการกับปัญหาที่มีลักษณะเฉพาะนี้...
Read More →การใช้เทคนิคทางคอมพิวเตอร์ในการแก้ไขปัญหาที่ซับซ้อนได้อย่างมีประสิทธิภาพนั้นสำคัญเสมอมา หนึ่งในอัลกอริทึมที่มักถูกนำมาใช้คือ Branch and Bound Algorithm (B&B) ซึ่งเป็นอัลกอริทึมที่ใช้ในการค้นหาเพื่อหาคำตอบที่สุดยอดในปัญหาต่าง ๆ ที่มีหลายโซลูชั่นที่เป็นไปได้ ใช้เทคนิคการแบ่งแยกปัญหาย่อยและการกำหนดขอบเขตเพื่อจำกัดโซลูชั่นที่ไม่มีความเป็นไปได้ ในบทความนี้เราจะพาไปค้นหาความจริงเกี่ยวกับ B&B พร้อมทั้งฝึกฝนและคิดวิพากษ์วิจารณ์วิธีการนี้อย่างเข้มข้น!...
Read More →ในโลกที่ข้อมูลมีการเติบโตแบบก้าวกระโดดและทวีคูณ คอมพิวเตอร์และอัลกอริทึมต่างๆ ก็ต้องมีการพัฒนาเพื่อรับมือกับประเด็นเช่นว่านี้ หนึ่งในอัลกอริทึมที่มีความสำคัญในการประหยัดเวลาประมวลผลก็คือ Memorization หรือ การคงจำ ในทางคอมพิวเตอร์ ซึ่งได้รับความนิยมในหมู่นักพัฒนาที่ใช้ภาษา Go หรือ Golang เนื่องจากความเรียบง่ายและประสิทธิภาพสูง วันนี้เราจะพาทุกท่านไปทำความเข้าใจว่า Memorization คืออะไร และใช้แก้ปัญหาอะไรบ้าง พร้อมยกตัวอย่างโค้ดใน Golang และวิเคราะห์ความซับซ้อนรวมถึงข้อดีข้อเสียของมัน...
Read More →การเขียนโปรแกรมไม่เพียงแต่เกี่ยวกับการเขียนโค้ดที่ทำงานได้, แต่ยังรวมไปถึงการค้นหาวิธีการที่มีประสิทธิภาพในการแก้ไขปัญหาทางคอมพิวเตอร์ด้วยเช่นกัน. หนึ่งในเทคนิคที่ทรงพลังในการแก้ปัญหาประเภทการหาค่าเหมาะสมที่สุด (Optimization Problems) คือ Branch and Bound Algorithm. ในวันนี้เราจะเจาะลึกไปยังหัวใจของ Algorithm นี้ผ่านภาษา Perl, ภาษาที่แม้จะดูเก่าแก่แต่ก็เต็มไปด้วยความสามารถที่ยอดเยี่ยม....
Read More →ในโลกของการหาคำตอบแก่ปัญหานับพันที่ท้าทาย, algorithm(อัลกอริทึม)เป็นส่วนประกอบสำคัญแห่งโลกการเขียนโปรแกรม หนึ่งในอัลกอริทึมที่สำคัญและได้รับความนิยมในด้านการค้นหาคำตอบที่มีประสิทธิภาพคือ Branch and Bound (แบรนช์ แอนด์ เบาน์ด) Algorithm. วันนี้เราจะมาสำรวจอัลกอริทึมนี้พร้อมทั้งศึกษาการใช้โค้ดตัวอย่างในภาษา Lua และพิจารณา usecase ในโลกจริง รวมถึงวิเคราะห์ความซับซ้อนของวิธีการนี้....
Read More →Dynamic Programming (DP) เป็นเทคนิคหนึ่งในการออกแบบอัลกอริทึมที่โดดเด่นด้วยการแก้ปัญหาที่ซับซ้อนด้วยการแบ่งปัญหาเป็นปัญหาย่อยๆ ที่ง่ายกว่า และนำคำตอบของปัญหาย่อยเหล่านั้นมาใช้เพื่อแก้ปัญหาใหญ่ ซึ่งตัวมันเองนั้นมีศักยภาพในการลดระยะเวลาในการประมวลผลและเพิ่มประสิทธิภาพได้อย่างน่าทึ่ง เหมาะอย่างยิ่งสำหรับการแก้ปัญหาที่ต้องการไปถึงคำตอบที่ชัดเจน ณ จุดหนึ่งในโลกของความจริง อาทิเช่น การหาค่าที่ดีที่สุด (Optimization problems) หรือการตัดสินใจโดยมีเงื่อนไข (Decision problems) เช่น การหาทางแก้ในปัญหาการวา...
Read More →อัลกอริทึม Branch and Bound คืออะไร?...
Read More →Las Vegas Algorithm เป็นหนึ่งในวิธีการออกแบบอัลกอริทึมในหมวดของ randomized algorithms หรืออัลกอริทึมที่มีการใช้ความเป็นสุ่มเข้ามาเกี่ยวข้องในการตัดสินใจหรือการคำนวณ คุณลักษณะเด่นของอัลกอริทึมชนิดนี้คือ มันจะเสนอคำตอบที่ถูกต้องเสมอ เมื่อมันตัดสินใจจะให้คำตอบ (หากไม่สามารถให้คำตอบถูกต้องได้ มันจะไม่ให้คำตอบเลย) แตกต่างจาก Monte Carlo Algorithms ที่อาจจะเสนอคำตอบที่ไม่ถูกต้องได้ แต่มีความเร็วในการทำงาน...
Read More →Las Vegas Algorithm เป็นอัลกอริธึมแบบ randomized ที่ให้ความมั่นใจได้ว่าผลลัพธ์ที่ส่งออกมาจะเป็นคำตอบที่ถูกต้องเสมอ แต่เวลาที่ใช้ในการทำงานของอัลกอริธึมอาจจะไม่คาดเดาได้ แตกต่างจาก Monte Carlo Algorithm ที่อาจจะให้คำตอบผิดพลาดได้ แต่ใช้เวลาที่ค่อนข้างคงที่ Las Vegas Algorithm นั้นนิยมใช้ในการแก้ปัญหาอย่าง QuickSort, Prims Algorithm สำหรับการหา Minimum Spanning Tree, หรือในการ Search ของ Hash Table ที่หากพบ collision จะทำการหาตำแหน่งใหม่อย่างสุ่มจนกว่าจะพบที่ว่าง....
Read More →แค่ได้ยินคำว่า Factorial หลายคนอาจจะกลับคิดถึงห้องเรียนคณิตศาสตร์ที่เต็มไปด้วยเลขนับและสูตรคำนวณที่ยาวเหยียด แต่ในโลกของการเขียนโค้ด ฟังก์ชั่น factorial ก็เป็นพื้นฐานสำคัญที่มีการนำไปใช้งานอย่างกว้างขวาง เช่น ในการคำนวณความน่าจะเป็น สถิติ และอัลกอริทึมต่างๆ น่าเสียดายที่เมื่อตัวเลขเริ่มใหญ่ขึ้น การคำนวณ factorial ด้วยวิธีปกติอาจกลายเป็นปัญหาเรื่องประสิทธิภาพการคำนวณได้...
Read More →