แก้ปัญหาการทอนเงินด้วย Dynamic Programming
คิดว่าทุกคนต้องเคยจ่ายเงิน ทอนเงินกันแน่ๆ ใช่ไหมครับ เวลาทอนเงินเนี่ย อาจจะมีหลายๆ
คนอยากได้เงินทอนที่เหรียญน้อยๆ เพราะขี้เกียจแบกเหรียญไปไหนมาไหนมากๆ วิธีที่ใช้กันส่วนใหญ่ก็น่าจะเป็น
การใช้เหรียญใหญ่ๆ (มีค่าเงินมากๆ) ให้หมดก่อนจนกระทั่งจำนวนที่มีมันใช้เหรียญใหญ่ๆ
ทอนไม่ได้ แล้วค่อยใช้เหรียญเล็กๆ ตาม แบบนี้ก็น่าจะได้เงินทอนที่มีจำนวนเหรียญน้อยที่สุด
ดังตัวอย่าง
ต้องการทอนเงินจำนวน 17 บาท ก็ต้องใช้เหรียญสิบบาท 1 เหรียญ เหรียญห้าบาท 1 เหรียญ
เหรียญบาท 2 เหรียญ (กรณีไม่คิดว่ามีเหรียญสองบาทนะครับ) Read more
การเขียนโปรแกรมเพื่อสุ่มลำดับ
การเขียนโปรแกรมเพื่อสุ่มลำดับตัวเลขนั้นมีการใช้งานค่อนข้างบ่อย โดยเฉพาะสำหรับคนที่อยากเขียนเกมส์ครับ อัลกอริทึมนี้คิดว่าควรจะต้องเขียนจนจำได้เลยทีเดียว และีในการเขียนโปรแกรมจำลองต่างๆ อย่างเ่ช่นถ้าเราต้องการจำลองรูปแบบ DNA แบบต่างๆ โดยการเอาตัวอักษรมาเรียงกัน (G, A, C, T) นั้นก็จำต้องใช้อัลกอริทึมที่กำลังจะกล่าวถึงนี้ครับ Read more
Permutation การเรียงสับเปลี่ยนข้อมูล
ปัญหาเรื่องการ Permutation นี่คิดว่าถ้าใครเคยเรียนวิชาโปรแกรมมิ่งลึกๆ แล้วต้องเคยได้เจอ หรือได้ผ่านหูผ่านตาบ้างล่ะครับ เป็นโจทย์ปัญหาที่อาจารย์มักจะชอบเอาไว้สอน Recursive และการคิดแบบ Recursive ซึ่งผมคิดว่ามันถือว่ายากพอสมควรเลยทีเดียวล่ะครับ
อย่างไรก็ตาม วิธีในการคิด Permutation อย่างง่ายๆ นั้นก็มีอยู่ครับ วิธีการในการหา Permutation นั้นอันที่จริงแล้วมีอยู่หลายวิธีด้วยกันครับ ซึ่งหาอ่านได้จากแหล่งอ้างอิงด้านล่างของบทความครับ แต่วิธีที่ผมจะเอามาให้ดูนี้ ใช้งานได้ค่อนข้างดี และเขียนโค้ดไม่เยอะด้วยครับ หรือไม่ต้องใช้เทคนิคพิสดารอะไรมากมาย ใช้หลักการง่ายๆ เพียงไม่กี่ข้อเ่ท่านั้นครับ Read more
Grayscale เขียนโปรแกรมเพื่อแปลงภาพสีเป็นภาพขาวดำ
เทอมนี้ผมลงเรียนวิชา Digital Image Processing ตอนแรกผมลังเลว่าจะเขียนบทความแนวนี้ลงเว็บถังโค้ดดีรึเปล่า แต่ในเมื่อมันเป็น “โปรแกรมมิ่ง ฉบับภาษาไทย” ก็เลยคิดว่าไม่น่าจะมีปัญหาอะไร
บทความนี้จะว่าด้วยการเขียนโปรแกรมเพื่อแปลงภาพสีที่ใช้สีในรูปแบบ RGB ไปเป็นภาพขาวดำ ภาษาที่จะใช้ประกอบตัวอย่างเป็นภาษา Java ทั้งหมด ดังนั้นถ้าผู้อ่านมีความรู้พื้นฐานเกี่ยวกับการพัฒนาโปรแกรมด้วยภาษา Java ก็จะได้รับประโยชน์จากบทความนี้เต็มที่ครับ
การหาค่า Min และ Max แบบเร็วสุดๆ
ก่อนอื่นอย่าเพิ่งแปลกใจนะครับ ว่าทำไมผมถึงนำเรื่องนี้มาเขียน จริงๆ การหา Min และ Max นั้น Optimal Performance หรือความเร็วสูงสุดที่ควรจะทำได้ทางทฤษฎีนั้นอยู่ใน O(n) เพราะว่าเราจำเป็นต้องนำข้อมูลทุกตัวมาเปรียบเทียบกัน ไม่มีทางที่เราจะหาค่าสูงสุดหรือต่ำสุดได้ โดยไม่ดูข้อมูลให้ครบทุกตัวเสียก่อนครับ ซึ่งในทางปฎิบัติแล้ว เราก็มักจะเขียนกันโดยการใช้ For Loop วนหาเอา แล้วก็หยิบข้อมูลมาเปรียบเทียบทีละตัวซึ่งก็จะได้ประสิทธิภาพอยู่ใน O(n) อยู่แล้ว แต่วิธีที่กำลังจะเขียนถึงต่อไปนี้ จะเป็นการเพิ่มประสิทธิภาพใน O(n) เนี่ยแหล่ะครับ ให้เร็วยิ่งขึ้น Read more
Bubble Sort
Bubble Sort หรือการเรียงแบบฟองสบู่นั้น ถือว่าเป็นวิธีการเรียงลำดับที่พื้นฐานและเขียนใช้งานง่ายที่สุดวิธีหนึ่งเลยครับ สำหรับคนที่หัดเขียนโปรแกรมใหม่ๆ วิธีนี้มักจะเป็นวิธีแรกที่นึกถึงในการเรียงลำดับข้อมูลครับ
List Comprehension
ลิสต์คอมพรีเฮนชั่น (list comprehension) แปลเป็นไทยว่าความเข้าใจลิสต์ คือความสามารถในไวยากรณ์ของไพธอนที่ให้เราสามารถสร้างลิสต์ใหม่จากลิสต์ที่มีอยู่เดิมได้ง่ายขึ้น เป็นทางเลือกอีกทางให้เราสามารถเขียนโปรแกรมที่อ่านง่ายและเร็วขึ้นกว่าการใช้ for…in อีกด้วย Read more
Sorting Algorithms วิธีการเรียงลำดับแบบต่างๆ
วันนี้ เราจะมาพูดกันถึงเรื่องวิธีการเรียงลำดับข้อมูล (Sorting Algorithms) ซึ่งใช้กันอย่างมากไม่ว่าในปัญหาใดๆ ก็ตาม ตัวอย่างเช่น การเรียงลำดับคนที่เข้าแถวเคารพธงชาติตามลำดับความสูง, การเรียงลำดับหนังสือบนชั้นหนังสือตามลำดับความสูงของหนังสือ, หรือการเรียงลำดับนักเรียนตามคะแนนสอบ เป็นต้น ปัญหาเหล่านี้ เราพบกันอยู่ทุกๆ วัน โดยที่บางครั้งเราไม่ได้รู้ว่า เรากำลังใช้มันอยู่ ?? นั่นก็อาจจะเป็นเพราะ เราเรียงลำดับของที่มีจำนวนชิ้นน้อยๆ ทำให้ไม่รู้สึกว่าจำเป็นต้องใช้วิธีการคิดแบบ อัลกอริทึม ที่ยากๆ สักเท่าไร Read more
การขยายขนาด Array ใน VB ด้วย ReDim
หลายคนอาจจะไม่รู้ว่า Array ใน Visual Basic นั้นสามารถปรับขยายขนาดได้ตามต้องการด้วยการใช้คำสั่ง ReDim (re-dimension) นะครับ ในบางกรณีนั้นเป็นความสามารถที่มีประโยชน์มากเลยทีเดียว
Read more
