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

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

WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 9 Heap and Hash 1.

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


งานนำเสนอเรื่อง: "WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 9 Heap and Hash 1."— ใบสำเนางานนำเสนอ:

1 WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 9 Heap and Hash 1

2 จุดประสงค์บทเรียนที่ 9 2 มีความรู้ความเข้าใจเรื่อง Priority Queue มีความรู้ความเข้าใจเรื่อง Heap และคุณสมบัติของ Heap สามารถเพิ่ม ลบ ข้อมูล Heap ได้ สามารถแปลง binary tree ไปเป็น heap ได้ มีความรู้ความเข้าใจเรื่อง hash สามารถแก้ปัญหาการชนอินเด็กซ์ของ hash

3 Priority Queue 3 ตัวอย่างการเข้าคิวโรงพยาบาล  ตามลำดับการรับคิว  กรณีฉุกเฉินให้ความสำคัญก่อนคิวตามลำดับ ตัวอย่างเครื่องพิมพ์(printer)  ตามลำดับคำสั่งก่อนหลัง  ให้ความสำคัญกับคิวที่กำหนดความสำคัญ(priority)สูงกว่า

4 Priority Queue 4 Time Complexity MethodUnsorted ListSorted List size,isEmptyO(1) insertO(1)O(n) min,removeMinO(n)O(1)

5 Heap 5 efficient realization of priority queue from heap heap is binary tree The relational property of heap Heap-Order Property :  Heap-Order Property : every node v > v’s parent(min heap) : or every node v < v’s parent(max heap) 2 65 79 9 27 56

6 Heap 6 efficient realization of priority queue from heap heap is binary tree The relational property of heap Complete Binary Tree: let h be the height of the heap for i = 0, …, h -1,there are 2 i nodes of depth i at depth h -1, the internal nodes are to the left of the external nodes

7 Heap 7 Complete Binary Tree: let h be the height of the heap for i = 0, …, h -1,there are 2 i nodes of depth i at depth h -1, the internal nodes are to the left of the external nodes 2 65 79 depth 012012

8 Heap 8  Heap-Order Property : every node v > v’s parent(min heap)  Complete Binary Tree Property : heap is complete binary tree if 2 h-1 <= nodes <= 2 h -1 and fully node in h-1 2 65 79 2 65 7910 4<=5<=74<=6<=7

9 Heap 9 2 65 7910 11 2 5 79 4<=7<=7 4<=4<7 2 65 209 15 11 8<7<8

10 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 10 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for 31 5941 97 5853 26 6050 31 5941 97 5853 26 6050 n = 9 i = 4

11 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 11 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for 31 5941 97 5853 26 6050 i = 4 31 5941 97 5853 26 6050

12 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 12 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for 31 5941 97 5853 26 6050 i = 3 31 5941 97 5853 26 6050

13 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 13 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for 31 58 41 97 5953 26 6050 i = 3 31 5841 97 5953 26 6050

14 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 14 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for 31 5841 97 5953 26 6050 i = 2 31 5841 97 5953 26 6050

15 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 15 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for 31 58 26 97 5953 41 6050 i = 2 31 5826 97 5953 41 6050

16 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 16 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for i = 1 31 58 26 97 5953 41 6050 31 58 26 97 5953 41 6050

17 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 17 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for i = 1 26 58 31 97 5953 41 6050 26 58 31 97 5953 41 6050

18 function perculateDown(a,i) if a[i].data < a[i].L swap(a[i],a[i].L) a = perculateDown(a,indexof(a[i].L) ) end if if a[i].data <a[i].R swap(a[i],a[i].R) a = perculateDown(a,indexof(a[i].L) ) end if return a; end function Heap Restructuring 18 perculate Down Algorithm for i=n/2 to 1 a = perculateDown(a,i); end for binary tree min heap 26 58 31 97 5953 41 6050 31 5941 97 5853 26 6050

19 Insert Heap 19 58 31 97 5953 41 insert 50 26

20 Insert Heap 20 58 31 97 5953 41 50 insert 60 26

21 Insert Heap 21 58 31 97 5953 41 6050 จะเห็นว่า สามารถเพิ่มได้เลย Average Case O(1) 26 ยกเว้นกรณีที่ข้อมูลตัวใหม่น้อยกว่า root

22 Insert Heap 22 26 58 31 97 5953 41 6050 insert 25

