1 / 48

Chapter 7 Algorithm and Growth of Functions

Chapter 7 Algorithm and Growth of Functions. 1. Algorithm. ขั้นตอนวิธี( algorithm ) หมายถึง กระบวนการต่างๆ ที่เป็นลำดับขั้นตอน ในการแก้ปัญหา โดยมีขั้นตอนที่จำกัดและแน่นอน ตัวอย่าง : กำหนดลำดับ { a i }= a 1 ,…, a n โดย a i  N , จงหาค่าสมาชิกในลำดับที่มีค่ามากที่สุด

ramona
Download Presentation

Chapter 7 Algorithm and Growth of Functions

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. Chapter 7 Algorithm and Growth of Functions 1

  2. Algorithm ขั้นตอนวิธี(algorithm) หมายถึง กระบวนการต่างๆ ที่เป็นลำดับขั้นตอน ในการแก้ปัญหา โดยมีขั้นตอนที่จำกัดและแน่นอน ตัวอย่าง:กำหนดลำดับ {ai}=a1,…,anโดย aiN, จงหาค่าสมาชิกในลำดับที่มีค่ามากที่สุด ขั้นตอนวิธี ทำได้โดย: • กำหนดค่าของตัวแปรชั่วคราวv (ตัวแปร v นี้ใช้เก็บค่าที่มากที่สุดของสมาชิกตั้งแต่ตัวแรกจนถึงตัวปัจจุบัน) ให้กับค่าของสมาชิกa1 • พิจารณาค่าของสมาชิกตัวต่อไปในลำดับ แทนด้วยai • ถ้าai>v, ดังนั้น กำหนดค่าตัวแปรvใหม่ให้เท่ากับค่าai • ทำซ้ำขั้นที่ 2. และ 3. จนกระทั่งไม่มีสมาชิกในลำดับเหลือแล้ว จากนั้นจึงส่งค่าตัวแปรvกลับไปเป็นคำตอบที่ต้องการ

  3. Executing the Max algorithm • เมื่อเขียนขั้นตอนวิธีที่ใช้แก้ปัญหาเรียบร้อยแล้ว สามารถตรวจสอบขั้นตอนผลลัพธ์ที่ได้ โดยการเขียนผลลัพธ์ที่ได้จากแต่ละขั้นตอนลงในกระดาษ • กำหนด {ai}=7,12,3,15,8 จงหาสมาชิกที่มีค่าที่มากที่สุด… • ให้v = a1 = 7 • พิจารณาไปที่สมาชิกตำแหน่งถัดไป: a2 = 12 • a2>v หรือไม่? ถ้าใช่, กำหนดค่าตัวแปรv = 12 • พิจารณาไปที่สมาชิกตำแหน่งถัดไป : a3 = 3 • 3>12 หรือไม่? ไม่ใช่, ดังนั้นค่าของตัวแปรvยังคงเป็นค่าเดิม…. • 15>12 หรือไม่? ใช่, กำหนดค่าตัวแปรv=15 ทำเช่นนี้ไปจนครบทุกตัว …

  4. Algorithm Characteristics Some important general features of algorithms: • Input. Information or data that comes in. • Output. Information or data that goes out. • Definiteness. Algorithm is precisely defined. • Correctness.Outputs correctly relate to inputs. • Finiteness. Won’t take forever to describe or run. • Effectiveness. Individual steps are all do-able. • Generality. Works for many possible inputs. • Efficiency.Takes little time & memory to run.

  5. Pseudocode • เป็นการอธิบาย algorithm โดยเขียนเป็นคำสั่งต่างๆ เพื่ออธิบายได้ละเอียดขึ้น ภาษาเทียมนี้ไม่ใช่ภาษา computer แต่มีรูปแบบค่อนข้างคล้ายคลึงกับบางภาษาทำให้เขียนเป็น Program Computer ได้ง่ายขึ้น • โครงสร้างการเขียน algorithm ใช้ตัวเลขกำกับ(หรืออาจละไว้)ในแต่ละระดับการทำงาน และใช้การเยื้องหน้า แสดงการทำงานลำดับถัดไปภายในระดับเดียวกัน

  6. procedurename(argument: type) variable:=expression {informal statement} beginstatementsend {comment} ifconditionthenstatement [elsestatement] for variable:=initial value to final valuestatement whileconditionstatement returnexpression Pseudocode Language STATEMENTS

  7. คำสั่งที่พบใช้บ่อย 1. Assignment statement กำหนดค่า ตัวแปร:=นิพจน์ เป็นการคำนวณค่าจากนิพจน์ ผลลัพธ์ที่ได้เก็บไว้ภายใต้ชื่อตัวแปรด้านซ้าย 2. Condition Statement เงื่อนไขทางเลือก IF เงื่อนไขตรรกะ THEN true-block ELSE false-block เป็นการเช็คเงื่อนไข ถ้า จริง พิจารณา Then ทำ true block แต่ถ้าเงื่อนไข เท็จ พิจารณา Else ทำ false block

  8. คำสั่งที่พบใช้บ่อย 3. Repetition statement การทำงานซ้ำๆ หรือ เป็นการวน Loop WHILE (condition) repeat - block เป็นการทำซ้ำที่ไม่รู้ว่าทำกี่รอบ แต่มีเงื่อนไขในการหยุดวน ถ้าเงื่อนไขเป็น จริง ทำภายใน loop (repeat-block) ถ้าเงื่อนไขเป็น เท็จ ออกจาก loop FORค่าเริ่มต้น TOค่าสิ้นสุด repeat - block เป็นการทำซ้ำที่ทราบจำนวนรอบในการวนซ้ำแน่นอน

  9. Max procedure in pseudocode proceduremax(a1, a2, …, an: integers) v:=a1{กำหนดตัวแปร v ไว้ใช้เก็บค่ามากที่สุด} fori:= 2 ton {พิจารณาสมาชิกตัวถัดไปที่เหลืออยู่} ifai > vthen v:=ai {พบค่าที่มากกว่าตัวแปร v ?} {เมื่อวนลูปครบถึงสมาชิกตัวสุดท้ายแล้ว ค่าของตัวแปรv คือค่าของสมาชิกที่มีค่ามากที่สุด} returnv

  10. Example task • ขั้นตอนวิธีในการค้นหาข้อมูลในรายการ(List) • กำหนดรายการL ที่มีสมาชิกnตัวซึ่งถูกเรียงลำดับไว้เรียบร้อยแล้ว • กำหนดค่าสมาชิกที่ต้องการค้นหาสมมติเป็นตัวแปรx • พิจารณาว่ามีสมาชิกxอยู่ในรายการหรือไม่ • ถ้าสมาชิกxอยู่ในรายการให้คืนค่าตำแหน่ง(index)ของ x ที่อยู่ในรายการ • จงหาขั้นตอนวิธีที่มีประสิทธิภาพในการแก้ปัญหานี้

  11. Search alg. #1: Linear Search procedurelinear search(x: integer, a1, a2, …, an: distinct integers)i:= 1 {เริ่มที่ตำแหน่งแรกในรายการ}while (i n  x  ai) {ในขณะที่ยังค้นไม่หมดและยังไม่พบ}i:=i + 1 {เลื่อนไปยังตำแหน่งถัดไป}ifi n then location:=i{ค้นพบค่าที่ต้องการ}elselocation:= 0 {ไม่พบค่าที่ต้องการ}return location {หากค้นพบคืนค่าตำแหน่งที่พบ หรือ หากค้นไม่พบ คืนค่า 0}

  12. Search alg. #2: Binary Search • แนวคิด: ในแต่ละขั้นตอน จะเริ่มต้นด้วยการหาจุดกึ่งกลางก่อน เพื่อตัดครึ่งส่วนที่ไม่เกี่ยวข้องออกไป ทำเช่นนี้ไปจนกระทั่งจุดเริ่มต้นมากกว่าจุดสุดท้าย(พิจารณาสมาชิกหมดทุกตัวแล้ว) <x <x <x >x

  13. Search alg. #2: Binary Search procedurebinary search(x:integer, a1, a2, …, an: distinct integers)i:= 1 {กำหนดจุดปลายช่วงการค้นหาด้านซ้ายมือ}j:=n{กำหนดจุดปลายช่วงการค้นหาด้านขวามือ}while i<j begin{ในขณะที่ช่วงการค้นหายังมีสมาชิก >1 ตัว}m:=(i+j)/2 {คำนวณหาจุดกลาง}ifx>amtheni := m+1 else j := mendifx = aithenlocation:=ielselocation:= 0returnlocation

  14. สมาชิกที่อยู่กึ่งกลางสมาชิกที่อยู่กึ่งกลาง Algorithm Examples ต้องการค้นหาตัวอักษร‘k’ ช่วงของการค้นหา a c d f g h k l m o p r s u v x z

  15. สมาชิกที่อยู่กึ่งกลางสมาชิกที่อยู่กึ่งกลาง Algorithm Examples ต้องการค้นหาตัวอักษร ‘k’ ช่วงของการค้นหา a c d f g h k l m o p r s u v x z

  16. สมาชิกที่อยู่กึ่งกลางสมาชิกที่อยู่กึ่งกลาง Algorithm Examples ต้องการค้นหาตัวอักษร ‘k’ ช่วงของการค้นหา a c d f g h k l m o p r s u v x z

  17. สมาชิกที่อยู่กึ่งกลางสมาชิกที่อยู่กึ่งกลาง Algorithm Examples ต้องการค้นหาตัวอักษร ‘k’ ช่วงของการค้นหา a c d f g h k l mo p r s u v x z

  18. สมาชิกที่อยู่กึ่งกลางสมาชิกที่อยู่กึ่งกลาง Algorithm Examples ต้องการค้นหาตัวอักษร ‘k’ ช่วงของการค้นหา a c d f g h k l mo p r s u v x z ค้นพบตัว kที่ต้องการ!

  19. Time Complexity • สิ่งที่เราสนใจในการวิเคราะห์ขั้นตอนวิธี(Algorithm) คือประสิทธิภาพของขั้นตอนวิธี ซึ่งพิจารณาจาก: 1. เวลา(time)ที่ใช้ในการทำงานขั้นตอนวิธีนั้น 2. พื้นที่หน่วยความจำ(memory space)ที่ขั้นตอนวิธีนั้นใช้ โดยในบทนี้จะพิจารณาประสิทธิภาพของขั้นตอนวิธีจากการคำนวณหาฟังก์ชั่นความซับซ้อนของเวลา(Time complexity)

  20. Time Complexity • เวลาที่ใช้ในการทำงานของขั้นตอนวิธี จะพิจารณาจากการประมาณจำนวนครั้งของการดำเนินการ(number of operations)ที่กระทำต่อข้อมูลเข้าจำนวน nตัว โดยการดำเนินการหลักที่ใช้ในขั้นตอนวิธีได้แก่ • Assignment(:=) • Comparison(=, ≠,<, >, ≤, ≥) • Arithmetic operation(+, -, ×, ÷) • Logical operations (and, or, not) • กำหนดให้f(n)แทนฟังก์ชั่นของเวลาที่ใช้ในการทำงานของขั้นตอนวิธีเมื่อมีข้อมูลเข้าขนาดnตัวซึ่งเราจะเรียกf(n)ว่าฟังก์ชั่นความซับซ้อนของเวลา(time complexity)ของขั้นตอนวิธี

  21. Orders of Growth ในการวิเคราะห์เวลาที่ขั้นตอนวิธีใช้ เราจะพิจารณาจากกรณีที่แย่ที่สุด(worst case)หรือกรณีที่ขั้นตอนวิธีนั้นใช้เวลาในการทำงานอย่างมากที่สุด กับข้อมูลเข้าขนาด n ตัว ก่อนอื่นจึงต้องพิจารณาฟังก์ชั่นของเวลาและประมาณการว่าฟังก์ชั่นนั้นมีการเติบโตเร็วเพียงใด เพราะเราจะกล่าวว่าขั้นตอนวิธีหนึ่งมีประสิทธิภาพมากกว่าอีกขั้นตอนวิธีหนึ่ง หากว่าขั้นตอนวิธีนั้น มีฟังก์ชั่นของเวลาในการทำงาน(ในกรณีที่แย่ที่สุด)เป็นอันดับการเติบโตที่ต่ำกว่า ถ้าฟังก์ชั่นf(n) โตเร็วกว่าg(n), ดังนั้นf(n) จะค่อยๆมีค่ามากกว่าg(n) ที่ค่าใดค่าหนึ่ง (เมื่อ n มีค่ามากเพียงพอ) การพิจารณาการเติบโตของฟังก์ชั่นนี้ ใช้ประโยชน์ในการแสดงว่า การออกแบบโปรแกรมแบบหนึ่งดีกว่า(มีประสิทธิภาพดีกว่าคือ ใช้เวลาและหน่วยความจำน้อยกว่า) หรือแย่กว่าอีกแบบหนึ่งได้ 21

  22. ขนาดของข้อมูลเข้า โปรแกรม A โปรแกรม B n 10n+12 n2+1 1 22 2 112 101 10 100 1,012 10,001 1,000 10,012 1,000,001 100,000 1,000,012 10,000,000,001 Orders of Growth - Motivation • สมมติโปรแกรมฐานข้อมูล A ใช้เวลาfA(n)=10n+12 ไมโครวินาที ในการประมวลผลข้อมูลnเรคคอร์ด ในขณะที่โปรแกรม Bใช้เวลา fB(n)=n2+1 ไมโครวินาที ในการประมวลผลข้อมูลnเรคคอร์ด • ท่านจะเลือกใช้โปรแกรมใดเพื่อให้เกิดการใช้เวลาที่น้อยที่สุด A

  23. Visualizing Orders of Growth จากกราฟจะเห็นว่าเมื่อค่า n เพิ่มมากขึ้น ฟังก์ชั่นที่ โตเร็วกว่าจะค่อยๆมีค่า มากกว่าอีกฟังก์ชั่นหนึ่ง fA(n)=10n+12 Value of function  fB(n)=n2+1 Increasing n  23

  24. สังเกตว่า 10n+12 มีค่า ไม่น้อยกว่าn เมื่อ n>0 และไม่น้อยกว่า 11nสำหรับทุกๆค่าของ n ที่ n มีน้อยกว่า12 แต่น้อยกว่า 11nเมื่อ n มีค่ามากกว่า 12 Big-O example, graphically cn =11n nk=12  10n+12 10n+12O(n) Value of function  n Increasing n  24

  25. Concept of order of growth กล่าวได้ว่าfA(n)=10n+12เป็นอันดับอย่างมากที่สุด n (at mostorder n), หรือO(n) fB(n)=n2+1เป็นอันดับอย่างมากที่สุด n2, หรือO(n2) ฟังก์ชั่นใดๆที่เป็นอันดับ O(n2) เป็นฟังก์ชั่นที่โตเร็วกว่าฟังก์ชั่นใดๆที่มีอันดับ O(n) เมื่อมีจำนวนข้อมูลมากขึ้นฟังก์ชั่นที่มีอันดับ n2จะใช้เวลาในการประมวลผลมากกว่า 25

  26. Example อัลกอริธึมAและBมีtime complexities fและgตามลำดับ โดยกำหนดให้ f(n) = 3 n2 - 3n + 1 และg(n)=n2 จงหาว่าอัลกอริธึมใดเร็วกว่า Solutionขั้นแรก หาค่าของnที่ทำให้f(n)=g(n) ดังนั้น 3 n2 - 3n + 1 = n2 2 n2 - 3n + 1 = 0 (2n - 1)(n - 1) = 0 n = 1/2 หรือn = 1

  27. Example n นำค่าn ที่มีค่ามากกว่ามาพิจารณา นั่นคือn > 1, สมมติให้n = 2 ดังนั้น f(2) = 3(2)2 - 3(2) + 1 = 7 และ g(2) = 22 = 4 ดังนั้นg(n) < f(n) สำหรับทุกค่าn > 1 ดังนั้นg(n)ใช้เวลาน้อยกว่า จึงกล่าวได้ว่าอัลกอริธึมBเร็วกว่า(มีประสิทธิภาพดีกว่า)

  28. The Growth of Functions การเติบโตของฟังก์ชันมักอธิบายในรูปของ big-O notation กำหนดให้ f และ g เป็นฟังก์ชันจาก RR จะกล่าวได้ว่า f(n) เป็น O(g(n))ถ้ามีค่าคงที่ cและkที่ทำให้|f(n)|  c |g(n)| เมื่อไรก็ตามที่n k หรือกล่าวได้ว่า“fเป็นอันดับอย่างมากที่สุด(at most order) g”, หรือ“fเป็น O(g)”, “f=O(g)” หรือหมายถึง fO(g) นั่นเอง big-O notationใช้เพื่อแสดงขอบบนของการเติบโตของฟังก์ชันf(n)เมื่อnมีค่ามากขึ้นเรื่อยๆ โดยระบุขอบเขตนี้ด้วยฟังก์ชันg(n)ซึ่งมักจะเขียนในรูปแบบที่ง่ายกว่า f(n) เช่น 2n+5O(n) เมื่อทำการวิเคราะห์ฟังก์ชันความซับซ้อนf(n)และg(n)มักจะมีค่าเป็นบวก ดังนั้น สามารถนิยามbig-Oอย่างง่ายได้ดังนี้ f(n)  cg(n)เมื่อไรก็ตามที่ n  k 28

  29. The Growth of Functions ถ้าต้องการแสดงว่า f(n)เป็นO(g(n)),ทำได้โดยการหาค่าคงที่ c และkใดๆ หนึ่งคู่ที่สอดคล้องกับนิยาม โดยค่าคงที่ c, k ที่ทำให้นิยามเป็นจริงนั้นอาจจะมีได้หลายค่า เพราะค่าใดๆที่มากกว่าค่า cและ/หรือค่า kก็จะทำให้นิยามของ big-Oยังคงเป็นจริงด้วยเช่นกัน f (n) Value of function  k f (n) = O ( g ( n )) c g (n) f(n)  c*g(n) , เมื่อ n k n 29

  30. จงแสดงว่า n2 + 10 nO(n2) • ทำได้โดยหาค่าc,k: n>k:n2+10n  cn2 • เพราะ n2+10nn2+n2เมื่อ n 10 นั่นคือ • n2 + 10n 2n2สำหรับทุกค่า n  10 จึงได้ว่าc = 2 , k = 10 1400 1200 1000 n2 + 10n 800 Value of function  600 2 n2 400 200 n 0 0 10 20 30 k =10

  31. Does 5n+2  O(n)? Yes Proof: จากนิยามของ Big Oh, ต้องมีค่าc>0 และจำนวนเต็มk>0 ซึ่งทำให้ 5n+2 cnสำหรับทุกๆค่าn  k ในการพิสูจน์สามารถเลือกค่าcและk ได้หลายค่า เช่น ถ้าเลือกค่าk=1ดังนั้น 5(1)+2 c = 7 หรือ ถ้าเลือกค่าc=6ดังนั้น 5n+26nดังนั้นn2 นั่นคือ k=2 ไม่ว่ากรณีใดข้างต้น เราสามารถหาค่าc>0 และk>0 ซึ่งทำให้ 5n+2 cnสำหรับทุกๆค่าn k ดังนั้นจึงเป็นไปตามนิยามของ Big Oh จึงสรุปได้ว่า 5n+2 O(n)

  32. Does n2  O(n)? No พิสูจน์โดยวิธีขัดแย้ง(Prove by contradiction) โดยสมมติให้n2  O(n) จากนิยามของ Big Oh, ต้องมีค่าc>0 และจำนวนเต็มk>0 ซึ่งทำให้ 0 n2 cnสำหรับทุกๆค่าn k n2 cnเป็นเท็จเมื่อn ค่ามากกว่า max{c, k}, จึงเกิดการขัดแย้งกับสมมติฐานที่ตั้งไว้ในตอนต้น ดังนั้นไม่มีค่าคงที่c>0 ซึ่งทำให้n2 cnจริงตามเงื่อนไข สำหรับทุกๆค่าn k, ดังนั้น n2 O(n)

  33. Example • จงแสดงว่าf(n) = 7n2เป็น O(n3) เมื่อn  7 จะได้ว่า: 7n2  n3 ดังนั้น เมื่อc = 1 และk = 7: f(n)  cn3โดยที่n  k • f(n) เป็นO(n3) ข้อสังเกต: ถ้า f(n) เป็นO(n2) แล้วf(n) เป็นO(n3) เพราะฟังก์ชันn3โตเร็วกว่าn2, ดังนั้นn3โตเร็วกว่าf(n) 33

  34. Useful Rules for Big-O c>0, O(cf)=O(f+c)=O(f - c)=O(f)Example: 23*log n เป็นO(log n) ถ้าf1(n)เป็นO(g1(n))และf2(n)เป็นO(g2(n)), ดังนั้น(f1 + f2)(n)เป็นO(max(g1(n), g2(n))) Example: อันดับ(order)ของn2+nคือ?n2มีอันดับเป็นO(n2) , nมีอันดับเป็นO(n)ดังนั้นn2+nมีอันดับO(max(n2,n))นั่นคือn2+nมีอันดับO(n2) สำหรับฟังก์ชันพหุนาม (polynomial)ใดๆ f(n) = aknk + ak-1nk-1 + … + a0, เมื่อ a0, a1, …, akเป็นจำนวนจริง, ฟังก์ชันf(n) มีอันดับเป็น O(nk) Example: อันดับ(order)ของ4n3 + 2n2 + n + 5 คือO(n3) 34

  35. Useful Rules for Big-O • ถ้า f1(n) เป็น O(g(n)) และ f2(n) is O(g(n)), ดังนั้น (f1 + f2)(n) เป็น O(g(n)) Example: อันดับ(order)ของn2+ 3n2+1 คือ?n2เป็น O(n2)3n2 + 1 เป็น O(n2)ดังนั้น n2+ 3n2+1 เป็น O(n2) • ถ้า f1(n) เป็น O(g1(n)) และ f2(n) is O(g2(n)), ดังนั้น(f1f2)(n) เป็น O(g1(n) g2(n)) Example: อันดับ(order)ของ(3n+1)*(2n+log n) คือ?3n+1 เป็น O(n)2n+log n เป็น O(n)(3n+1)*(2n+log n) เป็น O(n*n)=O(n2)

  36. The Growth of Functions ตัวอย่าง:จงแสดงว่า f(x) = x2 + 2x + 1 เป็น O(x2) เมื่อ x  1 จะได้ว่า: x2 + 2x + 1  x2 + 2x2 + x2 x2 + 2x + 1  4x2 ดังนั้น เมื่อ c = 4 และ k = 1 โดยนิยาม f(x)  cx2โดยที่ x  k • f(x) เป็น O(x2)# ตัวอย่าง: จงใช้ big-O ประมาณค่าของผลบวกของจำนวนเต็มบวก n ตัวแรก วิธีทำ ผลบวกจำนวนเต็มบวก n ตัวแรก เขียนแทนด้วย 1 + 2 + … + n  1 + 2 + … + n = n ( n + 1 ) / 2 ดังนั้น 1 + 2 + … + n = n2 /2 + n/2  n2 /2 + n2 /2 = n2 | 1 + 2 + … + n | | n2| เมื่อ C = 1 ,k = 1 โดยนิยาม จะได้ 1 + 2 + … + n เป็น O(n2 ) 36

  37. Example ตัวอย่าง จงใช้ big- O ประมาณค่า f(n) = n! วิธีทำ n! = 1.2.3 …n เมื่อ n 1 n! = 1.2.3 …n n.n…n = nn ดังนั้น | n! || nn | เมื่อ C = 1 ,k = 1 โดยนิยาม จะได้ n! = O(nn) ตัวอย่าง จงใช้ big- O ประมาณค่า f(n)= log(n!) จาก n! nn ดังนั้น log n! log nn= n log n | log n! | | n log n | เมื่อ C = 1 ,k = 1 โดยนิยาม ดังนั้น log n! = O(n log n)

  38. Example ตัวอย่างจาก n < 2n เมื่อ n เป็นจำนวนเต็มบวก(สามารถพิสูจน์ได้โดยใช้อุปนัยเชิงคณิตศาสตร์) จะได้ว่า | n | < | 2n | ดังนั้น n = O(2n) โดย k = C= 1 log n < n (เมื่อใส่ log ฐาน 2 ) | log n | | n | จะได้ log n = O(n) โดย k=C=1

  39. Example จงประมาณค่า Big-O ของฟังก์ชัน f(n) =3n log(n!) + (n2 +3)log n เมื่อ n เป็นจำนวนเต็มบวก วิธีทำ จะต้องพิจารณา ค่า Big-O ของ 3n log(n!) และ (n2 +3)log n เนื่องจาก log n! คือ O( nlog n) และแสดงได้ว่า 3n คือ O(n) จากทฤษฎี จะได้ว่า 3n log n! คือ O((n log n)n) = O(n2 log n) พิจารณา (n2 +3 ) log n เนื่องจาก | n2 +3 || n2 |+| 3 | | n2 |+| n2 | = 2| n2 | เมื่อ n  2 ดังนั้น n2 +3 คือ O(n2) จากทฤษฎีจะได้ว่า (n2 +3 ) log n คือ O(n2 log n) จากทฤษฎี จะได้ว่า f(n) คือ O(n2 log n)

  40. Example จงประมาณค่า Big-O ของฟังก์ชัน f(x) =(x + 1)log (x2 +1 ) + 3x2 วิธีทำ จะต้องพิจารณา ค่า Big-O ของ (x + 1)log (x2 +1)และ 3x2 หา Big-O ของ (x + 1)log (x2 +1) จะแสดงได้ว่า x + 1 คือ O(x) และเมื่อ x  2 จะได้ว่า x2 + 1  2 x2 log (x2 +1) log (2x2) = log 2 + log (x2) = log 2 + 2 log (x)  3 log (x) เนื่องจาก log 2 log (x) เมื่อ x  2 | log (x2 +1) |  3 | log x | ดังนั้น log (x2 +1) คือ O(log x) จากทฤษฎี จะได้ว่า (x + 1)log (x2 +1) คือ O(x log x) เนื่องจาก 3 x2 เป็น O(x2) จากทฤษฎี จะได้ว่า f(x) = O(max( x log x, x2)) = O(x2) เนื่องจาก เมื่อ x  1 จะได้ว่า x log x x2

  41. Complexity Examples จงหาฟังก์ชั่นความซับซ้อนของเวลาของขั้นตอนวิธี: : 1. fori = 1 to ndo 1.1 forj = 1 to ndo 1.1.1 A(i,j):=x วิธีทำลูปด้านในที่บรรทัด 1.1 ทำ n รอบและลูปด้านนอกที่บรรทัด 1. ทำ n รอบเช่นกัน ดังนั้น Time Complexityf(n) = n2 ดังนั้น การเติบโตของf(n)เป็นอันดับอย่างมากที่สุด O(n2)หรือf(n)เป็น O(n2)

  42. Complexity Examples จงหาฟังก์ชั่นความซับซ้อนของเวลาของขั้นตอนวิธี: 1. i := 1 2. p := 1 3. forj = 1 to ndo 3.1 p := p × i 3.2 i := i + 1 วิธีทำมีการกำหนดค่า(assignment statements) ที่บรรทัด1. และ 2. การวนลูปในบรรทัดที่ 3. ทำจำนวนnรอบ แต่ละรอบทำการกำหนดค่า 2 ครั้ง และทำ การคำนวณ(arithmetic operations)2 ครั้งในบรรทัดที่ 3.1 และ 3.2 • Time complexityf(n) = 4n + 2 • ดังนั้น การเติบโตของf(n)เป็นอันดับอย่างมากที่สุด O(n)หรือ f(n)เป็น O(n)

  43. Complexity Examples ขั้นตอนวิธีต่อไปนี้ใช้หาส่วนต่างที่มากที่สุด ระหว่าง จำนวนสองจำนวนในชุดข้อมูลเข้า procedure max_diff1(a1, a2, …, an: integers) m := 0 for i := 1 to n-1 for j := i + 1 to n if |ai – aj| > m then m := |ai – aj| {m เป็นส่วนต่างที่มากที่สุด ระหว่าง จำนวนสองจำนวนในชุดข้อมูลเข้า} Time complexityf(n): n-1 + n-2 + n-3 + … + 1 = (n – 1)n/2 = 0.5n2 – 0.5n ดังนั้น การเติบโตของf(n) เป็นอันดับอย่างมากที่สุด O(n2)หรือf(n) เป็น O(n2) 43

  44. Complexity Examples อัลกอริธึมอีกแบบหนึ่งที่ใช้แก้ปัญหาเดียวกัน: procedure max_diff2(a1, a2, …, an: integers) min := a1 max := a1 for i := 2 to n if ai < min then min := ai else if ai > max then max := ai m := max - min Time complexity f(n): 2 +2(n – 1)+2 = 2n+2 ดังนั้น การเติบโตของf(n) เป็นอันดับอย่างมากที่สุด O(n)หรือf(n) เป็น O(n) 44

  45. Efficiency of search algorithms • Linear search: (sequential search) : • Best case : First element is the required element: O(1) • Worst case: Last element or element not present : O(n) • Average case: N/2 : After dropping the multiplicative constant (1/2) : O(n)

  46. Binary search algorithm • Search requires the following steps: 1. Inspect the middle item of an array of size N. 2. Inspect the middle of an array of size N/2 3. Inspect the middle item of an array of size N/power(2,2) and so on until N/power(2,k) = 1. • This implies k = log2N • k is the number of partitions. • Best case : O(1) • Worst case : O(log2N) • Average Case : O(log2N)/2 = O(log2N)

  47. Growth-rate Functions ฟังก์ชัน g(n) ที่ใช้บ่อยๆ เรียงตามลำดับการเติบโตจากช้าที่สุดไปถึงเร็วที่สุด เมื่อจำนวนข้อมูลเข้ามี nตัว: • O(1) – constant time, the time is independent of n, e.g. array look-up • O(log n) – logarithmic time, usually the log is base 2, e.g. binary search • O(n) – linear time, Time requirement increases directly with the size of the problem. e.g. linear search • O(n*log n) – Algorithms that divide the problems into subproblems and solve them.e.g. efficient sorting algorithms e.g. merge sort • O(n2) – quadratic time, Algorithms that use two nested loops are examples. e.g. selection sort, bubble sort • O(nk) – polynomial (where k is some constant) • O(2n) – exponential time, very slow! • Order of growth of some common functions O(1) < O(log n) < O(n) < O(n * log n) < O(n2) < O(n3) < O(2n)

  48. A comparison of growth-rate functions

More Related