สวัสดีครับ อ.วิบุล และบ่าววีร์

  • ดีจังครับผม วันนี้มาดูได้อ่านคำตอบ และมีน้องบ่าววีร์มาร่วมด้วยครับ ฝากหวัดดีน้องบ่าววีร์ด้วยครับ
  • ผมมีตัวอย่างหนึ่งครับ ตอนนั้น เรียนวิชาการออกแบบอัลกอริทึม อ.ให้ออกแบบการบวกตัวเลขจำนวนเต็มกันจาก  A  ถึง B โดยที่ A<B
  • หากเราเล่นกันดื้อๆ เลยเจอตัวเลขระหว่างนั้นซักพันล้านตัว นี่ก็จุกครับ
  • แต่หากประยุกต์ใช้  N(N+1)/2 เข้าไป นี่แทบไม่ทันได้หายใจสุดอัลวีโอลัส คำตอบก็ออกมาแล้วครับ
  • นี่หล่ะครับ ข้อดีของคณิตศาสตร์และสูตรต่างๆ
  • อย่างวิธีการหาค่า Prime number นี่ก็สนุกที่สุดครับ โดยศึกษาพื้นฐาน แล้วให้เด็กคิดต่อยอดจากพื้นฐานง่ายๆ ก่อน จากนั้นค่อยเสริมวิธีการอื่นๆ ที่คนอื่นคิดมา แล้วให้เทียบกับเราที่คิดใหม่ได้ แล้วเพิ่มมาเรื่อยๆ ว่าใครเร็วกว่า จะเป็นการแข่งขันแบบเสริมเกื้อกูลปัญญาให้กับเด็กครับ
  • การเขียนโปรแกรม ผมพบหลายๆ กรณีเพราะผมก็เขียนโปรแกรมแบบจะหาทางทำให้โปรแกรมเร็วเช่นกันครับ พอไปใช้โปรแกรมคนอื่นเขียน ทำงานคล้ายๆ กัน แต่เอ ทำไมมันเร็วขนาดนั้นหนอทำให้คิดถึงโปรแกรมที่ตนเคยเขียน หันไปอีกทีหมักๆ ปัญหาเอาไว้วันหนึ่งก็อาจจะได้คำตอบ โดยอาจจะหาทางในการใช้พวกฟังก์ชันหรือวิธีการต่างๆ ที่สอดคล้องกับระบบปฏิบัติการนั้นๆ ด้วยครับ
  • แม้แต่บางที่ ตัวภาษาเองก็อำนวยการคำนวณภายในช้าเร็วแตกต่างกันด้วยครับ
  • บางครั้ง การโหลดไลบรารี่มาใช้ในโปรแกรมนั้น ก็สำคัญ หากเราเรียกใช้ไม่กี่ตัวเราอาจจะเขียนฟังก์ชันเอาเองก็ได้ ลดขนาดแฟ้มโปรแกรมและยังอาจจะทำให้เร็วกว่าด้วยในบางกรณี เพราะเราไม่รู้หรอกคับ ว่าที่เคยเขียนและใช้ภายในนั้นเค้าใช้แบบฉลาดขนาดไหน
  • อีกอย่างคือ การทำงานซ้ำๆ อย่างตัวอย่างด้านบนของอาจารย์นะครับ มีการวนทำ้ำซ้ำจำนวน 2 loops ข้างในนะครับ ผมพบว่า หากมีการเช็คเงื่อนไขภายใน จะทำให้โปรแกรมช้าลงกว่ามาก หากเทียบกับการมีเงื่อนไขภายนอก Loop (กรณีที่มีทางเลี่ยง)
  • บางครั้ง เราต้องยอมเขียนโปรแกรมแบบ source code ยาวๆ เพื่อให้เงื่อนไข IF Then Else อยู่นอก Loop ยาวกว่าก็ยอมครับ เพราะมันเร็วกว่าต่างกันจริงๆ ครับ
  • มีตัวอย่างหนึ่งให้ลองคิดลับสมองครับ
  • ผมมีภาพขนาด M x N มองเป็น Array ก็ได้ครับเก็บค่าสีโดยมีค่าเป็นไบต์ 0-255 ตามแบบ 8 bits นะครับ
  • ผมอยากจะหยิบ จุดใดๆ ใน Array ขึ้นมาแล้วอ่านค่านั้น เช่น มีค่าเป็น a
  • สิ่งที่ผมอยากได้คือ ต้องการระบายค่า โดยแทนที่สีหรือค่าไบต์ต่างๆ ที่อยู่ใกล้ชิดหรือติดกันกับจุดที่หยิบที่ขึ้นในช่วงของเงื่อนไข

     [a - b, a +b]   โดยที่ b คืำำำำอค่าจำนวนเต็มที่คร่อมค่าที่หยิบที่มาในตำแหน่งเริ่มต้น
  • หากเข้าเงื่อนไขนั้นก็ให้แทนที่จุดเหล่านั้น ด้วยสีดำ หรือแทนด้วยค่า 0 หรือ 255 ที่แตกต่างจากสีหรือค่าพื้นหลัง
  • หากจะให้มองเห็นปัญหาแบบทั่วไปนะครับ  ให้มองว่าเรามีภาพใหญ่ภาพหนึ่ง ในภาพมีต้นไม้ สีเทา ต้นใหญ่ โครงสร้างซับซ้อน
  • สิ่งที่ต้องการคือ เอาเม้าส์ไปดับเบิ้ลคลิกบนตำแหน่งใดๆ ในต้นไม้ แล้วให้โปรแกรมระบายสีต้นไม้ให้เร็วที่สุด  ในทางคอมพ์ อาจจะเรียกว่า flooding region หรือว่า growing region ครับ
  • อิๆๆๆ คิดกันเล่นๆ นะครับ หาเราสามารถ flooding ได้ภายในเวลาอันรวดเร็วก็นับว่าเราจะไปใช้เครื่องรุ่นเก่าๆ หากโปรแกรมทำงานได้ ก็นับว่าเร็วประหลาดใจเช่นกันครับ
  • ขอบคุณมากครับผม พูดคุยในเรื่องเหล่านี้ ก็สนุกดีเหมือนกันครับ
  • จะเอาคณิตศาสตร์ไปช่วยคิดแก้ปัญหาการเมืองได้อย่างไรบ้างครับ เห็นยุ่งเหยิงจริงๆ ครับ