23 Insert Heap 23 26 58 31 97 59 53 41 6050 25 จากนั้นใช้ algorithm perculate down เพื่อย้าย 25 ขึ้นไปด้านบนสุด Worst Case O(log n)

24 Insert Heap 24 25 58 26 97 59 31 41 6050 53 กรณี average case ถ้ามีการ insert n โหนด แต่ละโหนดมากกว่าหรือเท่ากับ root BigO คือ O(n) กรณี worst case ถ้ามีการ insert n โหนด แต่ละโหนดน้อยกว่า root BigO คือ O(n log n)

25 Remove Heap 25 58 26 97 59 31 41 6050 53 การลบโหนดใน Heap สามารถลบได้เฉพาะโหนด root เท่านั้น

26 Remove Heap 26 58 26 97 59 31 41 6050 53 การลบโหนดใน Heap สามารถลบได้เฉพาะโหนด root เท่านั้น จากนั้นแทนที่ด้วยโหนดสุดท้าย นั่นคือ โหนดเลเวลต่ำสุดขวาสุด

27 Remove Heap 27 58 26 97 59 31 41 6050 53 การลบโหนดใน Heap สามารถลบได้เฉพาะโหนด root เท่านั้น จากนั้นแทนที่ด้วยโหนดสุดท้าย นั่นคือ โหนดเลเวลต่ำสุดขวาสุด ทำการปรับโครงสร้างโดยใช้ perculate down algorithm

28 Remove Heap 28 58 53 97 59 31 41 6050 26 การลบโหนดใน Heap สามารถลบได้เฉพาะโหนด root เท่านั้น จากนั้นแทนที่ด้วยโหนดสุดท้าย นั่นคือ โหนดเลเวลต่ำสุดขวาสุด ทำการปรับโครงสร้างโดยใช้ perculate down algorithm

29 Heap 29 Time Complexity MethodAverage CaseWorst Case minO(1) insertO(1)O(log n) removeO(log n) build heapO(n)O(n log n)

30 30 Hash

31 31 การค้นหา O(log n) โดยไม่จำเป็นต้องเรียงลำดับข้อมูล ใช้การแปลงค่าข้อมูลด้วย Hash Function เพื่อแปลงข้อมูลเป็นแอดเดรส Hash Function ตัวอย่าง H(x) = x mod R x เป็นข้อมูลหรือค่าของคีย์ที่ต้องการแปลงเป็นแอดเดรส R เป็นตัวหารและเป็นขนาดของตารางแฮช(จำนวนเฉพาะ) H(x) เป็นข้อมูลที่ถูกแปลง

32 Hash 32 ตัวอย่าง hash table เท่ากับ 11 โดยมีข้อมูลเป็น  11 1 3 13 30 31 32 15 16 17 18 valuehash value( mod 11 ) 110 11 33 132 308 319 3210 154 165 176 187 indexvalue 011 11 213 33 415 516 617 718 830 931 1032

33 Hash 33 key collision  11 1 3 13 30 31 32 15 16 17 18 5 valuehash value( mod 11 ) 110 11 33 132 308 319 3210 154 165 176 187 55 indexvalue 011 11 213 33 415 55, 16 617 718 830 931 1032

34 Hash 34 key collision  Open Hashing(separate Chaining)  Closed Hashing(Open Addressing)  Linear Probing หาที่ว่างแอดเดรสใหม่  Double Hashing เพิ่มตารางใหม่

35 Open Hashing 35 เป็นวิธีที่นิยมใช้ ถ้าค่าซ้ำให้เก็บเป็น list ตัวต่อไป valuehash value( mod 10) 11 10100 44 255 166 99 211 644 366 499 indexvalue 010 1121 2 3 4464 525 61636 7 8 9949

36 Linear Hashing 36 ถ้าค่าซ้ำให้หา index ตัวต่อไปที่ว่าง แล้วแทนที่ลงไป valuehash value( mod 10) 11 10100 44 255 166 99 211 644 366 499 indexvalue 010 1121 2 3 4464 525 61636 7 8 9949 indexvalue 010 11 221 349 44 525 616 764 836 99

37 Linear Hashing 37 ถ้าค่าซ้ำให้ใช้ค่า index = hash + double hash valuehash value( mod 10)double(7 – value mod 7)index 1161 1010040 4434 25535 16656 9959 21178 644610 366612 49977 indexvalue 010 11 2 3 44 525 616 749 821 99 1064 11 1236


ดาวน์โหลด ppt WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 9 Heap and Hash 1.

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


Ads by Google