โครงสร้างข้อมูลและอังกอลิทึม ตอน วิเคราะห์อัลกอริทึม อ.พิศิษฐ์ นาคใจ
Algorithm Analysis Software Develops Life Cycle การวัดประสิทธิภาพการทำงานของอังกอลิทึม ใช้หลักคณิตศาสตร์ในการวัดประสิทธิภาพ การเขียนโปรแกรม แบ่งออกเป็น 2 ลักษณะ 1. เขียนโปรแกรมแบบลูกทุ่ง 2. เขียนโปรแกรมแบบซับซ้อน (เมพ) อ.พิศิษฐ์ นาคใจ
Algorithm ใช้ในการแก้ไขปัญหา ทำงานเป็นลำดับขั้นตอน อาจจะเขียนเป็น Flowchart หรือ ซูโดโค้ดก็ได้ พิจารณาการใช้อังกอลิทึม พิจารณาการใช้หน่วยความจำเท่าไร พิจารณาเวลาในการแก้ไขปัญหาเท่าใด * ปัจจัยที่สำคัญสำหรับการวิเคราะห์คือ เวลาที่ใช้ในการทำงาน และ Input ที่ใช้กับอังกอลิทึม อ.พิศิษฐ์ นาคใจ
ประสิทธิภาพเชิงเวลา การวัดประสิทธิภาพ วัดจาก เวลา และ เนื้อหน่วยความจำที่ให้ ประสิทธิภาพเชิงเวลา ประสิทธิภาพเชิงเนื้อที่ สำหรับการวัดเชิงเวลา จะเรียกว่า Running Time เขียนอยู่ในรูปของ ฟังก์ชันคณิตศาสตร์ แปลผันตามปัจจัย 2 ตัว ขนาดข้อมูลนำเข้า ชุดคำสั่งฅ Worst case คือค่าสูงสุดของการใช้เวลาในการแก้ปัญหาของอังกอริทึม Best case คือเวลาที่น้อยที่สุดในการแก้ปัญหาของอังกอริทึม อ.พิศิษฐ์ นาคใจ
การคำนวณ Running Time ในการหาความเร็วในการทำงานของโปรแกรมเรามักจะวัดจาก ลักษณะการเขียน Code มากกว่าที่จะวัดจากการรันโปรแกรมโดยตรง ในการหา Running Time จะเขียนอยู่ในรูปคณิตศาสตร์ คือ T(n) = ciC(n) โดยกำหนดให้ T(n) = Running Time ci = เวลาในการทำงานของชุดคำสั่ง จะคิดเป็น 1 หน่วยเวลา C(n) = จำนวนรอบในการทำงานของชุดคำสั่ง อ.พิศิษฐ์ นาคใจ
ตัวอย่างการคำนวณ ตัวอย่างที่1 ตัวอย่างที่2 ตัวอย่างที่3 Sum = N*N+1 int a = 1 while(a<=N){ a++; } while(a<N){ int b = 1; while(b<N){ b++; อ.พิศิษฐ์ นาคใจ
วิเคราะห์ตัวอย่างที่ 1 Sum = N*N+1 Code เวลาใช้ในการทำงาน จำนวนรอบการทำงาน Sum = N*N+1 c1 1 T(n) = c1(1) = c1 อ.พิศิษฐ์ นาคใจ
Code เวลาใช้ในการทำงาน จำนวนรอบการทำงาน วิเคราะห์ตัวอย่างที่ 2 for(int a = 1; a<=N; a++) Code เวลาใช้ในการทำงาน จำนวนรอบการทำงาน int a = 1 c1 1 while(a<=N){ c2 N+1 a++; } c3 N T(n) = c1(1) + c2(N+1) (c3)1 = c1(1) + c2(N+1) +(c3)(N) = 1+(N+1)+N คิด 1 หน่วยเวลา T(N) = 2N+2 อ.พิศิษฐ์ นาคใจ
Code เวลาใช้ในการทำงาน จำนวนรอบการทำงาน วิเคราะห์ตัวอย่างที่ 3 Code เวลาใช้ในการทำงาน จำนวนรอบการทำงาน int a = 1 c1 1 while(a<=N){ c2 N+1 int b = 1; c3 N while(b<=N){ c4 (N+1)N b++; c5 (N)(N) a++; }} c6 T(n) = c1(1)+c2(N+1)+c3(N)+c4(N+1)(N)+ c5(N)(N)+ c6(N) = 1+(N+1)+ (N)+(N+1)(N)+(N)(N)+ (N) = 2N2+4N+2 อ.พิศิษฐ์ นาคใจ
Big Oh อ่านว่า บิ๊กโอ เป็นสัญลักษณ์วัดประสิทธิภาพเชิงเวลาของอัลกอริทึมมีรูปแบบการเขียนคือ O(f(n)) คุณสมบัติของ Big oh f(n) = c แล้ว O(f(n)) = O(1) เมื่อ c เป็นค่าคงที่ f(n) = cg(n) แล้ว f(n) = O(g(n)) f(n) = ank แล้ว f(n) = O(nk) f(n) = logab แล้ว f(n) = O(logbb) อ.พิศิษฐ์ นาคใจ
ตัวอย่างคุณสมบัติที่ 1 และ 2 f(n) = 5n จาก f(n) = cg(n) แล้ว f(n) = O(g(n)) โดยที่ c เป็นค่าคงที่ในที่นี้คือ 5 ดังนั้น O(F(n)) คือ O(n) f(n) = 1 จาก f(n) = 1 แล้ว O(f(n)) = O(1) f(m) = Am จาก f(m) = cg(m) แล้ว f(m) = O(g(m)) โดยที่ c เป็นค่าคงที่ในที่นี้คือ A ดังนั้น O(f(m)) คือ O(m) อ.พิศิษฐ์ นาคใจ
นิยาม นิยาม ถ้า T1 = O(f(N)) และ T2 = O(g(N)) ดังนั้น T1* T2 = O(f(N)*g(N)) ตัวอย่างเช่น กำหนดให้ f(n) = 4n , g(n) = 2n , h(n) = f(n)*g(n) จงหา Big-ohของ แต่ละ Function O(f(n)) = O(4n) = O(n) O(g(n)) = O(2n) = O(n) O(h(n)) = O(10n2) = O(n2) อ.พิศิษฐ์ นาคใจ
นิยาม ต่อ นิยาม ให้ T1 = O(f(N)) และ T2 = O(g(N)) ดังนั้น T1+ T2 = max(O(f(N),g(N))) ตัวอย่างเช่น กำหนดให้ f(n) = n2 , g(n) = 2n , h(n) = f(n)+g(n) จงหา Big-ohของ แต่ละ Function O(f(n)) = O(n2) = O(n2) O(g(n)) = O(2n) = O(n) O(h(n)) = max(O(n2),O(2n) = O(n2) อ.พิศิษฐ์ นาคใจ
กิจกรรม ให้นักศึกษา ทำการเรียงไพ่ จากน้อยไปมาก A,2,3,…,J,Q,K วิธีการ ให้นักศึกษาหยิบไพ่ 1 ใบ แล้ววางลงบนที่ว่าง หยิบไพ่มาอีกใบ พิจารณาว่ามากกว่า ไพ่ใบสุดท้ายหรือไม่ 2.1 หากมากกว่าให้ว่างต่อจากไพ่ใบสุดท้าย 2.3 หากน้อยกว่าให้นักศึกษา ให้นักศึกษาขีด 1 ลงบนกระดาษ จากนั้นพิจารณาไพ่ใบถัดไป 3. ทำจนหมดไพ่ในมือ สับไพ่และทำซ้ำวิธีการเดิม 5 ครั้ง อ.พิศิษฐ์ นาคใจ
อัตราการเติบโตของ Big oh Algorithm 1 2 3 4 Time ( second ) O(n3) O(n2) O(n log n) O(n) (input size) n = 10 0.00103 0.00045 0.00066 0.00034 n = 100 0.47015 0.01112 0.00486 0.00063 n = 1,000 448.77 1.1233 0.05843 0.00333 n = 10,000 NA 111.13 0.68631 0.03042 n = 100,000 8.0113 0.29832 อ.พิศิษฐ์ นาคใจ
อัตราการเจริญของเวลาที่ใช้ ของอัลกอริทึมทั้ง 4 แบบ อัตราการเจริญของเวลาที่ใช้ ของอัลกอริทึมทั้ง 4 แบบ อ.พิศิษฐ์ นาคใจ
อัตราการเติบโต สัญลักษณ์ ชื่อฟังก์ชัน หมายเหตุ O(1) ค่าคงที่ O(logn) ลอการิทึม ลอการิทึมทุกฐานอยู่ในระดับเดียวกัน O(n) เชิงเส้น O(nlog(n)) แฟกทอเรียล O(n2) n ยกกำลัง 2 O(2n) 2 ยกกำลัง n อ.พิศิษฐ์ นาคใจ
อัตราการเติบโต อ.พิศิษฐ์ นาคใจ
เรียงไผ่ 2 6 5 9 สลับที่ = 2 จั่ว = 4 อ.พิศิษฐ์ นาคใจ
คำถามหลังกิจกรรม จำนวนครั้งที่น้อยที่สุดในการเรียงไผ่ จำนวนครั้งที่มากที่สุดในการเรียงไผ่ อ.พิศิษฐ์ นาคใจ
Quiz ให้นักศึกษาหยิบกระดาษ ½ แผ่น เขียนชื่อ รหัสนักศึกษา ให้ชัดเจน แล้วตอบว่าข้อใดถูกหรือผิด 1. O(n2+3) = O(n) 2. O(n+3) = O(1) 3. O(2n+3) = O(n) 4. O(n3+n2) = O(n3) 5. O(3log n)) = O(log n) อ.พิศิษฐ์ นาคใจ