เลือกหัวข้อจากแถบเมนูด้านซ้าย (กรณีหน้าจอเล็กเมนูจะหดกลายเป็นสัญลักษณ์สามขีดอยู่ในแถบเมนูด้านบน) หรือใส่คำค้นหาที่ช่องด้านล่างนี้ เพื่อค้นหาหัวข้อบทความหรือ Tutorial เกี่ยวกับเรื่อง depth-first_search ที่ต้องการ
เมื่อพูดถึงการวิเคราะห์โครงสร้างของเครือข่ายหรือกราฟ (Graph) ในทางคอมพิวเตอร์ หนึ่งในประเด็นสำคัญคือการพิจารณาจุด Articulation (หรือ Cut Vertex) วันนี้เราจะมาพูดถึงการค้นหาจุด Articulation ด้วยภาษา C++ ซึ่งเป็นอัลกอริธึมที่มีความสำคัญในหลากหลายสถานการณ์ทางวิทยาการและปฏิบัติการจริงเลยทีเดียว...
Read More →การค้นหาคือหัวใจหลักของปัญหาหลายๆ อย่างในโลกการโปรแกรม และ Depth-First Search (DFS) เป็นหนึ่งในอัลกอริทึมที่มีชื่อเสียงที่นักพัฒนาซอฟต์แวร์ควรคุ้นเคยเป็นอย่างดี วันนี้ เราจะดำดิ่งไปสู่โลกของ DFS โดยใช้ภาษา C# เพื่อทำความเข้าใจถึงหลักการที่นำไปใช้ในการแก้ปัญหาและเพื่อประยุกต์ใช้ในโลกจริงอย่างไร และเราจะทำการวิเคราะห์ความซับซ้อนและพิจารณาข้อดีข้อเสียของมันด้วย...
Read More →การเขียนโค้ดเพื่อแก้ไขปัญหาที่ซับซ้อนนั้นเป็นทั้งศิลปะและวิทยาศาสตร์ หนึ่งในเทคนิคที่น่าสนใจก็คือ Backtracking ซึ่งเป็นเทคนิคในการแก้ปัญหาแบบค้นหาด้วยเงื่อนไขที่คณิตศาสตร์ให้คำจำกัดความว่าเป็น การค้นหาแบบลึกแบบสามารถถอยหลัง (depth-first search with backtracking) หลักการของมันคือการค้นหาโดยทดลองทีละทางเลือก หากพบว่าทางเลือกนั้นนำไปสู่ทางตันหรือผลลัพธ์ที่ไม่ถูกต้อง โปรแกรมจะทำการ ถอยหลัง (backtrack) เพื่อทดลองทางเลือกอื่นๆ...
Read More →การค้นหาในโลกของการเขียนโปรแกรมนั้นไม่ได้จำกัดเพียงแค่ข้อมูลในฐานข้อมูลหรือไฟล์เท่านั้น แต่ยังครอบคลุมถึงการค้นพบเส้นทางหรือวิธีการที่เป็นไปได้ต่างๆ เพื่อแก้ไขปัญหาหรือเข้าใจปัญหาที่ซับซ้อนมากขึ้น ตัวอย่างหนึ่งที่เป็นที่นิยมในด้านนี้คือ State Space Search Algorithm ซึ่งเป็นวิธีการที่ใช้ในการหาคำตอบของปัญหาที่มีหลายสถานะหรือ state ที่เป็นไปได้ วันนี้เราจะพูดถึงความสำคัญและความเป็นมาของ State Space Search ในภาษา C# พร้อมดูตัวอย่างโค้ดและการใช้งานในโลกจริง...
Read More →ในทางทฤษฎีกราฟ, Articulation Point (หรือเรียกอีกชื่อว่า Cut Vertex) คือจุดหรือโหนดในกราฟที่ถ้าหากเราลบมันออกจากกราฟ จะทำให้กราฟที่เชื่อมต่อกันกลายเป็นกราฟที่ไม่เชื่อมต่อกัน (Disconnected Graph) การหา Articulation Points นั้นเป็นองค์ประกอบสำคัญในการวิเคราะห์เครือข่ายต่างๆ ไม่ว่าจะเป็นเครือข่ายสังคม โครงสร้างพื้นฐานของเมือง หรือแม้แต่ระบบคอมพิวเตอร์...
Read More →ทุกวันนี้ปัญหาการตัดสินใจหรือการค้นหาคำตอบที่ดีที่สุดภายใต้ข้อจำกัดต่างๆ เป็นสิ่งที่พบเจอได้บ่อยในด้านวิทยาการคอมพิวเตอร์หรือธุรกิจต่างๆ การใช้วิธีคิดที่เป็นระบบและมีเทคนิคเฉพาะเพื่อตอบสนองปัญหาเหล่านี้จึงเป็นสิ่งจำเป็น Branch and Bound Algorithm (หรือแบบจำลองกิ่งก้านและขอบเขต) คือหนึ่งในอัลกอริทึมที่ถูกนำมาใช้เพื่อจัดการกับปัญหาที่มีลักษณะเฉพาะนี้...
Read More →การค้นหาคำตอบในสภาพแวดล้อมที่ซับซ้อนเสมือนการเดินทางในป่าที่มืดมิดหากไม่มีแผนที่หรือเข็มทิศ เทคนิคการค้นหาใน State Space คือหนึ่งในการบุกเบิกเส้นทางที่จะนำพาเราไปยังคำตอบที่ต้องการ ในบทความนี้ เราจะทำความรู้จักกับ algorithm การค้นหาใน State Space ว่าเป็นอย่างไร จะใช้มันเพื่อแก้ปัญหาอะไรได้บ้าง พร้อมทั้งให้ตัวอย่าง code โดยใช้ภาษา VB.NET และวิเคราะห์ความซับซ้อนของมัน พร้อมยกตัวอย่างการใช้งานในชีวิตจริงและข้อดีข้อเสียของมัน...
Read More →ในโลกของการเขียนโปรแกรมและวิเคราะห์ข้อมูล กราฟเป็นโครงสร้างข้อมูลที่มีความสำคัญอย่างมากในการแสดงความสัมพันธ์ระหว่างองค์ประกอบต่างๆ หนึ่งในแนวคิดในทฤษฎีกราฟคือ จุดยึด (Articulation Points) ซึ่งมีความหมายสำคัญในหลากหลายสถานการณ์ทางวิชาการและประยุกต์ใช้ในเหตุการณ์จริง เราจะมาพูดถึงความหมายของ Articulation Points, วิธีการค้นหา, รวมทั้งประโยชน์และข้อจำกัดในการใช้งานพร้อมแบ่งปันตัวอย่างโค้ดที่เขียนด้วยภาษา Python กันครับ...
Read More →ในโลกของการพัฒนาซอฟต์แวร์ การเลือกใช้อัลกอริทึม (Algorithm) ที่เหมาะสมกับปัญหาที่เราต้องแก้ไข เป็นสิ่งสำคัญมาก หนึ่งในอัลกอริทึมที่หลายๆ คนอาจมองข้าม คือ Backtracking ซึ่งเป็นวิธีที่ให้เราทดลองทุกๆ คาดเดาเพื่อหาคำตอบในปัญหาที่มีโครงสร้างเป็นต้นไม้หรือกราฟ ในบทความนี้ เราจะมาทำความรู้จักกับ Backtracking ผ่านภาษา Golang ซึ่งมีความสามารถในการเขียนโปรแกรมได้อย่างปลอดภัย รวดเร็ว และมีประสิทธิภาพ...
Read More →ในโลกของการเขียนโปรแกรม หนึ่งในโจทย์ที่น่าท้าทายคือการทำความเข้าใจและประยุกต์ใช้แนวคิดพื้นฐานของกราฟ (Graph) เพื่อแก้ไขปัญหาที่หลากหลาย และหนึ่งในความสามารถที่สำคัญคือการค้นหาจุดวิกฤต (Articulation Points) และในบทความนี้ เราจะไปรู้จักกับ Articulation Points ใช้ Golang ในการค้นหาวิธีการ พร้อมยกตัวอย่างการทำงาน และเมื่อจบการอ่าน คุณจะเข้าใจความสำคัญของมันและเห็นคุณค่าในการศึกษาโปรแกรมมิ่งที่ EPT!...
Read More →การเขียนโปรแกรมไม่ได้มีแค่บรรทัดโค้ดที่สวยงามและทำงานได้ แต่ยังรวมถึงการเลือกใช้ถูกรัญศาสตร์และอัลกอริทึมที่เหมาะสม หนึ่งในความท้าทายที่สำคัญในการเขียนโปรแกรมคือการค้นหาจุด Articulation หรือจุดตัดในกราฟ (Articulation Points), เหมาะสำหรับผู้ที่ต้องการพัฒนาทักษะการทำงานกับโครงสร้างข้อมูลที่ซับซ้อน เช่น ที่เรียนได้ที่ EPT นักศึกษาโปรแกรมมิ่งหลักสูตรที่อุ่นเพื่อนำเสนออัลกอริทึมการเรียนรู้ลึกล้ำเชิงทฤษฎีไปจนถึงการนำไปประยุกต์ใช้จริง...
Read More →State Space Search เป็นหนึ่งในอัลกอริทึมที่ใช้ในการค้นหาหรือแก้ไขปัญหาทางคณิตศาสตร์หรือปัญหาการตัดสินใจ โดยมันจะสำรวจพื้นที่ของสถานะที่เป็นไปได้ทั้งหมด (state space) จนกระทั่งได้ผลลัพธ์หรือสถานะปลายทางที่ต้องการ ตัวอย่างเช่นการค้นหาเส้นทางจากจุด A ไปยังจุด B, การแก้ปัญหาเกมต่าง ๆ อย่างเช่น Eight Queen Puzzle, Sudoku หรือปัญหาเชิงตรรกะอื่น ๆ...
Read More →อัลกอริทึม Branch and Bound คืออะไร?...
Read More →ในโลกของการเขียนโปรแกรม ปัญหาต่างๆ เช่น การค้นหาเส้นทางที่สั้นที่สุด หรือการตรวจสอบว่าเครือข่ายคอมพิวเตอร์มีจุดไหนที่เปราะบางหากสูญเสียการเชื่อมต่อไป ล้วนแล้วแต่สามารถเปิดเผยให้เห็นได้ด้วยการศึกษาและวิเคราะห์โครงสร้างข้อมูลที่เรารู้จักกันในชื่อ กราฟ(graph) หนึ่งในปัญหาที่น่าสนใจคือ การค้นหา articulation points หรือจุดเปราะบางในกราฟ ซึ่งในบทความนี้ เราจะพูดถึงวิธีการไขปัญหานี้ด้วยภาษา Rust พร้อมอธิบายถึงแนวคิดของอัลกอริธึม ความซับซ้อน(complexity) และข้อดีข้อเสียของมัน...
Read More →การเดินทางคือการหาเส้นทางที่ดีที่สุดจากจุดหนึ่งไปยังอีกจุดหนึ่ง ไม่ว่าจะเป็นในเกมกลยุทธ์, การนำทาง GPS หรือแม้กระทั่งในระบบคำนวณเส้นทางสำหรับหุ่นยนต์ และในโลกของการเขียนโปรแกรมนั้น A* Algorithm คือหนึ่งในตัวเลือกยอดนิยมที่มาช่วยค้นหาเส้นทางด้วยวิธีที่ฉลาดและรวดเร็ว...
Read More →ปัญหาซึ่งนักวิทยาการคอมพิวเตอร์และวิศวกรรมนั้นต้องเผชิญอยู่บ่อยครั้งก็คือการหาสังข์การไหลของเครือข่าย (Network Flow) กล่าวคือปัญหาที่เราต้องพยายามหาจำนวนการไหลสูงสุดที่เป็นไปได้ตามเส้นทางที่ซับซ้อนภายในเครือข่าย อัลกอริธึมที่คนทั่วไปใช้ในการแก้ปัญหาประเภทนี้คือ Ford-Fulkerson Algorithm นั่นเองครับผม!...
Read More →ในยุคที่ข้อมูลและการเชื่อมต่อของเครือข่ายกลายเป็นส่วนสำคัญของชีวิตเรา การวิเคราะห์และการจัดการการไหลของข้อมูลนั้นเป็นเรื่องที่ไม่อาจมองข้ามได้ วันนี้เราจะมาพูดถึงอัลกอริทึมที่มีอิทธิพลในการแก้ไขปัญหาการหา Maximum Flow (Max Flow) ในเครือข่าย นั่นคืออัลกอริทึม Ford-Fulkerson โดยเราจะชำแหละและทดลองการใช้งานด้วยภาษา Golang ซึ่งเป็นภาษาที่มีความปลอดภัยสูงและมีประสิทธิภาพเหมาะสมกับการประมวลผลคำนวณที่ท้าทายเช่นนี้...
Read More →Ford-Fulkerson Algorithm เป็นอัลกอริธึมที่ออกแบบมาเพื่อแก้ปัญหาการหาค่าการไหลสูงสุด (Maximum Flow) ในเครือข่ายการไหล (Flow Network) ปัญหานี้มีหลากหลายในโลกปัจจุบัน เช่น การกระจายสินค้า, การทำระบบช่วยเหลือฉุกเฉิน, ระบบขนส่งน้ำมัน หรือแม้แต่การจัดการข้อมูลในระบบคอมพิวเตอร์ คำถามพื้นฐานที่อัลกอริธึมนี้ตอบได้คือ เราสามารถส่งสิ่งใดบ้างจากจุด A ไปยังจุด B ได้มากที่สุดเท่าใด ทีนี้ ลองมาดูขั้นตอนและยกตัวอย่างการทำงานด้วย JavaScript กันเลย!...
Read More →ในโลกของการเขียนโปรแกรมที่สลับซับซ้อน สิ่งหนึ่งที่ยังคงยึดหลักความสำคัญเหนืออื่นใดก็คือ ข้อมูล และวิธีการจัดการและเข้าถึงข้อมูลเหล่านั้นอย่างมีประสิทธิภาพ หนึ่งในโครงสร้างข้อมูลที่ให้ภาพรวมและมุมมองในการเชื่อมโยงข้อมูลได้อย่างดีที่สุดก็คือ กราฟ และนี่คือจุดเริ่มต้นของ Graph Algorithms ซึ่งเป็นส่วนสำคัญที่ใช้ในการวิเคราะห์และแก้ไขปัญหาทางคอมพิวเตอร์ที่เกี่ยวข้องกับการเชื่อมโยงข้อมูลนั้นๆ...
Read More →เมื่อพูดถึงการเขียนโปรแกรมและอัลกอริทึม การค้นหา (Search Algorithms) คือหัวใจสำคัญหนึ่งที่ทุกโปรแกรมเมอร์ควรศึกษา อัลกอริทึมเหล่านี้ช่วยให้สามารถค้นหาข้อมูลจากชุดข้อมูลมหาศาลได้อย่างเร็วและมีประสิทธิภาพ ในบทความนี้ เราจะมาสำรวจ 5 อัลกอริทึมการค้นหาที่สำคัญ พร้อมยกตัวอย่างการใช้งานในชีวิตจริงเพื่อให้เข้าใจอัลกอริทึมเหล่านี้อย่างลึกซึ้ง...
Read More →การเป็นนักพัฒนาซอฟต์แวร์ไม่ใช่เรื่องของการเขียนโค้ดเท่านั้น แต่เป็นการเข้าใจความต้องการ, การแก้ปัญหาและการประยุกต์ใช้หลักการทางคณิตศาสตร์เพื่อพัฒนาโปรแกรมที่มีประสิทธิภาพและเชื่อถือได้ ในบทความนี้ เราจะมาพูดถึง 5 algorithms พื้นฐานที่เป็นสิ่งจำเป็นที่นักพัฒนาทั้งหลายควรทำความรู้จัก เพื่อเสริมสร้างทักษะการเขียนโค้ด และนำไปใช้ในการพัฒนาโปรแกรมต่างๆ ได้อย่างมีประสิทธิภาพ...
Read More →การเขียนบทความเกี่ยวกับการสร้างกราฟทิศทางด้วยตนเองโดยไม่ใช้ไลบรารี ด้วยการใช้ linked list สำหรับการเก็บ adjacency list ในภาษา Java...
Read More →สวัสดีค่ะ ผู้อ่านทุกท่านที่มีความสนใจในโลกของการเขียนโปรแกรม วันนี้เราจะมาทำความรู้จักกับโครงสร้างข้อมูลพื้นฐานที่มีชื่อว่า Stack โดยเฉพาะการสร้าง Stack ขึ้นมาเองในภาษา Golang โดยไม่ใช้ library สำเร็จรูป และทำความเข้าใจการทำงานของ Stack ผ่านฟังก์ชันสำคัญอย่าง pop, push, และ top นอกจากนี้เราจะยกตัวอย่าง usecase ในโลกจริงที่ Stack มีบทบาทอย่างไร และมาร่วมกันเรียนรู้เทคนิคการเขียนโปรแกรมที่มีการใช้ Stack เพื่อแก้ปัญหาต่างๆ ที่ซับซ้อน ซึ่งหากคุณมีความสนใจที่จะเรียนรู้เทคนิคเหล่านี้ระดับลึกยิ่งขึ้น ท...
Read More →การเขียนโค้ดเพื่อสร้างกราฟแบบไม่มีทิศทาง (Undirected Graph) ด้วยตัวเองในภาษา JavaScript สามารถทำได้โดยการใช้โครงสร้างข้อมูลประเภท Linked List เพื่อเก็บรายการ adjacency (Adj) หรือรายการที่เชื่อมโยง. ในบทความนี้ผมจะอธิบายเกี่ยวกับวิธีการสร้างกราฟแบบไม่มีทิศทางโดยใช้ linked list เป็นการเก็บ adjacency list, พร้อมด้วยตัวอย่างโค้ด 3 ตัวอย่างและอธิบายการทำงาน. นอกจากนี้ยังจะยกตัวอย่างการใช้งานกราฟในโลกจริงเพื่อประยุกต์ให้เห็นภาพมากขึ้น....
Read More →การเขียนโปรแกรมนั้นไม่ได้เป็นเพียงแค่การเรียนรู้ภาษาและทำตามคำสั่งเท่านั้น แต่ยังรวมถึงความคิดสร้างสรรค์ในการออกแบบโครงสร้างข้อมูลที่เหมาะสมกับปัญหาที่จะแก้ไขด้วย วันนี้เรามาดูกันว่าภาษา Rust สามารถช่วยให้เราสร้างโครงสร้าง Double Ended Queue หรือที่เรียกว่า Deque (อ่านว่า Deck) จากศูนย์โดยไม่ใช้ไลบรารีที่มีอยู่แล้วได้อย่างไร...
Read More →