ต้นไม้เอวีแอล (AVL Tree)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Computer Programming 1 LAB Test 3
Advertisements

AVL Tree.
วิทยาการคอมพิวเตอร์ 1 เรื่องคัดเฉพาะทาง
หน่วยที่ 18 เครื่องวัดรูปคลื่นสัญญาณไฟฟ้า 2
ค คณิตศาสตร์สำหรับ คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม คุณสมบัติของต้นไม้ และต้นไม้ทวิภาค.
PHPPHP การเขียนโปรแกรมคอมพิวเตอร์ 1 สาขาวิชาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ.
การประเมินผลโครงการ บทที่ 9 ผศ.ญาลดา พรประเสริฐ yalada.
บทที่ 5 การควบคุมทิศทางการทำงานของโปรแกรม
ความรู้เบื้องต้นเกี่ยวกับระบบฐานข้อมูล
จัดทำโดย น. ส. ดวงกมล งามอยู่เจริญ เลขที่ 8 น. ส. ณัชชา เชื้อตา เลขที่ 6 เตรียมบริหารธุรกิจปี 1.
หน่วยที่ 3 ภาษาคำสั่งพื้นฐานที่ใช้เขียนโปรแกรม PLC
หน่วยที่ 2 โครงสร้างโปรแกรมเมเบิลคอนโทรลเลอร์
ทบทวนอสมการกำลัง 1 การหาเซตคำตอบของ อสมการ ตัวอย่า ง.
โครงสร้างข้อมูลและขั้นตอนวิธี
1 Search & Sort Search & Sort วรวิทย์ พูลสวัสดิ์.
กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
และสร้างเว็บไซต์ประเภทCMS
Linked List (2) Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
การใช้งาน Microsoft Word กลุ่ม 2T_PUK. โปรแกรม Microsoft Word เป็นโปรแกรมสำเร็จรูปที่เหมาะกับ งานพิมพ์ต่าง ๆ แทนเครื่องพิมพ์ดีดในสมัยก่อน ที่เวลาแก้ไข.
การเปรียบเทียบผลสัมฤทธิ์ทางการ เรียน วิชาการจัดเก็บเอกสารของนักเรียน ระดับประกาศนียบัตรวิชาชีพชั้นปีที่ 3 ที่ใช้กิจกรรมการเรียนรู้แบบ ร่วมมือ เทคนิคจิ๊กซอว์กับการสอนแบบปกติ
IT Manual SCM June 2016 By Prasert Dokmuang. 2 3.
การจัดเก็บข้อมูลในแฟ้มข้อมูลธรรมดา นั้น อาจจำเป็นที่ใช้แต่ละคน จะต้องมีแฟ้มข้อมูลของตนไว้เป็นส่วนตัว จึง อาจเป็นเหตุให้มีการเก็บข้อมูล ชนิดเดียวกันไว้หลาย.
การพัฒนาบทเรียนคอมพิวเตอร์ช่วยสอน เรื่อง หลักการทำงานของคอมพิวเตอร์ วิชาคอมพิวเตอร์พื้นฐาน สำหรับนักเรียนชั้นมัธยมศึกษาปีที่ 1 โรงเรียนเฉลิมราชประชาอุทิศ.
หน่วยรับตรวจส่วนงานย่อย สพฐ. สพป. / สพม. โรงเรียน สำนัก กลุ่ม / หน่วย กลุ่ม / งาน สำนักงานคณะกรรมการการศึกษาขั้นพื้นฐาน กำหนดหน่วยรับตรวจ และส่วนงานย่อย.
Project Management by Gantt Chart & PERT Diagram
“งานทะเบียนและข้อบังคับฯ ที่เกี่ยวข้องกับนักศึกษา”
Burin Rujjanapan Updated:
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
แนวข้อสอบ Final (จดด่วน)
โครงสร้างข้อมูลและอัลกอริทึมเบื้องต้น
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
int isEmpty ( node **ptr_head) ;
การจัดการระบบฐานข้อมูล ภาษาที่ใช้ในระบบจัดการฐานข้อมูล
ห้องแลปการคิดสร้างสรรค์
Tree 2.
Trees (2) University of Phayao Sanchai Yeewiyom
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
Seminar 1-3.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การวิเคราะห์ ต้นทุน ปริมาณ กำไร
คำสั่ง Create , Insert, Delete, Update
การสร้างโมเดลจำลองความสัมพันธ์ ระหว่างข้อมูล E-R Model
Data storage II Introduction to Computer Science ( )
Delirium พญ. พอใจ มหาเทพ 22 มีนาคม 2561.
บทที่7 ทฤษฎีกราฟเบื้องต้น
ผลการเรียนรู้ 1. สามารถบอกความหมายของการสืบค้นข้อมูลได้ 2. สามารถบอกประเภทของการสืบค้นข้อมูลได้ 3. สามารถตรวจสอบความน่าเชื่อถือของข้อมูลได้
กฎกระทรวง ฉบับที่ 66 (พ.ศ. 2559) ออกตามความในพระราชบัญญัติควบคุมอาคาร พ.ศ วันที่ประกาศในราชกิจจานุเบกษา
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 05: การวิเคราะห์ความซับซ้อนของ ขั้นตอนวิธีการเรียงลำดับข้อมูล.
Data storage II Introduction to Computer Science ( )
การแก้ไขข้อมูล ความสัมพันธ์ระหว่างตาราง
Data Structures and Algorithms 2/2561
Data Structures and Algorithms 2/2561
บทที่ 8 การแก้ไขข้อผิดพลาดโปรแกรม(Debugging)
Tree.
หัวใจหยุดเต้น หยุดหายใจ ปั๊มหัวใจ ทำอย่างไร ?
ค่ารูรับแสง - F/Stop ค่ารูรับแสงที่มีค่าตัวเลขต่ำใกล้เคียง 1 มากเท่าไหร่ ค่าของรูรับแสงนั้นก็ยิ่งมีความกว้างมาก เพราะเราเปรียบเทียบค่าความสว่างที่ 1:1.
4.4 AVL Trees AVL (Adelson-Velskii and Landis) tree เป็น binary search tree กำกับด้วยเงื่อนไขของการสมดุล และประกันว่า depth ของ tree จะเป็น O(log n) อย่างง่ายที่สุดคือกำหนดว่า.
2 โครงสร้างข้อมูลแบบสแตก (STACK).
Data Structure and Algorithms
Array: One Dimension Programming I 9.
ฟังก์ชันของโปรแกรม Computer Game Programming
หน่วยการเรียนรู้ที่ 1 พลเมืองดี.
การประเมินผลโครงการ บทที่ 9 ผศ.ญาลดา พรประเสริฐ yalada.
Decision: Single and Double Selection (if and if-else statement)
MTRD 427 Radiation rotection - RSO
มหาวิทยาลัยเทคโนโลยีราชมงคลศรีวิชัย วิทยาเขตภาคใต้
ใบสำเนางานนำเสนอ:

