/ BasicKnowledge

อัลกอริทึม คำที่โปรแกรมเมอร์ชอบพูด

อัลกอริทึม? Algorithm? มันคืออะไรกันนะ? โปรแกรมเมอร์คนไหนๆ ก็พูดถึง ผมก็อยากจะพูดบ้าง เลยเอามาเขียนเป็นบล็อกในวันนี้ เอิ่มม… ก่อนหน้าจริงๆ ผมก็ได้เกริ่มเกี่ยกับเจ้าคำว่า Algorithm นี้แล้วแหละ


"algorithm: [noun] Word used by programmers when they do not want to explain what they did."

อัลกอริทึม คือคำศัพท์ที่โปรแกรมเมอร์ใช้เวลาไม่ต้องการอธิบายสิ่งที่ตนทำ ใช่ครับ!! ถูกต้องเป๊ะเลย ทำไมน่ะหรือ? เพราะว่าหลายๆ ครั้งเราก็ไม่อยากพยายามอธิบายบางเรื่องให้คนที่ไม่เข้าใจศาสตร์ของการเขียนโปรแกรม เพราะมันยากมากที่จะพูด หรือไม่ก็ขี้เกียจพูด คำนี้เลยถูกยกขึ้นมาใช้แทนที่กระบวนการอะไรสักอย่างที่โปรแกรมเมอร์อยากให้คนอื่นเห็นว่ามันยิ่งใหญ่ เรามาลองดูความหมายจริงๆ ของ อัลกอริทึม กันดีกว่าครับ

"Algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning. ---Wiki"

อัลกอริทึม หรือที่ภาษาไทยเรียกว่า ขั้นตอนวิธี คือขั้นตอนการดำเนินการแก้ปัญหา ที่แน่นอนชัดเจน ไม่กำกวม หรือพูดง่ายๆ มันก็คือลำดับขั้นตอนที่ผมพูดถึงในบล็อกก่อนหน้านี้นั่นเอง

ต้องขอเน้นย้ำว่า อัลกอริทึม จะต้องเป็นสิ่งที่แน่นอนจริงๆ เท่านั้น เพราะคุณจะต้องนำมันมาเขียนเป็นโค้ด ผมเคยบอกว่า เราสามารถหาผลลัพธ์เดียวกันจากโจทย์เดียวกัน ได้โดยหลายวิธีที่แตกต่างกัน ซึ่งทุกวีธีของการหาผลลัพธ์นั้นมันก็คือ อัลกอริทึม เอาล่ะครับเรามาดูตัวอย่างอัลกอริทึมกันดีกว่า

อัลกอริทึมสำหรับต่อกันพลา (Gunpla)

สำหรับคนที่ไม่รู้ว่ากันพลาคืออะไรนะครับ กันพลาก็คือของเล่นพลาสติกที่เป็นโมเดลกันดั้ม หน้าตาแบบนี้

Alt Gunpla

tumblr_lej240gnpA1qeeec1o1_500เวลาซื้อมามันจะอยู่ในกล่องกระดาษ ซึ่งภายในกล่องก็จะมีแผงๆ อะไรไม่รู้เยอะแยะไปหมด ที่เป็นส่วนประกอบของโมเดลนี้

Alt Gunpla

เอาล่ะครับ พูดมาเนิ่นนานก็ยังไม่เข้าตัวอย่างสักที เราข้ามไปถึงตอนเขียนอัลกอริทึมเลยดีกว่า
ตัวอย่าง อัลกอริทึมสำหรับต่อกันพลา แบบที่ 1

1. แกะกล่อง

2. นำชิ้นส่วนออกจากแผง

3. ทดลองประกอบชิ้นส่วนเข้าด้วยกัน

4. ถ้ายังไม่เสร็จก็ไปทำขั้นที่ 3. ต่อ

5. ได้ผลลัพธ์เป็นโมเดลตามภาพหน้ากล่อง

จากอัลกอริทึมขั้นต้น ก็ไม่ถือว่าผิดอะไร เพราะถ้าเราทำตามนี้ ก็มีโอกาสที่จะได้ผลลัพธ์ที่ถูกต้อง ฮ่าๆ มาดูอันที่ 2 ต่อเลย
ตัวอย่าง อัลกอริทึมสำหรับต่อกันพลา แบบที่ 2

1. แกะกล่อง

2. เปิดคู่มืออ่านวิธีประกอบข้อที่ n

3. แกะชิ้นส่วนที่คู่มือบอกออกจากแผง

4. ประกอบตามวิธีที่คู่มือบอก

5. หาก n ไม่ใช่ขั้นตอนสุดท้าย ให้กลับไปทำข้อที่สอง แต่เปลี่ยนเป็นข้อที่ n+1

6. ได้ผลลัพธ์เป็นโมเดลตามภาพหน้ากล่อง

อัลกอริทีมนี้ดูน่าเชื่อถือกว่าเดิม เพราะมีการอ้างถึงคู่มือ ทำให้มั่นใจได้ว่าจะประกอบสำเร็จแน่ๆถ้าไม่ทำอะไรพลาด ><

สรุป

จากอัลกอริทึมทั้งสองน่าจะทำให้คุณพอที่จะเห็นว่า ทุกปัญหานั้นมีวิธีแก้อยู่มากมาย และแต่ละวิธีก็มีประสิทธิภาพต่างกัน เมื่อพิจารณาจากตัวอย่างจะพบว่า อัลกอริทึมที่สอง มีจำนวนขั้นตอนเขียนเป็นบรรทัดเยอะกว่า แต่เมื่อดูให้ลึกเข้าไปอีกจะพบว่า ในอัลกอริทึมที่หนึ่งใช้วิธีสุ่มมั่วไปเรื่อยๆ ซึ่งหมายความว่าเราไม่สามารถคาดการจำนวนรอบที่ลองผิดลองถูกได้เลย จึงถือว่าอัลกอริทึมที่หนึ่งน่าจะมีประสิทธิภาพสูงกว่าเมื่อมีจำนวนชิ้นส่วนมากขึ้นเรื่อยๆ

เป็นไงบ้างครับอัลกอริทึม มันก็แค่ขั้นตอนการทำงานทั่วไป ที่พบได้ในชีวิตประจำวัน ซึ่งบางครั้งเราก็ลืมไปแล้วว่ามันมีขั้นตอนพวกนี้ ลองมองดูสิ่งรอบๆตัวนะครับ ว่ามีอะไรที่มีขั้นตอนแน่นอนบ้าง แล้วพบกันใหม่ตอนหน้าครับ ^^