Welcome to the blog Patcharee Pujanma.

Welcome to the blog Patcharee Pujanma.

วันอาทิตย์ที่ 16 กันยายน พ.ศ. 2555

อัลกอริทึม (Algorithm)

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

ที่มาของคำว่าอัลกอริทึม (Algorithm) คือ คำที่ตั้งให้เป็นเกียรติแก่ อแลน เดอะ กอริทึม ทิวริง (Alan The Gorithm Turing) ผู้ค้นพบว่าการพิสูจน์ทางคณิตศาสตร์หรือปัญหาทางตรรกะ สามารถหาคำตอบได้ด้วยชุดของขั้นตอนวิธีที่ถูกต้อง

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

รหัสเทียม (Pseudo Code)   การเขียนขั้นตอนวิธีโดยการใช้ภาษาธรรมชาติอาจมีความกำกวมหรือยืดยาวเกินไป ทำให้เกิดการผิดพลาดได้ง่าย ส่วนการใช้โปรแกรมภาษาอาจมีความเฉพาะจนเกินไป ผู้ที่ไม่เข้าใจโปรแกรมภาษาที่ใช้เขียนอาจไม่สามารถเข้าใจได้ รหัสเทียมเป็นส่วนผสมของการใช้ภาษาธรรมชาติและโปรแกรมภาษา เพื่อใช้ในการสื่อสารระหว่างผู้ใช้หลายกลุ่มที่มีความต้องการใช้ขั้นตอนวิธีต่างกันออกไป รหัสเทียมไม่มีกฎในการเขียนตายตัว โดยมากขึ้นอยู่กับความถนัดของผู้ใช้ แต่มีข้อตกลงบางอย่างร่วมกันเป็นสากล ส่วนประกอบที่สำคัญของรหัสเทียม ได้แก่ ชื่อ คำสั่งกำหนดงาน คำสั่งควบคุม กลุ่มของคำสั่ง และข้อบันทึกหรือคำอธิบาย

รหัสเทียม หรือซูโดโค้ด (Pseudo Code) คือ รหัสจำลองที่ใช้เป็นตัวแทนของอัลกอริทึมในการแสดงขั้นตอนวิธีการโดยใช้ภาษาเขียนที่เข้าใจได้ง่าย อาจใช้ภาษาไทยหรือภาษาอังกฤษก็ได้ขึ้นอยู่กับความสะดวกของผู้เขียนและกิจกรรมที่จะนำเสนอ มักใช้รูปแบบคล้ายประโยคภาษาอังกฤษเพื่ออธิบาย

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

Algorithm ไม่ใช่คำตอบแต่เป็นชุดคำสั่งที่ทำให้ได้คำตอบ วิธีการในการอธิบาย
Algorithm ได้แก่

1. Natural Language อธิบายแบบใช้ภาษาที่เราสื่อสารกันทั่วไป
2.Pseudocode อธิบายด้วยรหัสจำลองหรือรหัสเทียม
3.Flowchart อธิบายด้วยแผนผัง

ชนิดของอัลกอริทึม (Algorithm)

1. อัลกอริทึมแบบแตกย่อย (Divide-and-conquer)  เป็นอัลกอริทึมที่จะมีการนำปัญหาหลักที่ได้มาทำการแยกออกเป็นปัญหาย่อยๆ แล้วนำคำตอบที่ได้จากปัญหาย่อยต่าง ๆ มารวมกันเข้าด้วยกันโดยอัลกอริทึมนี้สามารถหาคำตอบของปัญหาได้ง่ายขึ้นจาก การรวมคำตอบของปัญหาหลัก
2. อัลกอริทึมแบบเคลื่อนที่ (Dynamic Programming)   ปัญหา ที่ได้รับมานั้นบางครั้งไม่สามารถแบ่งปัญหาออกเป็นปัญหาย่อย ๆ ได้ ซึ่งถ้าพยายามจะแบ่งปัญหานั้น ๆ ออกเป็นปัญหาย่อยที่เล็กที่สุด อัลกอริทึมก็อาจจะใช้เวลาทำงานเป็นแบบทวีคูณ (Exponential) ได้ แต่เวลาที่แก้ปัญหาต่าง ๆ นั้น มักจะพบว่าบางครั้งต้องแก้ปัญหาย่อย ๆ ที่เหมือนกันซ้ำไปซ้ำมา โดยการหลีกเลี่ยงการคำนวณเพื่อหาคำตอบซ้ำ ๆ ซาก ๆ นี้ จะใช้ Dynamic Programmingแก้ ปัญหาย่อย ๆ เหล่านั้นเพียง ครั้งเดียวแล้วเก็บผลลัพธ์ไว้ ซึ่งถ้าหาก พบว่าต้องมีการแก้ปัญหาย่อยนั้นซ้ำอีกก็สามารถนำคำตอบมาจากคำตอบที่เคยคำนวณ เก็บไว้มาใช้ได้
3. อัลกอริทึมแบบทางเลือก (Greedy Algorithm)  เป็นอัลกอริทึมที่จะหาคำตอบโดยการเลือกทางออกที่ดีที่สุดที่พบได้ในขณะนั้น เพื่อให้ได้คำตอบที่ดีที่สุด แต่ในบางครั้ง Greedy Algorithms อาจจะไม่สามารถหาคำตอบของปัญหาที่ดีที่สุดได้เสมอไป
ผังงาน (Flowchart) คือแผนภาพแสดงขั้นตอนการทำงานของโปรแกรมหรือระบบรวมทั้งการไหลของข้อมูลตั้งแต่แรกจนได้ผลลัพธ์ตามต้องการ



