1 / 22

Big-oh

Big-oh. T(N) = O(f(N)) ถ้ามีค่าคงที่บวก c และ n 0 ที่ทำให้ T(N) ≤ c f(N) เมื่อ N ≥ n 0. หมายความว่า เมื่อค่า N มากขึ้น จนกระทั่งมากกว่าค่าคงที่ n0 จะได้ T(N) มีค่าน้อยกว่า cf(N) สมการของ Big-oh, T(N) = O(f(N)) จะมองว่า

iden
Download Presentation

Big-oh

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Big-oh T(N) = O(f(N)) ถ้ามีค่าคงที่บวก c และ n0 ที่ทำให้ T(N) ≤ c f(N) เมื่อ N ≥ n0 • หมายความว่า เมื่อค่า N มากขึ้น จนกระทั่งมากกว่าค่าคงที่ n0 จะได้ T(N) มีค่าน้อยกว่า cf(N) • สมการของ Big-oh, T(N) = O(f(N)) จะมองว่า อัตราการเติบโต (Growth Rate) ของฟังก์ชั่น T(N) น้อยกว่าหรือเท่ากับf(N) Week 04b - Algorithm Analysis (Con't)

  2. Big-Oh ตัวอย่าง ให้ T(N) = 250Nและ f(N) = N2 พิจารณา N < 250 : 250N > N2 N = 250 : 250N = N2 N > 250 : 250N < N2 จะเห็นได้ว่าถ้าให้ c=1 และ n0 = 250 จะได้ (250N) ≤ 1* (N2) เมื่อ N ≥ 250 T(N) ≤ 1* f(N) เมื่อ N ≥ 250 หรือเรียกได้ว่า 250N = O(N2) นั่นคือ อัตราการเติบโตของ 250N น้อยกว่าหรือเท่ากับ N2 Week 04b - Algorithm Analysis (Con't)

  3. Omega (Ω) T(N) = Ω(g(N)) ถ้ามีค่าคงที่บวก c และ n0 ที่ทำให้ T(N) ≥ c g(N) เมื่อ N ≥ n0 • หมายความว่า เมื่อค่า N มากขึ้น จนกระทั่งมากกว่าค่าคงที่ n0 จะได้ T(N) มีค่ามากกว่า cg(N) • สมการของ Omega, T(N) = Ω(g(N)) จะมองว่า อัตราการเติบโต (Growth Rate) ของฟังก์ชั่น T(N) มากกว่าหรือเท่ากับg(N) Week 04b - Algorithm Analysis (Con't)

  4. Theta (Θ) T(N) = Θ(h(N)) เมื่อ T(N) = O(h(N)) และ T(N) = Ω(h(N)) ด้วย เท่านั้น • หมายความว่า เมื่อค่า N มากขึ้น จนกระทั่งมากกว่าค่าคงที่ n0 จะได้ T(N) มีค่าเท่ากับ cg(N) • สมการของ Omega, T(N) = Θ(h(N)) จะมองว่า อัตราการเติบโต (Growth Rate) ของฟังก์ชั่น T(N) มากกว่าหรือเท่ากับh(N)พอดี Week 04b - Algorithm Analysis (Con't)

  5. Little-oh (o) T(N) = o(p(N)) ถ้า T(N) = O(p(N)) และ T(N) ≠Θ(p(N)) • หมายความว่า เมื่อค่า N มากขึ้น จนกระทั่งมากกว่าค่าคงที่ n0 จะได้ T(N) มีค่ามากกว่าแต่ไม่เท่ากับ cp(N) • สมการของ Little-oh, T(N) = o(p(N)) จะมองว่า อัตราการเติบโต (Growth Rate) ของฟังก์ชั่น T(N) มากกว่าp(N)เท่านั้น Week 04b - Algorithm Analysis (Con't)

  6. ตัวอย่าง พิจารณาฟังก์ชั่น f(N) = 8N 2 • 8N2 โตเร็วกว่า 15N 8N2 = Ω(15N) 15N= O(8N2) • 8N2โตเท่ากับ 26N2 8N2 = O(26N2) 8N2 = Ω(26N2) 8N2 = Θ(26N2) *** • 8N2โตช้ากว่า 2N3 8N2 =O(2N3) Week 04b - Algorithm Analysis (Con't)

  7. กฎในการคำนวณอัตราการเติบโตกฎในการคำนวณอัตราการเติบโต • ถ้า T1(N) = O(f(N)) และ T2(N) = O(g(N)) แล้ว จะได้ (a.)T1(N) + T2(N) = max(O(fN), O(g(N))) (b.)T1(N) * T2(N) = O(f(N) * g(N)) • ถ้า T(N) เป็นสมการพหุนามกำลัง k(Polynomial degree k) แล้ว จะได้ T(N) = Θ(Nk) นั่นคือ อัตราการเติบโตของฟังก์ชั่นพหุนามกำลัง k เป็น Nk • logkN = O(N) สำหรับค่า k ใดๆ นั่นคือ logkN โตช้ากว่าNดังนั้นจะได้ว่าอัลกอริทึมนั้นๆมีอัตราการเติบโตต่ำมากๆ Week 04b - Algorithm Analysis (Con't)

  8. อัตราการเติบโต Week 04b - Algorithm Analysis (Con't)

  9. หลักการวิเคราะห์อัลกอริทึม • สำหรับการเลือกอัลกอริทึม สิ่งที่เราต้องวิเคราะห์ได้แก่ทรัพยากรที่ใช้ในการทำงานบนอัลกอริทึมนั้นๆ โดยทรัพยากรที่สำคัญที่สุดได้แก่เวลาที่ใช้ในการทำงาน (Running Time) • ปัจจัยที่มีผลต่อ Running Time ได้แก่ คอมไพล์เลอร์ (Compiler), เครื่องคอมพิวเตอร์, Algorithm ที่ใช้ และ Input สำหรับการทำงานบน algorithm นั้นๆ • ขนาดของ Input (N) ถือเป็นสิ่งที่เรานำมาพิจารณามากที่สุด Week 04b - Algorithm Analysis (Con't)

  10. Running Time • Tavg(N) = เวลาในการทำงานโดยเฉลี่ย (Average Running Time) • Tworst(N) = เวลาในการทำงานในกรณีเลวร้ายที่สุด (Worst-case Running Time) โดยทั่วไป จำนวนของ input ที่ต้องการจะระบุให้กับกรณี worst-case นั่นคือ เราจะระบุขอบเขตของ input ทั้งหมดโดยเฉพาะอย่างยิ่ง input ที่ไม่ดี Week 04b - Algorithm Analysis (Con't)

  11. ตัวอย่าง • เมื่อให้หาค่าผลรวมที่มากที่สุดของชุดตัวเลขที่ติดกัน ∑k=i j Ai จะได้ Running Time สำหรับแต่ละขนาดของ input ดังตาราง Week 04b - Algorithm Analysis (Con't)

  12. เปรียบเทียบระหว่าง Algorithm ที่ใช้ทั้ง 4 Algorithms จะได้ Running Time ดังกราฟ Week 04b - Algorithm Analysis (Con't)

  13. ค่าจำนวน Input (N) เทียบกับ Running Time (s.) สำหรับ Algorithm ต่างๆ Week 04b - Algorithm Analysis (Con't)

  14. หลักในการวิเคราะห์อัลกอริทึมหลักในการวิเคราะห์อัลกอริทึม เพื่อให้การวิเคราะห์ง่ายขึ้น เราได้ยึดหลักว่า • ไม่มีการระบุหน่วยของเวลาในการวิเคราะห์ • ไม่พิจารณาค่าคงที่ (Constant) ที่นำหน้าฟังก์ชั่น • ไม่พิจารณาเทอมที่มี Order ต่ำกว่า เช่น 3N3 + 6N + 10 เราจะพิจารณาเฉพาะเทอมสูงสุด นั่นคือ 3N3 ซึ่งคิดเป็น O(N3) • ใช้หลัก Big-oh ในการพิจารณาเท่านั้น Week 04b - Algorithm Analysis (Con't)

  15. N ∑ i3 i=1 กำหนดค่าตัวแปร = 1 time unit กำหนดค่าเริ่มต้น 1 (i=1) เป็น 1 unit ตรวจสอบค่า (i<=N) ทั้งหมด N+1 รอบ เพิ่มค่า (i++) ทั้งหมด N รอบ ดังนั้น ได้ 1+N+1+N = 2N+2 unit ดำเนินการ รวม 4 time unit *, *, +, = ทำงานทั้งหมด N รอบ ดังนั้นเป็น 4N Return ค่า 1 unit int mySum (int N) { int i, Sum; Sum = 0; for(i=1; i <=N; i++) Sum += i * i * i; return Sum; } • ตัวอย่าง คำนวณค่า 1+4N+1+(2N+2) = 6N+4 units = O(N) Week 04b - Algorithm Analysis (Con't)

  16. กฏการวิเคราะห์ • Rule 1: For Loops Running Time ของ For Loop จะมีค่าสูงสุดเท่ากับค่าการทำงานของคำสั่งภายใน Loop (รวมถึงการ test ด้วย) คูณด้วยจำนวนการวน Loop • Rule 2: Nested For Loops การคำนวณ Running Time ของ For Loop หลายอันซ้อนกัน ให้คำนวณจากในไปนอก จะได้ Running Time เท่ากับค่าการทำงานของคำสั่งภายใน Loop คูณด้วยผลคูณของขนาดของการวน Loop ของ Loop ทั้งหมด Week 04b - Algorithm Analysis (Con't)

  17. Rule 1 - Loop for (int i=0; i<N; i++) temp = temp * i * i; • Loop i วนทั้งหมด N รอบ • แต่ละรอบทำงาน 3 operations ได้แก่ การคูณ 2 รอบ แล้วการ assign ค่าด้วยเครื่องหมาย (=) • ดังนั้นภายในloop ทำงานคิดเป็น 3N • ตัว loop เองประกอบด้วย • การกำหนดค่าเริ่มต้น i=0 คิดเป็น 1 time unit • การ test i<N ทั้งหมด N+1รอบ • เพิ่มค่า i++ ทั้งหมด Nรอบ • ได้ running time เป็น 3N +(1+(N +1)+N) = 5N + 2= O(N) Week 04b - Algorithm Analysis (Con't)

  18. Rule 2 - Nested For Loops for (int i=0; i<N; i++) for (int j=0; j<N; j++) k += 2; • Loop นอก (loop i) วนทั้งหมด N รอบ • Loop ใน (loop j) วนทั้งหมด N รอบ • ได้ running time เป็น O(N 2) *** Week 04b - Algorithm Analysis (Con't)

  19. กฏการวิเคราะห์ • Rule 3:Consecutive Statements สำหรับคำสั่งที่ต่อกัน ให้บวก Running Time เข้าด้วยกัน แล้วนำค่าที่ให้ Running Time สูงสุดมาพิจารณา • Rule 4: If-Else Statement ค่า Running Time ของ If-Else จะไม่มากไปกว่า Running Time ของการ Test เงื่อนไข บวกด้วยค่า Running Time ของแต่ละกรณีที่จะเกิดขึ้น Week 04b - Algorithm Analysis (Con't)

  20. O(N) O(N2) Rule 3 - Consecutive Statements for (int i=0; i<N; i++) a[i] = a[i] + 10; for (int j=0; j<N; j++) for (int k=0; k<N; k++) a[k] += 2; • Statement ชุดแรกให้ running time เป็น O(N) • Statement ชุดที่สองให้ running time เป็น O(N2) • นำค่าที่ให้ Running Time สูงสุดมาพิจารณา • ได้ running time เป็น O(N 2) *** Week 04b - Algorithm Analysis (Con't)

  21. Rule 4 – If-Else Statement if (condition) { statement 1 } else { statement 2 } ค่า Running Time ของ If-Else จะไม่มากไปกว่า Running Time ของการ Test conditionบวกด้วยค่า Running Time ของ statement 1 หรือ statement 2 Week 04b - Algorithm Analysis (Con't)

  22. Example1: Factorial with recursion int factorial (int n) { if( n == 0 ) return 1; else return ( n * factorial(n - 1)); } • การ test condition if(n==0)ให้ running time เป็น 1 • การ return 1ให้ running time เป็น 1 • ในส่วนของการ recursion ต้องเรียกฟังก์ชั่น factorial นี้ทั้งหมด n ครั้ง (ครั้งนี้ และอีก n-1 ครั้ง เพื่อคำนวณค่า factorial (n-1)) • ได้ running time ทั้งหมดเป็น O(N) Week 04b - Algorithm Analysis (Con't)

More Related