Dr.Surasak Mungsing E-mail: Surasak.mu@spu.ac.th CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 03: ขั้นตอนวิธีและการวิเคราะห์ขั้นตอนวิธี Dr.Surasak Mungsing E-mail: Surasak.mu@spu.ac.th Sep-19
ความหมายของ Algorithm วิธีการทำงานให้สำเร็จ Recipe for getting things done successfully "Recipe" – ลำดับการทำงานที่ได้กำหนดขั้นตอนไว้อย่างดี "things" – ปัญหาด้านการคำนวณที่ระบุความสัมพันธ์ของ input/output "done" – ภายในเวลาและขั้นตอนการทำงานที่แน่นอน "successfully" – อย่างถูกต้อง วิธีการพิเศษของการแก้ปัญหาบางประเภท Any special method of solving a certain kind of problem (Webster Dictionary) 23-Sep-19
ความหมายของ Program โปรแกรมคือการแสดงข้อความของ algorithm ในรูปแบบของภาษาโปรแกรม ชุดของคำสั่งที่คอมพิวเตอร์ใช้ในการคำนวณเพื่อแก้ปัญหา 23-Sep-19
ตัวอย่างปัญหา ปัญหา: ข้อมูลนำเข้าคือชุดของตัวเลขจำนวนเต็มที่เก็บอยู่ใน array ให้หาจำนวนที่มีค่าน้อยที่สุด 23-Sep-19
ปัญหา ข้อมูลนำเข้าคือชุดของตัวเลขจำนวนเต็มที่เก็บอยู่ใน array ให้หาจำนวนที่มีค่าน้อยที่สุด Algorithm A 23-Sep-19
Algorithm B (ใช้ two temporary arrays) copy the input a to array t1; assign n size of input; While n > 1 For i 1 to n /2 t2[ i ] min (t1 [ 2*i ], t1[ 2*i + 1] ); copy array t2 to t1; n n/2; 3. Output t2[1]; 23-Sep-19
Algorithm C Sort the input in increasing order. Return the first element of the sorted data. 8 9 5 6 11 34 7 20 black box Sorting 5 6 7 8 9 11 20 34 23-Sep-19
แต่ละข้อมูล ทดสอบว่าเป็นข้อมูลที่มีค่าน้อยที่สุดหรือไม่ Algorithm D แต่ละข้อมูล ทดสอบว่าเป็นข้อมูลที่มีค่าน้อยที่สุดหรือไม่ 23-Sep-19
ขั้นตอนวิธีใดดีกว่ากัน? ขั้นตอนวิธีทั้งหมดทำงานได้ถูกต้อง แต่อันไหนดีที่สุด? วัดจาก running time (number of operations needed) วัดจากปริมาณหน่วยความจำที่ใช้ (amount of memory used) หมายเหตุ ระยะเวลาที่ใช้ในการทำงานของอัลกอริธึมจะเพิ่มขึ้นเมื่อจำนวนข้อมูลนำเข้าเพิ่มขึ้น Sep-19
ความถูกต้อง หรือ ประสิทธิภาพการทำงาน ? Correctness: ความสามารถที่จะทำการคำนวณได้อย่างถูกต้องในทุกรณี Efficiency: ทรัพยากรที่จำเป็นต้องใช้สำหรับทำงานของ algorithm Time: จำนวนครั้ง Space: ปริมาณหน่วยความจำ Measurement “model”: กรณีที่แย่ที่สุด (Worst case) กรณีโดยเฉลี่ย (Average case) กรณีที่ดีที่สุด (Best case) 23-Sep-19
Time vs. Size of Input Input Size Measurement parameterized by the size of the input. The algorithms A,B,C are implemented and run in a PC. Algorithms D is implemented and run in a supercomputer. Input Size 23-Sep-19
What is Algorithm Analysis? พิจารณาระยะเวลาที่ใช้ในการทำงานของขั้นตอนอย่างไร? ดูจากเทคนิคที่สามารถลดเวลาการทำงานของขั้นตอนวิธีได้อย่างมาก (Techniques that drastically reduce the running time of an algorithm) ดูจากกรอบการทำงานทางคณิตศาสตร์ที่บ่งชี้ระยะเวลาที่ต้องใช้ในทำงานของขั้นตอนวิธี (A mathematical framework that more rigorously describes the running time of an algorithm) 23-Sep-19
ระยะเวลาที่ต้องใช้สำหรับการทำงานกับข้อมูลขนาดเล็ก 23-Sep-19
ระยะเวลาที่ต้องใช้สำหรับการทำงานกับข้อมูลปานกลาง 23-Sep-19
Asymptotic Performance ขั้นตอนวิธีจะทำงานได้ดีเพียงใดเมื่อทำงานกับข้อมูลที่มีขนาดใหญ่มาก ? เวลาที่ใช้ในการทำงาน (Running time) ความต้องการใช้หน่วยความจำ (Memory/storage requirements) Bandwidth/power requirements/logic gates/etc. 23-Sep-19
Analysis Worst case Average case บอกถึงระยะเวลาที่ใช้ในการทำงานกรณีนานที่สุด เป็นการรับประกันว่าจะไม่ใช้เวลานานกว่านี้ Average case บอกถึงเวลาการทำงานโดยเฉลี่ยในกรณีทั่วๆไป มีประโยชน์มาก แต่ต้องใช้อย่างระมัดระวังกับคำว่า ‘เฉลี่ย’ Random (equally likely) inputs Real-life inputs 23-Sep-19
อัตราการเติบโตของฟังก์ชัน 23-Sep-19
สัญญกรณ์เชิงเส้นกำกับ (Asymptotic Notation) ถ้า n คือจำนวน records ที่เราต้องการเรียงลำดับด้วย Algorithm หนึ่งซึ่งใช้เวลาในการทำงานเป็นฟังก์ชันของ n คือ f(n) อยากทราบว่าจะใช้เวลาในการจัดเรียง records นานเท่าไร ? จะเกิดอะไรขึ้นถ้า n มีค่าใหญ่ เราสนใจค่าในย่านที่ n มีขนาดใหญ่ ค่าของฟังชันจะถูกตรึงไว้อย่างไรหรือไม่? (Will f stay bounded?) ค่าของฟังก์ชันจะเติบโตเป็นเชิงเส้นหรือไม่ (Will f grow linearly?) ค่าของฟังก์ชันจะเติบโตเป็น exponential หรือไม่ (Will f grow exponentially?) เป้าหมายของเราคือพิจารณาว่าฟังก์ชันมีอัตราการเติบโตอย่างไรเมื่อ n มีขนาดใหญ่ขึ้น 23-Sep-19
การจัดประเภทของฟังก์ชันตามอัตราการเติบโต asymptotic growth rate, asymptotic order, or order of functions เป็นการเปรียบเทียบและจัดประเภทของฟังชันโดยละเว้นการพิจารณาค่าตัวแปรคงที่ (constant factors) และข้อมูลขนาดเล็ก (small inputs) The Sets big oh O(g), big theta (g), big omega (g) (g): กลุ่มฟังก์ชันที่มีอัตราการเติบโตอย่างน้อยเท่ากับของ g g (g): กลุ่มฟังก์ชันที่มีอัตราการเติบโตเท่ากับของ g O(g): กลุ่มฟังก์ชันที่มีอัตราการเติบโตไม่เร็วไปกว่าของ g 23-Sep-19
Classifying functions by their Asymptotic Growth Rates O(g(n)), Big-Oh of g of n, the Asymptotic Upper Bound; Q(g(n)), Theta of g of n, the Asymptotic Tight Bound; and W(g(n)), Omega of g of n, the Asymptotic Lower Bound. 23-Sep-19
ตัวอย่าง Example: f(n) = n2 - 5n + 13. จำนวนคงที่ 13 ไม่เปลี่ยนแปลงเมื่อ n มีขนาดใหญ่ขึ้น ดังนั้นจึงไม่มีนัยสำคัญในการพิจารณา เทอมที่มี order ต่ำคือ -5n ไม่ส่งผลกระทบต่อค่าของฟังก์ชันมากนักเมื่อเปรียบเทียบกับเทอมใน order ของ n2. ดังนั้นสมารถกล่าวได้ว่า f(n) = O(n2) . ถาม : f(n) = O(g(n)) มีความหมายว่าอย่างไร? ตอบ: หมายความว่าขนาดของฟังก์ชัน f อยู่ใน order เดียวกันกับฟังก์ชัน g (f is the same order of magnitude as g) 23-Sep-19
ความหมายของ Big O ถาม : f1(n) = O(1) มีความหมายว่าอย่างไร? ตอบ : f1(n) = O(1) หมายความว่าหลังจากผ่านค่า n ไปจำนวนหนึ่งค่าของ f1 จะถูกตรึงให้อยู่บนหรือล่างของค่าคงที่หนึ่ง ถาม : f2(n) = O(n log n) มีความหมายว่าอย่างไร? ตอบ : f2(n) = O(n lg n) หมายความว่า หลังจากผ่านค่า n ไปจำนวนหนึ่งค่าของ f2 จะถูกตรึงให้อยู่บนหรือล่างของค่าคงที่หนึ่งคูณด้วย n log n. หรือกล่าวอีกอย่างหนึ่งว่า f2 มีขนาดอยู่ใน order เดียวกันกับ n log n. โดยทั่วไปแล้ว f(n) = O(g(n)) หมายความว่า f(n) เป็นสมาชิกของกลุ่มฟังก์ชัน O(g(n)) ซึ่ง O(g(n)) คือกลุ่มฟังชันที่มีขนาดอยู่ใน order เดียวกัน 23-Sep-19
คำถามท้ายบท ขั้นตอนวิธีและโปรแกรมคอมพิวเตอร์แตกต่างกันอย่างไร? ประสิทธิภาพการทำงานของ Algorithm ขึ้นอยู่กับปัจจัยอะไรบ้าง? เราวัดประสิทธิภาพการทำงานของ Algorithm กันอย่างไร? Big O, Big Theta, Big Omega คืออะไร? ให้ลำดับอัตราการเติบโตของฟังก์ชันจากน้อยไปมาก 23-Sep-19
การวิเคราะห์หาความซับซ้อนด้านเวลา ในรูปแบบของ Big-Oh Next Lecture: การวิเคราะห์หาความซับซ้อนด้านเวลา ในรูปแบบของ Big-Oh 23-Sep-19