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

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

การจัดเรียง ข้อมูล (sorting) ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.

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


งานนำเสนอเรื่อง: "การจัดเรียง ข้อมูล (sorting) ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong."— ใบสำเนางานนำเสนอ:

1 การจัดเรียง ข้อมูล (sorting) ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong

2 หัวข้อวันนี้ ขั้นตอนวิธี (Algorithm) การจัดเรียงแบบ ต่างๆ Insertion sort ( เรียนแล้ว ) Selection sort ( เรียนแล้ว ) Bubble sort ( เรียนแล้ว ) Merge sort ( ครั้งนี้ ) Quick sort ( ครั้งนี้ ) 2

3 merge sort มักใช้ในการจัดเรียงข้อมูลที่มีขนาดใหญ่มากๆ ใช้วิธีการแบ่งแยกและเอาชนะ (Divide and Conquer Algorithm) ใช้การเรียงข้อมูลขนาดเล็กหลายๆ ส่วนแทน การเรียงข้อมูลขนาดใหญ่เพียงส่วนเดียว เช่น เรียงข้อมูล 1,000 ตัวด้วย bubble sort 1,000 2 = 1,000,000 เรียงข้อมูล 500 ตัว 2 ชุด ด้วย bubble sort 500 2 + 500 2 + 1,000 =501,000 3

4 เรียงข้อมูล 250 ตัว 4 ชุด ด้วย bubble sort 4*(250 2 ) + 1,000 =251,000 ------------------------------------------------- ----------------------------------------- ใช้วิธีการแบ่งข้อมูลเริ่มต้นออกเป็น 2 ส่วนที่ เท่ากัน จากข้อมูลทั้ง 2 ส่วน แบ่งแต่ละส่วนออกเป็น 2 ส่วนที่เท่ากัน ทำการแบ่งไปเรื่อยๆ จนไม่สามารถแบ่งได้อีก ( แต่ละส่วนมีข้อมูลอยู่ตัวเดียว ) นำข้อมูลมาประสานพร้อมจัดเรียงไล่กลับขึ้นไป ทีละคู่ตามลำดับ 4

5 5 427136 (2, 4) (1, 7) (3, 6) (5, 4, 2, 7, 1, 3, 6) (5, 4, 2) (7, 1, 3, 6) (5)(5) (4, 2) (7, 1) (3, 6) (2, 4, 5) (1, 3, 6, 7) (1, 2, 3, 4, 5, 6, 7)

6 pseudo code ของ merge sort function Mergesort (data A, int Lb, int Ub) { if Lb < Ub then { Middle = (Lb + Ub)/2 MergeSort (A, Lb, Middle) MergeSort (A, Middle + 1, Ub) Merge(A, Lb, Middle, Ub) } function Merge (data A, int Lb, int Middle, int Ub) { allocate tmp1 for A[Lb...Middle] allocate tmp2 for A[middle+1...Ub] merge tmp1 and tmp2 back to A by order } 6

7 การวิเคราะห์อัลกอริทึม ต้องวิเคราะห์เป็นกรณีต่างๆ หรือไม่ เพราะอะไร ? ไม่ต้อง ไม่ว่า “ ค่า ” ของข้อมูลเป็นอย่างไร ก็ต้อง “ แยก ” จนไม่สามารถแยกได้ แล้วจึง “ ประสาน ” คืน f(n) merge = n ( จำนวนข้อมูลจาก Lb – Ub ขณะนั้น ) f(n) mergesort = ? 7

8 8... f(n) merg e numb er of merg e n1 n/22 8n/8 4n/4  f(n) mergesort = n(1) + n/2(2) + … + 8(n/8) + 4(n/4) + 2(n/2) = n log 2 n 2n/2... O (n log n)

9 Quick sort เหมาะกับข้อมูลที่มีขนาดใหญ่ จัดเรียงโดยแบ่งข้อมูลออกเป็นสองส่วนเพื่อ ใช้ในการจัดเรียง คล้ายกับ merge sort จัดอยู่ในกลุ่ม Divide and Conquer เช่นเดียวกัน ได้ชื่อว่าเร็ว เพราะส่วนใหญ่จะทำงานได้เร็ว ที่สุด 9

10 Quick sort – Basic quick sort quick sort จะเรียงข้อมูลพร้อมกับการแบ่ง ข้อมูล โดยจะสุ่มเลือกข้อมูลขึ้นมา 1 ตัว เรียกว่า pivot ส่วนมากเลือกจากข้อมูลตัวแรกหรือกึ่งกลาง ของกลุ่ม จัดข้อมูลให้ด้านซ้ายเป็นข้อมูลที่มีค่าน้อยกว่า pivot ด้านขวาเป็นข้อมูลที่มีค่ามากกว่า pivot จะได้ข้อมูล 2 ส่วนซึ่งแยกกันด้วย pivot นำแต่ละส่วนมาทำการ quick sort ไปเรื่อยๆ จน ไม่สามารถแบ่งได้อีก 10

11 MERGE SORT แยกจนถึงที่สุด แล้วจึงประสานพร้อมกับ จัดเรียง QUICK SORT แยกพร้อมกับจัดเรียง 11

12 12 (a[1], a[2], …, a[p] …, a[p-1], a[n]) กลุ่มของข้อมูล ที่มีค่าน้อยกว่า pivot กลุ่มของข้อมูล ที่มีค่ามากกว่า pivot pivot ( a[p] ) quick sort … …

13 13 (4, 10, 2, 6, 5, 8, 7, 3, 9, 1) (4, 2, 3, 1) ( 10, 6, 8, 7, 9) (1)(1) (4, 3) (6, 7) (10, 9) (5)(5) (2)(2) (3)(3) (4)(4) (- ) (8)(8) (6)(6) (7)(7) (9)(9) (1 0) (- ) (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

14 MERGE SORT แยกออกเป็น 2 ส่วนที่เท่ากัน QUICK SORT แยกออกเป็น 2 ส่วน แต่ไม่จำเป็นต้อง เท่ากัน 14

15 pseudo code ของ quick sort function QuickSort (data A, int Lb, int Ub) { if Lb < Ub then { pivot = Partition (A, Lb, Ub) QuickSort (A, Lb, pivot - 1) QuickSort (A, pivot + 1, Ub) } function Partition (data A, int Lb, int Ub) { select a pivot from A[Lb]...A[Ub] reorder A[Lb]...A[Ub] such that : all values to the left of the pivot are < pivot all values to the right of the pivot are >= pivot return pivot position } 15

16 Quick sort : Choose the pivot นิยมเลือก pivot จากข้อมูลตัวแรกของ อาร์เรย์ หรือ ข้อมูลตัวที่อยู่กึ่งกลางของ อาร์เรย์ เป็นการสุ่มอย่างหนึ่ง ถ้าสุ่มเลือก pivot ได้ดี -> quick sort ทำงานได้เร็วมาก ( เลือก pivot ที่แบ่งข้อมูล ออกเป็น 2 ส่วนที่เท่ากัน ) ถ้าสุ่มเลือก pivot ได้ไม่ดี -> quick sort จะ ทำงานได้ช้า ( เลือก pivot ที่แบ่งข้อมูลแล้ว ส่วนใดส่วนหนึ่งไม่มีข้อมูล – pivot เป็นข้อมูล ที่มีค่ามากหรือน้อยที่สุด ) pivot กำหนดความเร็วของอัลกอริทึม 16

17 17 ( ข้อมูลเริ่มต้น 10 ตัว ) (9 ตัว ) (8 ตัว ) piv ot (...) piv ot (1 ตัว ) piv ot ทำ quick sort 9 ครั้ง ตัวอย่างการเลือก pivot ที่ไม่ดี เลือก pivot ที่แบ่งข้อมูลแล้วส่วนใดส่วน หนึ่งไม่มีข้อมูล – pivot เป็นข้อมูลที่มีค่า มากหรือน้อยที่สุด

18 18 ( ข้อมูลเริ่มต้น 10 ตัว ) (4 ตัว ) (5 ตัว ) (2 ตัว ) piv ot ตัวอย่างการเลือก pivot ที่ดี (1 ตัว ) piv ot (1 ตัว ) piv ot (2 ตัว ) (1 ตัว ) piv ot (1 ตัว ) piv ot ทำ quick sort 6 ครั้ง เลือก pivot ที่แบ่งข้อมูลออกเป็น 2 ส่วนที่ เท่ากัน, เกือบเท่ากัน

19 การวิเคราะห์อัลกอริทึม ต้องวิเคราะห์เป็นกรณีต่างๆ หรือไม่ เพราะอะไร ? ต้อง เพราะฟังก์ชัน Quicksort จะแบ่งข้อมูล ออกเป็นกลุ่มตามผลการเลือก pivot ถ้าเป็นกรณีที่ดีที่สุด จะได้รูปร่างคล้าย tree ที่มีความสูง log 2 n (complete binary tree) กรณีแย่ที่สุด จะได้รูปร่างคล้าย tree ที่มี ความสูง n เนื่องจากการวิเคราะห์ค่อนข้างซับซ้อน จึงไม่ พูดถึง best = O (n log 2 n), average = O (n log 2 n), worst = O(n 2 ) 19

20 Quick sort : with in- place partition การจัดเรียงข้อมูลในฟังก์ชัน partition นิยม ใช้วิธีการคล้ายกับ insertion sort ( แทรก ข้อมูล ณ ตำแหน่งที่ถูก ) โดยขั้นแรกจะทำการเลือก pivot ก่อน จากนั้นจึงอ่านค่าที่เหลือของพาร์ทิชันและ นำมาเปรียบเทียบกับ pivot ทีละตัว ถ้าตัวใดมี ค่าน้อยกว่า pivot จะถูกสลับที่มาอยู่ฝั่งซ้าย ถ้าตัวใดมีค่ามากกว่า pivot จะถูกสลับที่มาอยู่ ฝั่งขวา การจัดเรียงที่เกิดขึ้นทั้งหมด ไม่ต้องมีการจอง หน่วยความจำเพิ่มเติม -> มีประสิทธิภาพสูง, เร็ว 20

21 function Partition (data A, int Lb, int Ub) { // p_pos = (Lb+Ub) / 2 // swap (a[Lb],a[p_pos]) p_pos = Lb pivot = a[Lb] for ( i = Lb + 1 ; i <= Ub ; i++ ) { if (a[i] < pivot) { p_pos++ swap (a[i], a[p_pos]) } swap (a[Lb], a[p_pos]) return p_pos } 21 ตัวอย่า ง ในกรณีที่เลือกค่า กึ่งกลางพาร์ทิชันเป็น pivot


ดาวน์โหลด ppt การจัดเรียง ข้อมูล (sorting) ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.

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


Ads by Google