ความหมายของผังงาน  ผังงาน (Flowchart) คือ รูปภาพ (Image) หรือสัญลักษณ์(Symbol) ที่ใช้เขียนแทนขั้นตอน คำอธิบาย ข้อความ หรือคำพูด ที่ใช้ในอัลกอริทึม (Algorithm) เพราะการนำเสนอขั้นตอนของงานให้เข้าใจตรงกัน ระหว่างผู้เกี่ยวข้อง ด้วยคำพูด หรือข้อความทำได้ยากกว่า
คือ ผังงานที่แสดงถึงขั้นตอนในการทำงานของโปรแกรม ตั้งแต่รับข้อมูล คำนวณ จนถึงแสดงผลลัพธ์

ประโยชน์ของผังงาน
1. ทำให้เข้าใจ และแยกแยะปัญหาได้ง่าย (Problem Define)
2. แสดงลำดับการทำงาน (Step Flowing)
3. หาข้อผิดพลาดได้ง่าย (Easy to Debug)
4. ทำความเข้าใจโปรแกรมได้ง่าย (Easy to Read)
5. ไม่ขึ้นกับภาษาใดภาษาหนึ่ง (Flexible Language)

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

ผังงาน แบ่งออกเป็น 2 ประเภท คือ

- ผังงานระบบ (System flowchart)
- ผังงานโปรแกรม (Program flowchart)

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

ผังงานโปรแกรม (Program flowchart) หมายถึง ผังงานที่แสดงขั้นตอนของคำสั่งการทำงานอย่างละเอียด โดยใช้สัญลักษณ์ในการเขียนผังงานเช่นเดียวกับการเขียนผังงานระบบ เป็นการวางแผนการเขียนโปรแกรมโดยผังงานโปรแกรมจะแสดงลำดับคำสั่งเป็นขั้นตอนในการปฏิบัติงานอย่างละเอียด การเขียนผังงานโปรแกรมก่อน จึงเขียนโปรแกรมตามผังงาน จะช่วยลดข้อผิดพลาดในการเขียนโปรแกรมลง ทำให้การเขียนโปรแกรมทำได้ง่ายและถูกต้องกว่าการเขียนโปรแกรมโดยไม่มีผังงาน

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

รูปแบบการเขียนผังงาน การเขียนผังงานมี 3 รูปแบบ คือ

1. การทำงานแบบตามลำดับ(Sequence) : รูปแบบการเขียนโปรแกรมที่ง่ายที่สุดคือ เขียนให้ทำงานจากบนลงล่าง เขียนคำสั่งเป็นบรรทัด และทำทีละบรรทัดจากบรรทัดบนสุดลงไปจนถึงบรรทัดล่างสุด สมมติให้มีการทำงาน 3 กระบวนการคือ อ่านข้อมูล คำนวณ และพิมพ์

2. การเลือกกระทำตามเงื่อนไข(Decision or Selection) : การตัดสินใจ หรือเลือกเงื่อนไขคือ เขียนโปรแกรมเพื่อนำค่าไปเลือกกระทำ โดยปกติจะมีเหตุการณ์ให้ทำ 2 กระบวนการ คือเงื่อนไขเป็นจริงจะกระทำกระบวนการหนึ่ง และเป็นเท็จจะกระทำอีกกระบวนการหนึ่ง แต่ถ้าซับซ้อนมากขึ้น จะต้องใช้เงื่อนไขหลายชั้น เช่นการตัดเกรดนักศึกษา เป็นต้น ตัวอย่างผังงานนี้ จะแสดงผลการเลือกอย่างง่าย เพื่อกระทำกระบวนการเพียงกระบวนการเดียว


3. การทำซ้ำ(Repeation or Loop) : การทำกระบวนการหนึ่งหลายครั้ง โดยมีเงื่อนไขในการควบคุม หมายถึงการทำซ้ำเป็นหลักการที่ทำความเข้าใจได้ยากกว่า 2 รูปแบบแรก เพราะการเขียนโปรแกรมแต่ละภาษา จะไม่แสดงภาพอย่างชัดเจนเหมือนการเขียนผังงาน ผู้เขียนโปรแกรมต้องจินตนาการด้วยตนเอง





       อุปกรณ์รับข้อมูล (อินพุต) เช่น เทอร์มินัล คีบอร์ด หรือรับข้อมูลจากการอ่านไฟล์ข้อมูลบนสื่อจัดเก็บข้อมูลได้ เช่น การอ่านข้อมูลจากดิสก์ การอ่านข้อมูลจากเทป หรือการรับข้อมูลจากแป้นคีบอร์ดในการอ่านข้อมูลจากคำกริยา read และ get เพื่อใช้ในเขียนซูโดโค้ด
     Read ใช้เมื่อมีการรับหรืออ่านเรคอร์ดจากไฟล์ข้อมูล
     Get ใช้สำหรับรับข้อมูลจากแป้นคีบอร์ด


       คอมพิวเตอร์ที่สามารถรับข้อมูลได้
การแสดงผลลัพธ์จะใช้คำกริยา print, write, put output หรือ display
    Print ใช้สำหรับการส่งผลลัพธ์ออกทางเครื่องพิมพ์
   Write ใช้สำหรับการส่งเอ้าท์พุตเพื่อเก็บบันทึกลงในไฟล์
    put, output หรือ displayจะใช้สำหรับการส่งเอ้าท์พุตออกไปแสดงผลทางหน้าจอ
สัญลักษณ์ของผังงาน



ไม่มีความคิดเห็น:

แสดงความคิดเห็น