งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

การแบ่งแยกและเอาชนะ Divide & Conquer

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "การแบ่งแยกและเอาชนะ Divide & Conquer"— ใบสำเนางานนำเสนอ:

1 การแบ่งแยกและเอาชนะ Divide & Conquer

2 บทนำ กลวิธีนี้มีใช้เพื่อจัดการกับปัญหาในหลากหลายศาสตร์กับการออกแบบ อัลกอริทึม เพื่อแก้ไขปัญหาเชิงคำนวณ แนวคิดการแก้ปัญหาแบบนี้มี หลักการว่า แบ่งปัญหาใหญ่นั้นออกเป็นปัญหาย่อยๆ หลาย ๆ ปัญหาที่มี ขนาดเล็กกว่า หาคำตอบของแต่ละปัญหาย่อย แล้วนำคำตอบย่อยๆ ที่ได้นี้มา รวมกันเพื่อกลายเป็นคำตอบของปัญหาใหญ่ อาจจะซับซ้อนน้อยกว่า และ ใช้เวลาโดยรวมที่ดีกว่าก็ได้ อัลกอริทึมแบบแบ่งแยกและเอาชนะมักมีประสิทธิภาพที่ดีกว่าอัลกอริทึมที่ ทำงานอย่างตรงไปตรงมา ค่อยเป็นค่อยไป นอกจากนี้ยังเขียนบรรยายตัว อัลกอริทึมในรูปของการทำซ้ำแบบเรียกซ้ำได้อย่างเหมาะมาก ทำให้เขียน บรรยายอัลกอริทึมได้อย่างไม่ซับซ้อน และวิเคราะห์ประสิทธิภาพการทำงาน ได้ง่าย

3 หัวข้อ โครงของอัลกอริทึมแบบ Divide & Conquer ตัวอย่าง Binary search
Modular exponentiation Karatsuba integer multiplication Strassen matrix multiplication Merge sort Quick sort Quick select Closet point Min + Max Celebrity problem

4 โครงของอัลกอริทึมแบบ Divide & Conquer

5 Divide – Conquer - Combine
DQ ( P) { if ( P is trivial ) return Solve ( P ) Divide P into P1, P2, … , Pk for ( i =1to k ) Si = DQ ( Pi ) S = Combine ( S1, S2, …, Sk) return S }

6 Binary Search

7 Binary Search input : x และ 𝐷=< 𝑑 1 , 𝑑 2 , 𝑑 3 ,…, 𝑑 𝑛 > 𝑑 1 ≤ 𝑑 2 ≤𝑑 3 ≤…≤ 𝑑 𝑛 x และ 𝑑 𝑖 เป็นจำนวนจริง output : ค่า k ที่ 𝑑 𝑘 =𝑥 ถ้าหาไม่พบ คืน -1

8

9

10 Binary Search bsearch( d[1…n], x, left, right ) { if ( left > right ) return -1 mid = (𝑙𝑒𝑓𝑡+𝑟𝑖𝑔ℎ𝑡)/2 if ( x == d[mid] ) return mid if ( x < d[mid]) return bsearch( d, x, left, mid – 1) else return bsearch( d, x, mid + 1, right) }

11

12 บางครั้งใช้ binary search ดีกว่า

13

14 Modular exponentiation

15 2 60 𝑚𝑜𝑑 10=? แสดงโดยการใช้เครื่องคิดเลขให้ดูก่อน

16 𝑎 𝑘 𝑚𝑜𝑑 𝑚

17

18 การคำนวณ 𝑎 𝑘 𝑚𝑜𝑑 𝑚

19 การคูณหารเลขขนาดใหญ่ไม่ใช่ Θ(1)

20 การหาค่า Fibonacci

21 Karatsuba integer multiplication

22 A x B : คูณได้เร็วกว่า Θ( 𝑛 2 )

23 A x B

24 A x B อีกแบบ

25 A x B : Karatsuba (1962)

26 เปรียบเทียบเวลาการทำงาน

27 Strassen matrix multiplication

28 A x B : การคูณเมทริกซ์ MatrixMult( A[1..n][1..n], B[1..n][1..n] ){ C = new array[1..n][1..n] for ( i = 1; i <= n; i++ ) { for(j= 1; j<= n; j++){ C[i][j] = 0 for ( k = 1; k <= n; k++ ) { C[i][j] += A[i][k] * B[k][j] } return C n

29 A x B : Divide & Conquer

30 A x B : Divide & Conquer

31 A x B : Strassen (1969)

32 Master Method (ตีความ)

33 Merge Sort

34 Merge Sort

35 Merge Sort

36 Merge Sort

37 Merge

38 Merge : #cmps

39

40 Merge Sort : ถ้าแบ่ง

41 Quick Sort

42 Quick Sort

43

44 Quick Sort

45 Partition (การแบ่งส่วน)

46

47 Quick Sort

48 Quick Sort : กรณีเร็วสุด

49 Quick Sort : กรณีช้าสุด

50 Quick Sort : กรณีเฉลี่ย

51 Quick Sort : กรณีเฉลี่ย

52 Quick Sort : เวลาการทำงาน

53 เวลาการทำงาน

54 เวลา / n log n


ดาวน์โหลด ppt การแบ่งแยกและเอาชนะ Divide & Conquer

งานนำเสนอที่คล้ายกัน


Ads by Google