ต้นไม้เอวีแอล (AVL Tree)

หัวข้อ นิยามต้นไม้เอวีแอล การวิเคราะห์ความสูงของต้นไม้เอวีแอล การปรับต้นไม้เอวีแอลให้สูงสมดุล กระบวนการหมุนปม

ต้นไม้ค้นหาแบบทวิภาค เวลาการทำงานเป็น O(h) log2 n  h  n – 1 โชคดีทำงานเร็ว O(log n), โชคร้ายทำงานช้า O(n) 4 5 2 6 1 3 2 1 6 4 3 5 3 2 5 4 6 1

ต้นไม้เอวีแอล hL hR AVL = Binary Search Tress + กฎความสูงสมดุล ต้นไม้ย่อยทุกต้นต้องเป็นไปตามกฎ AVL : Adelson-Velskii and Landis

ตัวอย่างต้นไม้เอวีแอล -1 -1 1 2 1 -1 -1 -1 -1 2 2 1 -1 1 1 -1 1 -1 -1 1 -1 -1 ต้นไม้ว่าง (null) สูง -1

ต้นไม้ค้นหาแบบทวิภาคกับเอวีแอล ต้นไม้ค้นหาแบบทวิภาคที่สร้างจากข้อมูลสุ่ม 1000 ตัว ต้นไม้เอวีแอลที่สร้างจากข้อมูลสุ่ม 1000 ตัว

ต้นไม้เอวีแอลสูงเท่าใด ? ให้ Fh คือต้นไม้เอวีแอลซึ่งสูง h ที่มีจำนวนปมน้อยสุด F0 F1 F2 F3 F4 Fh – 2 Fh – 1 Fh |Fh| = 1 + |Fh–1| + |Fh–2| Fibonacci Tree

ความสูงของต้นไม้ฟิโบนักชี สรุป : ต้นไม้เอวีแอลที่มี n ปม สูงไม่เกิน 1.44 log2n log2 n  hAVL  1.44 log2 n

ทำอย่างไรให้เป็นไปตามกฎของ AVL การเพิ่ม/ลบข้อมูลทำเหมือน BSTree แต่หลังการเพิ่ม/ลบ อาจทำให้ผิดกฎสูงสมดุล ถ้าผิดกฎ ต้องปรับต้นไม้ 9 5 6 8 1 3 2 1 2 5 3 1 2 5 3 6 8 6 8 9 6 8

