การวิเคราะห์และออกแบบขั้นตอนวิธี CSE 221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 04: Big O ดร.สุรศักดิ์ มังสิงห์ 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Big-Oh สัญลักษณ์ O ถูกแนะนำมาใช้ในการบ่งบอกอัตราการเติบโตเปรียบเทียบระหว่างฟังก์ชันในปี ค.ศ. 1927 โดยพิจารณาจากพฤติกรรมที่เรียกว่า Asymptotic behavior ปัจจุบันถูกใช้ในการจำแนกฟังก์ชันและกลุ่มของฟังก์ชัน 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Upper Bound Notation เรากล่าวได้ว่าเวลาที่ใช้ในการเรียงลำดับแบบ Insertion Sort คือ O(n2) ถ้าจะกล่าวให้ถูกต้องต้องพูดว่าเวลาที่ใช้ในการเรียงลำดับแบบ Insertion Sort อยู่ในลำดับ O(n2) อ่าน O ว่า “Big-O” In general a function f(n) is O(g(n)) if positive constants c and n0 such that f(n) c g(n) n n0 e.g. if f(n)=1000n and g(n)=n2, n0 > 1000 and c = 1 then f(n0) < 1.g(n0) and we say that f(n) = O(g(n)) The O notation indicates 'bounded above by a constant multiple of.' 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Big-Oh, the Asymptotic Upper Bound Big-Oh เป็นสัญลักษณ์ที่นิยมใช้กันมากที่สุดในการวิเคราะห์เวลาที่ใช้ในการทำงานของอัลกอริธึมเนื่องจากเรามักจะพิจารณาจากเวลาที่ใช้มากที่สุด (worst case time) ถ้าเวลาที่ใช้ในการทำงานของอัลกอริธึม เป็น O(n2) ดังนั้นเวลาในการทำงานของอัลกอริธึมจะไม่เกิน quadratic function สำหรับ input จำนวน n ที่ใหญ่พอ upper bound บางตัวอาจจะดูกว้างเกินไป แต่ก็ยังนับว่าเป็น upper bound ได้ เช่น 2n2 = O(n3) . จากนิยาม ถ้าใช้ค่า c = 1 and n0 = 2 O(n2) จะกระชับกว่า 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Example 1 6 g(n) f(n) สำหรับทุกค่า n>6, g(n) > 1 f(n). ฟังก์ชัน f (n) จะอยู่ใน big-O of g(n) นั่นคือ, f(n) is in O(g(n)). 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Example 2 g(n) f(n) 5 มีค่า n0 ซึ่งสำหรับทุกค่า n>n0, ถ้า f(n) < 1 g(n) ดังนั้น f(n) is in O(g(n)) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Example 3 5 h(n) f(n) 3.5 h(n) มีค่า n0=5, c=3.5, สำหรับทุกค่า n>n0, ถ้า f(n) < c h(n) ดังนั้น f(n) is in O(h(n)). 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Exercise on O-notation Show that f(n)=3n2+2n+5 is in O(n2) 10 n2 = 3n2 + 2n2 + 5n2 3n2 + 2n + 5 for n 1 f(n) หรือ f(n) ≤10 n2 เมื่อพิจารณา c = 10, n0 = 1 f(n) ≤c g(n2 ) for n n0 ดังนั้น f(n) is in O(n2) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Usage เรามักจะใช้สมการอย่างง่ายที่สุดเมื่อเขียนด้วยสัญลักษณ์ Big-Oh เช่น 3n2+2n+5 = O(n2) สมการเหล่านี้ก็ไม่ผิด แต่เราไม่นิยมเขียนกัน 3n2+2n+5 = O(3n2+2n+5) 3n2+2n+5 = O(n2+n) 3n2+2n+5 = O(3n2) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Exercise on O-notation f1(n) = 10 n + 25 n2 f2(n) = 20 n log n + 5 n f3(n) = 12 n log n + 0.05 n2 f4(n) = n1/2 + 3 n log n O(n2) O(n log n) For each function, find the simplest and g(n) such that f_i(n) = O(g(n)) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Classification of Function : BIG-Oh A function f(n) is said to be of at most logarithmic growth if f(n) = O(log n) A function f(n) is said to be of at most quadratic growth if f(n) = O(n2) A function f(n) is said to be of at most polynomial growth if f(n) = O(nk), for some natural number k > 1 A function f(n) is said to be of at most exponential growth if there is a constant c, such that f(n) = O(cn), and c > 1 A function f(n) is said to be of at most factorial growth if f(n) = O(n!). 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Classification of Function : BIG-Oh (cont.) A function f(n) is said to have constant running time if the size of the input n has no effect on the running time of the algorithm (e.g., assignment of a value to a variable). The equation for this algorithm is f(n) = c Other logarithmic classifications: f(n) = O(n log n) f(n) = O(log log n) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
A polynomial of degree k is O(nk) Big O Fact A polynomial of degree k is O(nk) Proof: ถ้า f(n) = bknk + bk-1nk-1 + … + b1n + b0 และให้ ai = | bi | ดังนั้น f(n) aknk + ak-1nk-1 + … + a1n + a0 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Some Rules Transitivity f(n) = O(g(n)) and g(n) = O(h(n)) f(n) = O(h(n)) Addition f(n) + g(n) = O(max { f(n) ,g(n)}) Polynomials a0 + a1n + … + adnd = O(nd) Heirachy of functions n + log n = O(n); 2n + n3 = O(2n) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Some Rules Base of Logs ignored logan = O(logbn) Power inside logs ignored log(n2) = O(log n) Base and powers in exponents not ignored 3n is not O(2n) a(n)2 is not O(an) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Big-Oh Complexity O(1) The cost of applying the algorithm can be bounded independently of the value of n. This is called constant complexity. O(log n) The cost of applying the algorithm to problems of sufficiently large size n can be bounded by a function of the form k log n, where k is a fixed constant. This is called logarithmic complexity. O(n) linear complexity O(n log n) n lg n complexity O(n2) quadratic complexity 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Big-Oh Complexity (cont.) O(n3) cubic complexity O(n4) quartic complexity O(n32) polynomial complexity O(cn) If constant c 1, then this is called exponential complexity O(2n) exponential complexity O(en) exponential complexity O(n!) factorial complexity 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Practical Complexity t < 500 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Practical Complexity t < 5000 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Practical Complexity 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Things to Remember in Analysis ค่าคงที่ (Constants) หรือเทอมที่อยู่ในลำดับต่ำ (low-order terms) จะถูกละทิ้ง เช่น ถ้า f(n) = 2n2 ดังนั้น f(n) = O(n2) ทรัพยากรที่สำคัญที่สุดที่วิเคราะห์คือ running time; ปัจจัยอื่นที่สำคัญรองลงมาได้แก่ algorithm used และ input to the algorithm ค่า Parameter N, โดยปกติหมายถึงจำนวนข้อมูลที่ใช้ในการประมวลผลซึ่งมีผลกระทบมากที่สุดต่อระยะเวลาที่ใช้ในการทำงานของอัลกอริธึม N อาจหมายถึง degree of polynomial, ขนาดของไฟล์ข้อมูลที่ใช้ในการเรียงลำดับหรือการค้นหา, จำนวนของโหนดในกราฟ เป็นต้น 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
Things to Remember in Analysis กรณีที่แย่ที่สุด (Worst case) หมายถึงระยะเวลาการทำงานของอัลกอริธึมในกรณีที่ข้อมูลนำเข้ามีการเรียงตัวกันในรูปแบบที่ต้องใช้เวลาในการทำงานมากที่สุด กรณีโดยเฉลี่ย (Average case) หมายถึงระยะเวลาการทำงานของอัลกอริธึมที่คาดว่าจะใช้สำหรับประมวลผลข้อมูลนำเข้าโดยปกติทั่วๆไป (typical input data) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
General Rules for Analysis (1) 1. ประมวลผลกลุ่มคำสั่งตามลำดับ (Consecutive statements) นับเวลาของกลุ่มคำสั่งที่ใช้เวลานานที่สุด เช่น ส่วนของคำสั่งที่เป็น loop เดียวตามด้วยส่วนของคำสั่งที่เป็นสอง loop ซ้อนกัน ผลลัพธ์คือ O(n2). Block #1 Block #2 t1 t2 t1+ t2 = max(t1,t2) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
General Rules for Analysis(2) 2. คำสั่งประเภท If/Else if cond then S1 else S2 Block #1 Block #2 t1 t2 Max(t1,t2) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
General Rules for Analysis(3) 3. For Loops Running time of a for-loop is at most the running time of the statements inside the for-loop times number of iterations for (i = sum = 0; i < n; i++) sum += a[i]; for loop iterates n times, executes 2 assignment statements each iteration ==> asymptotic complexity of O(n) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
General Rules for Analysis(4) 4. Nested For-Loops ทำการวิเคราะห์จากข้างในออกมา (Analyze inside-out) เวลาที่ใช้ทั้งหมดคือเวลาที่ใช้ในการประมวลผลคำสั่งคูณด้วยผลคูณของขนาดของ loop ทั้งหมด เช่น for (i =0; i < n; i++) for (j = 0, sum = a[0]; j <= i ; j++) sum += a[j]; printf("sum for subarray - through %d is %d\n", i, sum); 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
General Rules for Analysis 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
General Rules for Analysis กลยุธในการวิเคราะห์ วิเคราะห์จากข้างในออกมา (analyze from inside out) วิเคราะห์การเรียกใช้ฟังก์ชันก่อน (analyze function calls first) 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี
CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Next Lecture Sorting Algorithms and Analysis 5-Jun-19 CSE221NMT221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี