ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
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
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) }
12
บางครั้งใช้ binary search ดีกว่า
14
Modular exponentiation
15
2 60 𝑚𝑜𝑑 10=? แสดงโดยการใช้เครื่องคิดเลขให้ดูก่อน
16
𝑎 𝑘 𝑚𝑜𝑑 𝑚
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
40
Merge Sort : ถ้าแบ่ง
41
Quick Sort
42
Quick Sort
44
Quick Sort
45
Partition (การแบ่งส่วน)
47
Quick Sort
48
Quick Sort : กรณีเร็วสุด
49
Quick Sort : กรณีช้าสุด
50
Quick Sort : กรณีเฉลี่ย
51
Quick Sort : กรณีเฉลี่ย
52
Quick Sort : เวลาการทำงาน
53
เวลาการทำงาน
54
เวลา / n log n
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.