โครงสร้างปมของต้นไม้เอวีแอล struct SAVLNode; typedef struct SAVLNode *AVLNode; struct SAVLNode { DType data; int height; AVLNode left; AVLNode right; }; AVLNode newAVLNode(DType d, AVLNode left, AVLNode right) { AVLNode n = (AVLNode) malloc(sizeof(struct SAVLNode)); n->data = d; n->left = left; n->right = right; setHeightAVLNode(n); // ---> next page return n; } void freeAVLNode(AVLNode n) { free(n); แต่ละปมมีความสูงกำกับ

โครงสร้างปมของต้นไม้เอวีแอล int getHeightAVLNode(AVLNode n) { // the height of NULL is -1 return (n == NULL ? -1 : n->height); } void setHeightAVLNode(AVLNode n) { int hL = getHeightAVLNode(n->left); int hR = getHeightAVLNode(n->right); n->height = 1 + (hL > hR ? hL : hR); int balanceValue(AVLNode n) { return getHeightAVLNode(n->right) – getHeightAVLNode(n->left); +1 -1 -2 +2

การหมุนปม การปรับต้นไม้อาศัยการหมุน (rotation) การหมุนปมยังคงรักษาความเป็นต้นไม้ค้นหา r r 20 99 10 5 10 5 20 99 15 15 rotateLeftChild(r) rotateRightChild(r)

rotateLeftChild( r ) (1) r newRoot newRoot 5 99 15 5 15 99 AVLNode rotateLeftChild(AVLNode r) { AVLNode newRoot = r->left; r->left = newRoot->right; newRoot->right = r; setHeightAVLNode(newRoot->right); setHeightAVLNode(newRoot); return newRoot; } (1) r 20 10 5 15 99 newRoot 10 20 5 15 99 newRoot

rotateRightChild( r ) (1) r newRoot newRoot 99 5 15 99 5 15 AVLNode rotateRightChild(AVLNode r) { AVLNode newRoot = r->right; r->right = newRoot->left; newRoot->left = r; setHeightAVLNode(newRoot->left); setHeightAVLNode(newRoot); return newRoot; } (1) r 10 20 99 15 5 newRoot 20 10 99 15 5 newRoot

add และ remove ใช้ rebalance AVLNode _addAVL(AVL t, AVLNode r, DType x) { ... // same as _addBST r = rebalance(r); return r; } AVLNode _removeAVL(AVL t, AVLNode r, DType x) { ... // same as _removeBST เพิ่มตามปกติ แล้วค่อยปรับ ลบตามปกติ แล้วค่อยปรับ rebalance มี 4 กรณี

rebalance : กรณีที่ 1 5 2 6 1 3 5 2 6 1 3 5 2 6 1 3 r x x r C A B B C 5 2 6 1 3 x r B C A r x C B A rotateLeftChild(r)

rebalance : กรณีที่ 2 3 5 2 6 4 3 5 2 6 4 9 3 5 2 6 4 9 r x x r C A B rotateRightChild(r)

rotateRightChild(r->left) rebalance : กรณีที่ 3 5 2 6 1 3 5 2 6 1 3 4 5 2 6 1 3 4 5 2 6 1 3 4 x r D A B C y r D A B C y x r D A B C y x rotateRightChild(r->left) rotateLeftChild(r)

rotateLeftChild(r->right) rebalance : กรณีที่ 4 2 5 1 6 4 2 5 1 6 4 3 2 5 1 6 4 3 2 5 1 6 4 3 x r A D C B y r A D C B y x r A D C B y x rotateLeftChild(r->right) rotateRightChild(r)

rebalance (1) x r B C A D y AVLNode rebalance(AVLNode r) { rotateRightChild(r) rotateLeftChild(r.right) x r B C A D y AVLNode rebalance(AVLNode r) { if (r == NULL) return r; int balance = balanceValue(r); if (balance == -2) { if (balanceValue(r->left) == 1) r->left = rotateRightChild(r->left); r = rotateLeftChild(r); } else if (balance == 2) { if (balanceValue(r->right) == -1) r->right = rotateLeftChild(r->right); r = rotateRightChild(r); } setHeightAVLNode(r); return r; (1) x r D A B C y rotateLeftChild(r) x r B C A rotateRightChild(r->left) rotateLeftChild(r)

ตัวอย่าง 1, 2, 3, 6, 8, 4, 15, 14 1 2 2 3 1 6 1 1 2 3 2 3 1 2 3 1 6 8 2 6 1 8 3 2 3 1 6 8 4 3 6 8 4 2 1 15 2 6 1 8 3 4 3 6 8 4 2 1 3 6 8 4 2 1 15 14 3 6 8 4 2 1 14 15 3 6 4 2 1 14 15 8

สรุป ต้นไม้เอวีแอลคือต้นไม้ค้นหาที่ถูกควบคุมความสูง ผลต่างความสูงของลูกสองข้างห้ามเกินหนึ่ง พิสูจน์ได้ว่า log2 n  h < 1.44 log2 n แต่ละปมเก็บความสูงไว้ตรวจสอบ ถ้าหลังเพิ่ม/ลบข้อมูลแล้วผิดกฎ, ให้ปรับต้นไม้ การปรับต้นไม้อาศัยการหมุนปม เวลาการทำงานของการเพิ่ม ลบ และค้นเป็น O(log n)