เลือกหัวข้อจากแถบเมนูด้านซ้าย (กรณีหน้าจอเล็กเมนูจะหดกลายเป็นสัญลักษณ์สามขีดอยู่ในแถบเมนูด้านบน) หรือใส่คำค้นหาที่ช่องด้านล่างนี้ เพื่อค้นหาหัวข้อบทความหรือ Tutorial เกี่ยวกับเรื่อง knapsack ที่ต้องการ
Branch and Bound Algorithm เป็นทฤษฎีที่ใช้ในการแก้ปัญหาการค้นหาที่มีการจำกัดขอบเขต (constrained search problems) และ หาค่าเหมาะสมที่สุด (optimization problems) ในวิทยาการคอมพิวเตอร์ หลักการทำงานของมันคือการแบ่งปัญหาใหญ่ออกเป็นปัญหาย่อยๆ (branching) และการคำนวณขอบเขต (bounding) ที่ประกอบไปด้วยการประเมินค่าสูงสุดและต่ำสุดที่เป็นไปได้ของปัญหาย่อยนั้นๆ ซึ่งช่วยลดขนาดของการค้นหาโดยการตัดสินใจที่ฉลาดในการเลือกสาขาที่จะสำรวจต่อไปหรือทิ้งสาขาที่ไม่น่าจะมีคำตอบที่ดีที่สุดลง...
Read More →Brute force หรือการลองทุกโอกาสที่เป็นไปได้เป็นหนึ่งในวิธีพื้นฐานที่สุดในการแก้ปัญหาการเขียร์โค้ด. วิธีนี้มักเป็นทางเลือกแรกๆ ก่อนที่เราจะเข้าสู่วิธีการที่ซับซ้อนมากขึ้น. การสร้างเซตย่อยทั้งหมด (Generating All Subsets) เป็นหนึ่งในปัญหาที่สามารถใช้การ Brute force ในการแก้ได้....
Read More →อัลกอริธึม Branch and Bound คือหนึ่งในเทคนิคการค้นหาแบบเป็นระบบสำหรับปัญหาการตัดสินใจแบบเชิงเลข (Combinatorial Optimization Problems) ที่มีวัตถุประสงค์เพื่อหาคำตอบที่เหมาะสมที่สุด (Optimal Solution) อัลกอริธึมนี้ประกอบด้วยสองส่วนหลักๆ คือการแบ่งสาขา (Branching) เพื่อสำรวจความเป็นไปได้ของคำตอบ และการกำหนดขอบเขตสูงสุดหรือต่ำสุด (Bounding) เพื่อตัดทางเลือกที่ไม่จำเป็นออกไป...
Read More →Branch and Bound Algorithm เป็นอัลกอริธึมที่ออกแบบมาเพื่อการแก้ไขปัญหาการตัดสินใจที่มีข้อจำกัด (Constrained Decision Problems) เช่น ปัญหา Traveling Salesman Problem (TSP), ปัญหา Assignment, ปัญหา Knapsack ฯลฯ แนวคิดหลักของอัลกอริธึมนี้คือการแบ่งปัญหา (Branching) และคำนวณขอบเขตหรือการประเมินค่า (Bounding) เพื่อทำการตัดทอนความเป็นไปของคำตอบที่จะไม่ใช่คำตอบที่เหมาะสมที่สุด (Pruning) เพื่อลดการค้นหาในช่วงที่ไม่จำเป็น ทำให้สามารถหาคำตอบที่ดีที่สุดได้ภายในเวลาที่เหมาะสม...
Read More →การเขียนโปรแกรมไม่ใช่เรื่องง่าย เหมือนการหาทางออกในเขาวงกต, บางครั้งทางลัดที่เราหาอยู่นั้นก็อาจจะไม่ใช่ทางที่ดีที่สุดเสมอไป นี่คือจุดที่ Greedy Algorithm (อัลกอริทึมตะกละ) ก้าวเข้ามามีบทบาท กับหลักการง่ายๆที่ว่า เลือกสิ่งที่ดูดีที่สุดในขณะนั้นๆ...
Read More →โลกของการเขียนโปรแกรมเต็มไปด้วยความท้าทายและปัญหาที่ต้องการการแก้ไขอย่างสร้างสรรค์และมีประสิทธิภาพ หนึ่งในเครื่องมือที่ช่วยในการแก้ไขปัญหาเหล่านี้ได้อย่างมีประสิทธิผลคือ Branch and Bound Algorithm วันนี้เราจะมาพูดถึง Branch and Bound ทั้งมุมมองทางการวิเคราะห์, การใช้งานจริง และตัวอย่างโค้ดด้วยภาษา C# ที่สามารถสะท้อนถึงพลังของการใช้งาน Algorithm นี้ได้อย่างชัดเจน...
Read More →Dynamic Programming (DP) เป็นรูปแบบหนึ่งของ algorithm ที่ใช้ในการแก้ปัญหาที่ซับซ้อน โดยหลักการทำงานคือการแบ่งปัญหาใหญ่ออกเป็นปัญหาย่อยๆ เพื่อที่จะได้คำตอบอย่างรวดเร็วและมีประสิทธิภาพ ในการใช้งาน DP เรามักจะเก็บผลลัพธ์ของปัญหาย่อยไว้ที่โปรแกรมคำนวณเพื่อใช้งานในอนาคต (memoization) เพื่อลดขั้นตอนการคำนวณซ้ำๆ ที่ไม่จำเป็น...
Read More →ทุกวันนี้ปัญหาการตัดสินใจหรือการค้นหาคำตอบที่ดีที่สุดภายใต้ข้อจำกัดต่างๆ เป็นสิ่งที่พบเจอได้บ่อยในด้านวิทยาการคอมพิวเตอร์หรือธุรกิจต่างๆ การใช้วิธีคิดที่เป็นระบบและมีเทคนิคเฉพาะเพื่อตอบสนองปัญหาเหล่านี้จึงเป็นสิ่งจำเป็น Branch and Bound Algorithm (หรือแบบจำลองกิ่งก้านและขอบเขต) คือหนึ่งในอัลกอริทึมที่ถูกนำมาใช้เพื่อจัดการกับปัญหาที่มีลักษณะเฉพาะนี้...
Read More →การเขียนโปรแกรมนั้นไม่ใช่แค่การแก้ปัญหาบนหน้าจอคอมพิวเตอร์เท่านั้น แต่ยังเป็นศาสตร์ที่ให้เรานักพัฒนาได้คิดเชิงวิเคราะห์ และต้องเลือกใช้กลยุทธ์การโปรแกรมที่เหมาะสมเพื่อให้ได้ผลลัพธ์ที่คุ้มค่าทั้งในเรื่องเวลาและทรัพยากร หนึ่งในกลยุทธ์เหล่านั้นคือ กรีดี้ อัลกอริทึม (Greedy Algorithm) ซึ่งในบทความนี้เราจะศึกษากันถึงมิติต่าง ๆ ของกรีดี้ อัลกอริทึม และพิจารณาคุณค่าของมันต่อการเขียนโปรแกรมวิชาการอย่างละเอียดยิบ...
Read More →การใช้เทคนิคทางคอมพิวเตอร์ในการแก้ไขปัญหาที่ซับซ้อนได้อย่างมีประสิทธิภาพนั้นสำคัญเสมอมา หนึ่งในอัลกอริทึมที่มักถูกนำมาใช้คือ Branch and Bound Algorithm (B&B) ซึ่งเป็นอัลกอริทึมที่ใช้ในการค้นหาเพื่อหาคำตอบที่สุดยอดในปัญหาต่าง ๆ ที่มีหลายโซลูชั่นที่เป็นไปได้ ใช้เทคนิคการแบ่งแยกปัญหาย่อยและการกำหนดขอบเขตเพื่อจำกัดโซลูชั่นที่ไม่มีความเป็นไปได้ ในบทความนี้เราจะพาไปค้นหาความจริงเกี่ยวกับ B&B พร้อมทั้งฝึกฝนและคิดวิพากษ์วิจารณ์วิธีการนี้อย่างเข้มข้น!...
Read More →การเขียนโปรแกรมเพื่อแก้ไขปัญหาทางคอมพิวเตอร์นั้นเป็นเรื่องที่ท้าทายและต้องใช้การคำนวณอย่างมีหลักการ หนึ่งในแนวทางการเขียนโปรแกรมที่มีความสำคัญและประสิทธิภาพสูงคือการใช้งานอัลกอริธึมแบบ Dynamic Programming ที่นี่ที่ EPT เราจะพาคุณไปสำรวจการใช้งาน Dynamic Programming ด้วยภาษา Golang และอธิบายถึงความสามารถและวิธีใช้งานของมันในการแก้ปัญหาในโลกแห่งความเป็นจริง...
Read More →การเขียนโปรแกรมเพื่อแก้ไขปัญหาทางคณิตศาสตร์หรือการคำนวณในโลกปัจจุบัน นับเป็นทักษะที่พึงประสงค์สำหรับนักพัฒนาซอฟต์แวร์ทุกคน หนึ่งในอัลกอริทึมที่มีประสิทธิภาพและดำเนินการได้ง่ายคือ Greedy Algorithm (อัลกอริทึมตะกละ) วันนี้เราจะมาพูดถึงคุณสมบัติพิเศษของอัลกอริทึมนี้ และทบทวนวิธีการเขียนโปรแกรมด้วยภาษา Perl เพื่อแก้ไขปัญหาโดยใช้อัลกอริทึมตะกละ...
Read More →การเขียนโปรแกรมไม่เพียงแต่เกี่ยวกับการเขียนโค้ดที่ทำงานได้, แต่ยังรวมไปถึงการค้นหาวิธีการที่มีประสิทธิภาพในการแก้ไขปัญหาทางคอมพิวเตอร์ด้วยเช่นกัน. หนึ่งในเทคนิคที่ทรงพลังในการแก้ปัญหาประเภทการหาค่าเหมาะสมที่สุด (Optimization Problems) คือ Branch and Bound Algorithm. ในวันนี้เราจะเจาะลึกไปยังหัวใจของ Algorithm นี้ผ่านภาษา Perl, ภาษาที่แม้จะดูเก่าแก่แต่ก็เต็มไปด้วยความสามารถที่ยอดเยี่ยม....
Read More →Greedy Algorithm เป็นชนิดของอัลกอริธึมที่เลือกทำการตัดสินใจทีละขั้นตอน, โดยที่ที่แต่ละขั้นตอนมันจะเลือกสิ่งที่ดูเหมือนจะเป็นตัวเลือกที่ดีที่สุดในขณะนั้นไปเรื่อยๆ โดยมิได้พิจารณาถึงผลกระทบในระยะยาวที่จะตามมา ซึ่งบางครั้งอาจทำให้ไม่ได้ผลลัพธ์ที่เป็นคำตอบที่ดีที่สุดแต่แล้วก็ยังได้ผลลัพธ์ที่ ดีพอ สำหรับปัญหาที่กำลังจัดการอยู่...
Read More →Dynamic Programming (DP) คือเทคนิคการเขียนโปรแกรมที่ใช้การแบ่งปัญหาใหญ่ออกเป็นปัญหาย่อยๆ ที่มีลักษณะซ้ำกันและจัดเก็บคำตอบเหล่านั้นเพื่อใช้ในการคำนวณภายหลัง นี่คือหัวใจสำคัญของการทำงานเชิงกลยุทธ์ที่ทำให้สามารถแก้ไขปัญหาที่มีความซับซ้อนได้ดีขึ้น...
Read More →อัลกอริทึม Branch and Bound คืออะไร?...
Read More →การเขียนโปรแกรมแบบไดนามิก Dynamic programming ...
Read More →