<script language="JavaScript" src="http://www.vcharkarn.com/vlesson/javafeed.php?lessonid=7" type="text/javascript"></script> |
![]() |
การแก้ปัญหาด้วยคอมพิวเตอร์ (Programming and Algorithm)
วิชานี้ว่าด้วยปัญหา และการแก้ปัญหาด้วยคอมพิวเตอร์ โดยอาศัยพื้นฐานวิธีคิด (algorithm) ต่างๆ ที่เคยมีคนคิดค้นไว้แล้วเป็นฐานในการแก้ปัญหาของเราเอง หรือ พัฒนาเป็น algorithm ใหม่ๆ
ผู้เขียน ดร. บุญญฤทธิ์ อุยยานนวาระ
อยู่ในส่วน คอมพิวเตอร์
ระดับของบทเรียน ปริญญาตรี
ปรับปรุงล่าสุด 20 พ.ย. 2550 (00:26)
|
วิชานี้เป็นการเรียนเกี่ยวกับ Algorithm (อัลกอริทึ่ม) ซึ่งเป็นกระบวนการคิดในการแก้ปัญหาที่สามารถใช้คอมพิวเตอร์ในการแก้ได้ หรือพูดง่ายๆว่าเขียนโปรแกรมเพื่อแก้ปัญหาได้ (อันนี้ไม่รวมปัญหาอกหัก และ ปัญหาเงินไม่พอใช้ นะครับ) วิชานี้ไม่ใช่วิชาการเขียนโปรแกรม (Progamming 1) (ซึ่งถ้าสนใจเรื่องนั้น ก็อ่านได้จากบทเรียนของ ดร.จันทร์จิรา ที่นี่ครับ การเขียนโปรแกรมภาษา C เบื้องต้น (Introduction to C Programming))
วิชานี้จะต่างจากวิชาการเขียนโปรแกรมนะครับ เพราะวิชาการเขียนโปรแกรม (Programming 1) คือวิชาที่ว่าด้วย grammar ของภาษาโปรแกรมนั้นๆ เช่น if ใช้งานอย่างไร for loop ใช้งานอย่างไร การอ่าน array ทำอย่างไร เป็นต้น แต่วิชานี้ไม่ได้เน้นที่ตัวโปรแกรม แต่ละเน้นที่ปัญหา และ การแก้ปัญหา ซึ่งแน่นอนว่าถ้าคุณมีพื้นฐานการเขียนโปรแกรมที่ดี การแก้ปัญหาด้วยคอมพิวเตอร์ก็ทำได้ดีขึ้นด้วย
บางคนบอกว่าถ้าฉลาดก็จะเรียนวิชานี้ได้ดี ถ้าไม่ฉลาดก็ลำบาก ตรงนี้ก็ไม่ถูกนัก ทั้งนี้แน่นอนคนฉลาดก็ย่อมเข้าใจปัญหาได้ดี แต่ถ้าหากคุณคิดว่าตัวเองไม่ฉลาด (ซึ่งที่แน่ๆคือคุณคิดผิด - ไอน์สไตน์บอกว่าเราเกิดมามีสมองเท่ากันทุกคน) คุณก็เพียงพยายามแก้ปัญหา ตามแนววิธีการแก้ปัญหาที่ได้เรียนไปในวิชานี้นั่นเอง เพราะวิชานี้จะบอกแนวทางการแก้ปัญหา คุณก็ต้องพยายามนำแนวทางเหล่านี้ไปประยุกต์ใช้กับปัญหาใหม่ที่คุณเจอ
เนื้อหาวิชานี้ จะเป็นการเรียนรู้วิธีการแก้ปัญหา จากวิธีการที่มีคนคิดไว้แล้วในอดีต ซึ่งจริงๆเราก็พบว่าส่วนใหญ่ของปัญหามากมายที่เราพบเจอ ได้มีคนคิดวิธีแก้ปัญหาเหล่านั้นไว้แล้วอย่างชาญฉลาด หากปัญหาใหม่ของเรา ที่เราต้องการจะแก้นั้น ใกล้เคียงกับปัญหาที่เคยมีคนแก้ได้แล้ว เราก็ไม่จำเป็นต้องคิดใหม่หรือมองหาวิธีใหม่ เพราะวิธีการแก้ปัญหา หรือ algorithm เหล่านั้น ได้รับการขัดเกลาผ่านเวลามานานจนเรียกได้ว่าเกือบจะสมบูรณ์ เราก็เพียงแค่เลียนแบบการแก้ปัญหาด้วยวิธีนั้นๆ ในการแก้ปัญหาของเราเอง หรือแม้แต่หากว่า เราต้องการจะหาวิธีแก้ปัญหาแบบใหม่ที่ดีกว่าที่มีอยู่ หรือแก้ปัญหาใหม่ๆที่ไม่เคยมีใครเคย solve ได้มาก่อน วิชานี้ก็จะช่วยเสริมให้คุณหาวิธีที่ดีกว่า วิธีใหม่ เพราะวิชานี้พูดถึงแนวคิด การคิดอย่างมีระบบ เพื่อเป็นเครื่องมือและพื้นฐาน ในการแก้ปัญหาทางคอมพิวเตอร์ของคุณต่อไป
การแก้ปัญหา ในที่นี่ ไม่ได้หมายถึงเพียงแค่การที่ให้เราใช้คอมพิวเตอร์แก้ปัญหา แล้วแก้ปัญหาได้ แต่เราหมายถึงการแก้ปัญหาอย่างเป็นระบบ (Systematically) และ และอย่างมีประสิทธิภาพด้วย (Efficiently)
คำว่ามี ประสิทธิภาพ ในที่นี้ก็หมายถึง การที่เราสามารถคิดวิธีแก้ปัญหา ที่รวดเร็ว ใช้ทรัพยากรของระบบน้อย เช่น ใช้ Memory เพียงนิดเดียว ใช้ Harddisk เพียงนิดเดียว หรือ CPU ที่มีความเร็วต่ำก็ยังใช้ในการประมวลผลเพื่อแก้ปัญหานี้ได้ (เอ๋ รู้สึกว่า Windows Vista จะตรงข้ามกับอันนี้ทุกอย่างเลยนะเนี่ย.. แหะๆ แซวเล่นครับ)
ปัญหา 8Queen (Facility Allocation Problem)
ลองดูปัญหานี้นะครับ เรามีตารางหมากรุกขนาด 8x8 อยู่ อันนึงเราต้องการจะวาง Queen ซึ่งเป็นตัวหมากรุกสากลที่มีอำนาจเยอะที่สุดเลย คือ สามารถเดินและกินได้ ยาว ทั้งแนวตั้ง แนวนอน และ แนวทะแยง ดังภาพด้านซ้ายด้านล่างนี้ เราต้องการจะวาง Queen ทั้งหมด 8 ตัวลงบนกระดานเดียวกัน โดยไม่ให้มี Queen ตัวไหนกินกันได้เลย เอ๋ เราจะวางอย่างไรดี ลองเล่นดูนะครับ ตัวอย่างของรูปแบบการวางที่ประสบความสำเร็จคือ รูปด้านขวาครับ วางได้ และไม่มีใครกินใครได้เลย
โจทย์นี้ดูเหมือนจะไร้สาระ แต่จริงๆก็เป็นเวอร์ชั่นง่ายๆของปัญหาประเภทที่เรียกว่า Facility Allocation Problem คือว่าเรามีของหลายอย่าง หรือ โรงงานหลายอันที่ต้องการวางในพื้นที่ โดยการจะวางก็มีเงื่อนไขหรือกฏเกณฑ์ต่างๆมากกำหนดไว้ ยกตัวอย่างเช่น เราเป็น 11-7 (อีกแล้ว) ถ้าหากว่าเราต้องการเปิด 11-7 อีก 8 สาขาโดยมีเงื่อนไขว่า ห้ามอยู่บนถนนเดียวกัน ห้ามอยู่ซอยเดียวกัน ห้ามอยู่ในรหัสไปรษณีย์เดียวกัน เป็นต้น หรือแม้แต่ ห้ามอยู่ใกล้ BigC ห้ามอยู่ติดกับ Tesco หรือเงื่อนไขอะไรอื่นๆอีกสารพัด ปัญหา 8-Queen ของเราก็เป็นแค่เวอร์ชั่นตัวแทนของปัญหาในชีวิตจริงพวกนั้นนั่นเอง
มีอีกปัญหานะครับเดี๋ยวมาเติมให้
ปัญหาการจัดตัวผู้เล่น (Optimization Problem)
ปัญหาที่ดูเหมือนว่าจะธรรมดา และมองแล้วอาจไม่เกี่ยวอะไรกับคอมพิวเตอร์พวกนี้ และอีกหลายๆปัญหาคล้ายๆกัน ที่เราจะลองใช้ computer ในการแก้ปัญหาดู และจริงๆแล้วปัญหาพวกนี้ ส่วนใหญ่ มีคนคิดวิธีแก้ไว้หมดแล้ว ทำไมเราต้องมาเริ่มคิดใหม่ เราก็สามารถประยุกต์วิธีแก้ปัญหาของพวกเค้ามาแก้ปัญหาที่คล้ายๆกันได้เลย ซึ่งในวิชา Algorithm Design นี้จะพูดถึง Algorithm ต่างๆที่มีคนคิดไว้แล้วมากมายว่ามันทำงานอย่างไร ใช้งานแบบไหนบ้าง พอเรารู้แล้ว เราก็สามารถมาประยุกต์ใช้กับปัญหาของเรา หรือ ปัญหาใหม่ๆที่ใกล้เคียงกับปัญหาเดิมนั่นเอง
ผมขอนอกเรื่องตรงนี้นิดนึงครับ แน่นอนในบางปัญหาถ้าเรามี โครงสร้างข้อมูล (Data Structure) ที่ดี มันจะทำให้แก้ปัญหาได้มีประสิทธิภาพขึ้น แต่เอาเป็นว่าในวิชานี้ เราแยกเรื่องของ Data Structure ออกไปก่อน เราจะสมมติว่าโครงสร้างข้อมูลที่เราใช้เป็นแบบพื้นฐาน เช่น array แต่ในวิชาถัดไป เราจะว่าด้วยเรื่องของ Data Structure อย่างเดียว แล้วตอนนั้นคุณจะเห็นว่า Data structure มาเสริมกับ Algorithm ได้เป็นอย่างดี ทำให้ Algorithm ของคุณเร็วและฉลาดยิ่งขึ้นไปอีก
ในหลายมหาวิทยาลัยที่หลักสูตรไม่ได้เน้นเรื่องของ Algorithm และ Data Structure มากนัก ก็เลยรวบเอาสองวิชานี้ (Algorithm Design และ Data Structure) มาเป็นวิชาเดียวกันซะเลย ก็ไม่ผิดตรงไหนและไม่แปลกอะไรเพราะทั้งคู่มันต้องไปด้วยกันอยู่แล้ว หรือ บางแห่งก็รวบสาม คือ ควบวิชา Programming เข้ามาด้วย เพื่อให้นักศึกษาได้เห็นภาพรวมก่อน แต่จะได้ส่วนละนิดละหน่อย ซึ่งก็ไม่ว่ากัน แต่ของเราจะแยกทั้ง 3 วิชาออกจากกัน เพราะเราจะได้เจาะละเอียดขึ้นทั้งในส่วนของ Algorithm และ Data structure นั่นเอง (พวก CS และ IT เจอ Data structure ตอนปี 2 เทอม 1 นะครับ)
เอาหล่ะ เริ่มสนุกแล้วใช่มั้ย เราจะมาดูกันว่าการใช้โครงสร้างสถานะของปัญหาช่วยแก้ปัญหาได้อย่างไร และเราก็จะไปดูกันต่อว่าปัญหาที่พูดมาเมื่อกี้มีคนแก้แบบฉลาดๆไว้หลายวิธีเลยครับ เปิดไปหน้าถัดไปได้เลย
| ความคิดเห็นที่ 100 7 มี.ค. 2553 (06:05) |
ขอบคุณมากครับ ขอนำข้อมูลไปสอนนักศึกษาด้วยครับ |
| โดย Suwit_Seavarun |
| ความคิดเห็นที่ 99 6 มี.ค. 2553 (05:58) |
ขอบคุณครับ |
| โดย daanaina |
| ความคิดเห็นที่ 98 1 ก.พ. 2553 (09:40) |
เป็นบทความที่ผมสนใจ แต่ลึกเกินไปสำหรับผมอ่ะครับ |
| โดย berserks |
| ความคิดเห็นที่ 96 15 ม.ค. 2553 (10:41) |
ขอบคุณครับ |
| โดย man44547 |
| ความคิดเห็นที่ 95 11 ม.ค. 2553 (10:25) |
sssss |
| โดย man44547 |
| ความคิดเห็นที่ 93 27 พ.ย. 2552 (00:23) |
ขอบคุณสำหรับสาระดีดีนะคะ[url=http://oh9ja.com/].[/url][url=http://www.xn--12cl2b0b7acc2bd0fxhua.oh9ja.com].[/url][url=http://www.xn--12clb3cr3b8bcb8c5ij0gya6h.oh9ja.com].[/url][url=http://www.xn--72cz4afuhc8b6fyesa.oh9ja.com].[/url][url=http://www.xn--72cz4anqc2bf9pqas6d.oh9ja.com].[/url][url=http://www.xn--72czat0ah2alcp9b3e4bwj0a3n.oh9ja.com].[/url][url=http://www.xn--mp3-1klzdycl6akc6d8gtfya.oh9ja.com]mp3[/url][url=http://www.xn--mp3-jml6e9a2l.oh9ja.com].[/url][url=http://www.xn--vampire-tvwvf8d7cc8e0p0a.oh9ja.com].[/url][url=http://breezeshopmall.com/].[/url][url=http://4freemp3.com/].[/url][url=http://www.e-musics.us/].[/url][url=http://cheapmallonline.com/].[/url][url=http://onlineshopmall.us/].[/url][url=http://musics.lyrics-life.com/].[/url] |
| โดย |
| ความคิดเห็นที่ 92 18 พ.ย. 2552 (15:26) |
ขอบคุณมากครับ กำลังเรียนอยู่เลยครับ |
| โดย gummyjung |
| ความคิดเห็นที่ 91 3 พ.ย. 2552 (02:12) |
สอน Algoritm & DATA Structure ครับ http://sirwilliams-blog.blogspot.com/2009/11/algoritm.html |
| โดย sirwilliams43054 |
| ความคิดเห็นที่ 90 27 ต.ค. 2552 (15:33) |
ดีค่ะ ขอบคุณค่ะ แต่..ก็อยากได้คนมาสอนพิเศษอัลกอริทึมด้วยค่ะ ใครมีบ้างคะ |
| โดย koy_tot |
| ความคิดเห็นที่ 89 27 ต.ค. 2552 (14:55) |
c |
| โดย อ๊อฟ |
|
|
คลิ๊กเพื่อดูสถิติ
รับรองและสนับสนุนโดย |
![]() สสวท. |
![]() มูลนิธิ พสวท. |
![]() พสวท. |
||||
|
||||||||